excel存在于客户机上,因为有可能存在并发操作,暂不考虑将excel先上传至服务器再进行数据导入,我的想法是在客户端先用js读取excel文件里的内容,再结果 c#将html里的内容写入数据库,请高手指教,最好是有代码示例.分不够再加,在线等.

解决方案 »

  1.   

    using System;
    using System.Data;
    using System.Diagnostics;
    using System.Reflection;namespace RC.MSOffice
    {
        /// <summary>
        /// Excel相关
        /// </summary>
        public class ExcelUtility
        {
            /// <summary>
            /// 导出Excel
            /// </summary>
            /// <param name="dataSet">需要导出Excel的DataSet</param>
            /// <param name="fileName">导出的路径</param>
            public static void ExportToExcel(DataSet dataSet, string fileName)
            {
                if (dataSet.Tables.Count == 0)
                {
                    throw new Exception("DataSet中没有任何可导出的表。");
                }            Microsoft.Office.Interop.Excel.Application excelApplication = new Microsoft.Office.Interop.Excel.Application();
                excelApplication.DisplayAlerts = false;            Microsoft.Office.Interop.Excel.Workbook workbook = excelApplication.Workbooks.Add(Missing.Value);            foreach (DataTable dt in dataSet.Tables)
                {
                    Microsoft.Office.Interop.Excel.Worksheet lastWorksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(workbook.Worksheets.Count);
                    Microsoft.Office.Interop.Excel.Worksheet newSheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.Add(Type.Missing, lastWorksheet, Type.Missing, Type.Missing);                newSheet.Name = dt.TableName;                for (int col = 0; col < dt.Columns.Count; col++)
                    {
                        newSheet.Cells[1, col + 1] = dt.Columns[col].ColumnName;
                    }                for (int row = 0; row < dt.Rows.Count; row++)
                    {
                        for (int col = 0; col < dt.Columns.Count; col++)
                        {
                            newSheet.Cells[row + 2, col + 1] = dt.Rows[row][col].ToString();
                        }
                    }
                }            ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete();
                ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete();
                ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Delete();
                ((Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets.get_Item(1)).Activate();            try
                {
                    workbook.Close(true, fileName, System.Reflection.Missing.Value);
                }
                catch (Exception e)
                {
                    throw e;
                }            excelApplication.Quit();            KillExcel();
            }        private static void KillExcel()
            {
                Process[] excelProcesses = Process.GetProcessesByName("EXCEL");
                DateTime startTime = new DateTime();            int processId = 0;
                for (int i = 0; i < excelProcesses.Length; i++)
                {
                    if (startTime < excelProcesses[i].StartTime)
                    {
                        startTime = excelProcesses[i].StartTime;
                        processId = i;
                    }
                }            if (excelProcesses[processId].HasExited == false)
                {
                    excelProcesses[processId].Kill();
                }
            }
        }
      

  2.   

    js 不能操作客户端的文件,除非用activex
      

  3.   

    1、js读取excel内容
    参考:http://www.cnblogs.com/freeliver54/archive/2006/04/11/372646.html2、将excel内容里的字段,序列化成json数据格式(或者xml数据格式,推荐json)
    使用开源的解析器来序列化:
    参考:http://www.dreamdu.com/blog/2008/10/19/json_in_javascript/
    自己写代码来序列化:
    比如:可以使用jquery的serializeArray()方法3、将json数据格式传入asp.net处理页面,封装成一个实体对象
    C#下使用Json.NET,1.3版本支持framework2.0,3.0版本支持framework3.54、调用你的数据保存方法,将实体对象存入数据库
      

  4.   

          public static DataSet getExcelData(string fileurl,string sheetname) 

    try 

    //创建一个数据链接 
                    string strCon = "Provider=Microsoft.Jet.OleDb.4.0;" + "data source="
                        + fileurl + ";Extended Properties='Excel 8.0; HDR=No; IMEX=1'";             //   string strCon = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = ‘" + fileurl + "’;Extended Properties='Excel 8.0;IMEX=1;'"; 
    string strSql = "SELECT * FROM ["+sheetname+"$]"; 
    odconn = new OleDbConnection(strCon); 
    odconn.Open(); 
    //打开数据链接,得到一个数据集 
    odapt = new OleDbDataAdapter(strSql,odconn); 
    //创建一个 DataSet对象 
    ds = new DataSet(); 
    //得到自己的DataSet对象 
    odapt.Fill(ds,"datatable"); 
    //关闭此数据链接 
    odapt.Dispose(); 
    odconn.Dispose(); 
    return ds; 
                    

    catch(Exception e) 
    {
                    string s = e.Message;
    try 

    if(ds != null) 

    ds.Clear(); 


    catch 

    return null; 

    try 

    if(odapt != null) 

    odapt.Dispose(); 


    catch 

    return null; 

    try 

    if(odconn != null) 

    odconn.Close(); 
    odconn.Dispose(); 


    catch 

    return null; 

    return null; 

    }
    得到Excel中的数据,我之前没有导入进去,就insert 一条条数据插进去的。。
      

  5.   

    要读是可以,用js调用excel对象,但一般是没有客户端权限的,还是建议先上传.
      

  6.   

    当然也可以写一个脚本给用户下载,修改注册表权限,安装activex控件
      

  7.   

    js操作Excel比较麻烦,需要生成json数据,还要考虑权限;
    在不是非常必要的情况下,建议楼主上传到服务器,然后通过程序来导入;