【问题标题】:Export a DataTable to an existing Excel将数据表导出到现有 Excel
【发布时间】:2011-12-22 08:28:34
【问题描述】:

我需要打开一个现有的 Excel 文件并用 DataTable 填充它。 我该怎么做?

我在 ASP.NET 中工作

我已经尝试使用此解决方案创建 excel (http://stackoverflow.com/questions/1746701/export-datatable-to-excel-file) 然后我尝试用这样的 OLEDB 连接打开它,但它不起作用.. 它说表格的格式不正确.. 然后它说 ir 找不到 ISAM 文件..我不知道该怎么办..

System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;DataSource=C:\reports\report.xls;Extended Properties=""Excel 8.0;HDR=No;IMEX=1""");

conn.Open();
System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand();
cmd.Connection = conn;

cmd.CommandText = @"SELECT * INTO [Excel 8.0;Database=C:\reports\reportBase.xls].[SheetBase1] FROM Sheet1]";

cmd.ExecuteNonQuery();
conn.Close();

请帮帮我!!我绝望了!!

谢谢!!

【问题讨论】:

标签: c# excel oledbconnection


【解决方案1】:

我用这个belove代码得到了准确的结果.....

这可能对你有帮助..

 try
        {


            if (dt == null || dt.Columns.Count == 0)
            {
                throw new Exception("ExportToExcel: Null or empty input table!\n");
            }
            string Filepath = "E:Sample\\Form.xlsx";
            string SheetName = "Elnath - 3000";
           // Microsoft.Office.Interop.Excel.Application xlApp;
            Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
            Microsoft.Office.Interop.Excel._Worksheet xlWorkSheet;
           // Microsoft.Office.Interop.Excel.Range xlRange = null;
           object misValue = Type.Missing;

            Excel.Application xlApp = new Excel.Application();
           xlWorkBook = xlApp.Workbooks.Add(Filepath);

           // xlWorkBook = xlApp.Workbooks.Open(Filepath, misValue, false, misValue, misValue, misValue, true, misValue, misValue, misValue, misValue, misValue, false, misValue, misValue);
            xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Sheets[SheetName];

            xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.ActiveSheet;

            xlWorkSheet = (Microsoft.Office.Interop.Excel.Worksheet)xlWorkBook.Sheets.get_Item(SheetName);
            xlWorkSheet.Activate();
           // object StartRange = "B";
          //  object EndRange = misValue;

          //  xlRange = xlWorkSheet.get_Range("A", "M");
          //  xlRange = (Microsoft.Office.Interop.Excel.Range)xlWorkSheet.get_Range(StartRange, misValue);

            //Header
            //for (i = 0; i < dt.Columns.Count; i++)
            //{
            //    xlRange.Cells[1, i + 1] = dt.Columns[i].ColumnName;

            //}
            //Datas
            for (int i = 0; i < dt.Rows.Count; i++)
            {
                for (int j = 0; j < dt.Columns.Count; j++)
                {
                    xlApp.Cells[i + 13, j + 1] = dt.Rows[i][j].ToString();
                }
            }
            if (Filepath != null || Filepath != "")
            {
                try
                {
                    xlApp.ActiveWorkbook.SaveAs(Filepath);
                    xlApp.Quit();

                    xlWorkSheet = null;
                    xlWorkBook = null;
                    xlApp = null;
                }
                catch (Exception ex)
                {
                    throw new Exception("Can not save file" + ex.Message);
                }
            }
            else
            {
                xlApp.Visible = true;
            }
            return dt;
        }
        catch (Exception ex)
        {
            throw new Exception(ex.Message);
        }

【讨论】:

    【解决方案2】:

    如果您也对第 3 方 Excel .NET 库感兴趣,您可以打开现有的 Excel 文件并用带有 GemBox.Spreadsheet Excel C# / VB.NET 库的 DataTable 填充它。

    这是一个 Excel ASP.NET 示例,如何打开现有的 Excel 文件,用 DataTable 填充它并将其流式传输到浏览器:

    DataTable people = (DataTable)Session["people"];
    
    // Open excel file and insert data table.
    ExcelFile ef = new ExcelFile();
    ef.LoadXls(Server.MapPath("MyData.xls"));
    ExcelWorksheet ws = ef.Worksheets[0];
    ws.InsertDataTable(people, "A1", true);
    
    Response.Clear();
    
    // Stream file to browser, in required type.
    switch (this.RadioButtonList1.SelectedValue)
    {
        case "XLS":
            Response.ContentType = "application/vnd.ms-excel";
            Response.AddHeader("Content-Disposition", "attachment; filename=" +
                 "Report.xls");
            ef.SaveXls(Response.OutputStream);
            break;
    
        case "XLSX":
            Response.ContentType = "application/vnd.openxmlformats";
            Response.AddHeader("Content-Disposition", "attachment; filename=" +
                 "Report.xlsx");
            // With XLSX it is a bit more complicated as MS Packaging API
            // can't write directly to Response.OutputStream.
            // Therefore we use temporary MemoryStream.
            MemoryStream ms = new MemoryStream();
            ef.SaveXlsx(ms)
            ms.WriteTo(Response.OutputStream);
            break;
    }
    Response.End();
    

    【讨论】:

      【解决方案3】:

      如果您也对第 3 方 Excel .NET 库感兴趣,您可以打开现有的 Excel 文件并使用 GemBox.Spreadsheet Excel C# / VB.NET 库填充数据表。

      或者,如果您不想想花 480 美元购买许可证,可以完全免费下载我的 Export to Excel C# 课程。

      它使用 OpenXML 库来创建一个真正的 Excel 2007 文件,您只需指定一个文件名,然后调用“CreateExcelDocument”函数。

      DataSet ds = CreateSampleData();
      string excelFilename = "C:\\Sample.xlsx";
      CreateExcelFile.CreateExcelDocument(ds, excelFilename);
      

      您可以从数据集、数据表或列表创建 Excel 文件。

      在我的网页上完全免费提供所有源代码,以及说明和演示项目:

      http://mikesknowledgebase.com/pages/CSharp/ExportToExcel.htm

      甚至还有一些示例代码,展示了如何在 ASP.Net 应用程序中创建 Excel 文件,然后将其打开。

      祝你好运!

      【讨论】:

        【解决方案4】:

        您可以使用此解决方案 ....仅在将您的数据放入数据表之后......

         protected void Button1_Click(object sender, EventArgs e)
         {
             DataTable dtRecords = new DataTable();
             dtRecords.Columns.Add("FIRSTNAME");
             dtRecords.Columns.Add("LASTNAME");
             dtRecords.Columns.Add("JOB");
             DataRow rw1 = dtRecords.NewRow();
             rw1[0] = "JHON";
             rw1[1] = "SMITH";
             rw1[2] = "MANAGER";
             dtRecords.Rows.Add(rw1);
             DataRow rw2 = dtRecords.NewRow();
             rw2[0] = "MICH";
             rw2[1] = "KEN";
             rw2[2] = "SR MANAGER";
             dtRecords.Rows.Add(rw2);
        
             UploadDataTableToExcel(dtRecords);
        
        }
        protected void UploadDataTableToExcel(DataTable dtRecords)
        {
                string XlsPath = Server.MapPath(@"~/Add_data/test.xls");
                string attachment = string.Empty;
                if (XlsPath.IndexOf("\\") != -1)
                {
                    string[] strFileName = XlsPath.Split(new char[] { '\\' });
                    attachment = "attachment; filename=" + strFileName[strFileName.Length - 1];
                }
                else
                    attachment = "attachment; filename=" + XlsPath;
                try
                {
                    Response.ClearContent();
                    Response.AddHeader("content-disposition", attachment);
                    Response.ContentType = "application/vnd.ms-excel";
                    string tab = string.Empty;
        
                    foreach (DataColumn datacol in dtRecords.Columns)
                    {
                        Response.Write(tab + datacol.ColumnName);
                        tab = "\t";
                    }
                    Response.Write("\n");
        
                    foreach (DataRow dr in dtRecords.Rows)
                    {
                        tab = "";
                        for (int j = 0; j < dtRecords.Columns.Count; j++)
                        {
                            Response.Write(tab + Convert.ToString(dr[j]));
                            tab = "\t";
                        }
        
                        Response.Write("\n");
                    }
                    Response.End();
                }
                catch (Exception ex)
                {
                    //Response.Write(ex.Message);
                }
        }
        

        【讨论】:

        • 这是在创建一个新的 excel。我需要将响应写在我光盘中现有​​的 excel 上。
        猜你喜欢
        • 1970-01-01
        • 2017-03-27
        • 1970-01-01
        • 2014-10-27
        • 2015-08-05
        • 2010-09-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多