将DataTable导出到现有的Excel

我需要打开一个现有的Excel文件并用DataTable填充它。 我怎样才能做到这一点?

我在ASP.NET中工作

我已经尝试创build一个这个解决scheme的Excel(http://stackoverflow.com/questions/1746701/export-datatable-to-excel-file),然后我试图打开它与这样的OLEDB连接,但它没有工作..它说,表格是不是在一个正确的格式..然后它说,红外找不到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(); 

请帮帮我!! 我很绝望!!

谢谢!!

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

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

 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(); 

你可以使用这个解决scheme….只有在你的数据进入数据表….

  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 .NET库感兴趣,可以打开现有的Excel文件,并用GemBox.Spreadsheet Excel C#/ VB.NET库填充DataTable。

或者,如果您不想在许可证上花费480美元,则可以完全免费地将我的导出下载到Excel C#类。

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

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

您可以从DataSet,DataTable或List <>创buildExcel文件。

我的网页上提供的所有源代码都是完全免费的,并附有说明和演示项目:

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

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

祝你好运 !

我得到了准确的结果,使用这个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); }