ASP.NET – 能够导出CSV / Excel到多个工作表?

我想知道是否有人有一个解决scheme,能够导出到多个工作表的Excel中的数据…截至目前,我只知道如何导出多个对象到一个单一的表!

我正在使用Devexpress出口商? 似乎他们不支持这一点,我可以用一个通用的解决scheme呢?

任何指导将不胜感激!

Epplus?

http://epplus.codeplex.com/releases/view/42439

我在WinForms应用程序中使用它,这是伟大的。 它只做xlsx文件 – 即Excel 2007以后。

安德鲁

文件path应该可能是server.mappath()生成的excel首先被保存在服务器path中,并且可以被允许下载。
添加引用Excel并添加命名空间“使用Excel”。

public void Export(DataSet ds, string filePath) { string data = null; string columnName = null; int i = 0; int j = 0; Excel.Application xlApp; Excel.Workbook xlWorkBook; //Excel.Worksheet xlWorkSheet; Excel.Worksheet xlWorkSheet = null; object misValue = System.Reflection.Missing.Value; Excel.Range range; xlApp = new Excel.ApplicationClass(); xlWorkBook = xlApp.Workbooks.Add(misValue); //xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); for (int l = 0; l < ds.Tables.Count; l++) { xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(l + 1); xlWorkSheet.get_Range("A1:D1", Type.Missing).Merge(Type.Missing); xlWorkSheet.get_Range("A1", "D1").Font.Bold = true; xlWorkSheet.Cells.Font.Name = "Courier New"; for (i = 0; i <= ds.Tables[l].Rows.Count - 1; i++) { for (j = 0; j <= ds.Tables[l].Columns.Count - 1; j++) { columnName = ds.Tables[l].Columns[j].ColumnName.ToString(); xlWorkSheet.Cells[3, j + 1] = columnName; data = ds.Tables[l].Rows[i].ItemArray[j].ToString(); xlWorkSheet.Cells[i + 5, j + 1] = data; } } } xlWorkBook.SaveAs(filePath, Excel.XlFileFormat.xlWorkbookNormal, misValue, misValue, misValue, misValue, Excel.XlSaveAsAccessMode.xlExclusive, misValue, misValue, misValue, misValue, misValue); xlWorkBook.Close(true, misValue, misValue); xlApp.Quit(); // kill all excel processes Process[] pros = Process.GetProcesses(); for (int p = 0; p < pros.Length; p++) { if (pros[p].ProcessName.ToLower().Contains("excel")) { pros[p].Kill(); break; } } releaseObject(xlWorkSheet); releaseObject(xlWorkBook); releaseObject(xlApp); } private void releaseObject(object obj) { try { System.Runtime.InteropServices.Marshal.ReleaseComObject(obj); obj = null; } catch (Exception ex) { obj = null; } finally { GC.Collect(); } } 

去年年初,我面对同样的问题。 最终,我能够用自己的方式进行自动生成.xlt Excel文件,其中包含多个可被Excel接受的电子表格(实际上是网页)。

我知道这不是很好,但它对我有用。 如果您决定尝试,请告诉我,它是否也适用于您。

输出以下内容(您可以调整以获取任意数量的工作表):

 MIME-Version: 1.0 X-Document-Type: Workbook Content-Type: multipart/related; boundary="----=_NextPart_01CB53EC.0FFDF540" ------=_NextPart_01CB53EC.0FFDF540 Content-Location: file:///C:/CE594991/Book1.htm Content-Transfer-Encoding: quoted-printable Content-Type: text/html; charset=utf-8" <html xmlns:v=3D"urn:schemas-microsoft-com:vml" xmlns:o=3D"urn:schemas-microsoft-com:office:office" xmlns:x=3D"urn:schemas-microsoft-com:office:excel" xmlns=3D"http://www.w3.org/TR/REC-html40"> <head> <link id=3D"shLink" href=3D"Book1_files/Sheet1.htm"> <link id=3D"shLink" href=3D"Book1_files/Sheet2.htm"> <link id=3D"shLink" href=3D"Book1_files/Sheet3.htm"> <xml> <x:ExcelWorkbook> <x:ExcelWorksheets> <x:ExcelWorksheet> <x:Name>Sheet1</x:Name> <x:WorksheetSource HRef=3D"Book1_files/Sheet1.htm"/> </x:ExcelWorksheet> <x:ExcelWorksheet> <x:Name>Sheet2</x:Name> <x:WorksheetSource HRef=3D"Book1_files/Sheet2.htm"/> </x:ExcelWorksheet> <x:ExcelWorksheet> <x:Name>Sheet3</x:Name> <x:WorksheetSource HRef=3D"Book1_files/Sheet3.htm"/> </x:ExcelWorksheet> </x:ExcelWorksheets> </x:ExcelWorkbook> </xml> </head> </html> 

对于每个页面,输出:

 ------=_NextPart_01CB53EC.0FFDF540 Content-Location: file:///C:/CE594991/Book1_files/{ your sheet name }".htm Content-Type: text/html; charset=utf-8 <html> { your stuffs } </html> 

结束for循环

 ------=_NextPart_01CB53EC.0FFDF540 Content-Location: file:///C:/CE594991/Book1_files/filelist.xml Content-Transfer-Encoding: quoted-printable Content-Type: text/xml; charset="utf-8" <xml xmlns:o=3D"urn:schemas-microsoft-com:office:office"> <o:MainFile HRef=3D"../Book1.htm"/> <o:File HRef=3D"Sheet1.htm"/> <o:File HRef=3D"Sheet2.htm"/> <o:File HRef=3D"Sheet3.htm"/> </xml> ------=_NextPart_01CB53EC.0FFDF540-- 

在你的代码中,将响应缓冲区设置为false,将内容types设置为“application / vnd.ms-excel”,并添加标题“Content-Disposition”,“inline; filename = {你的文件名}”。 请注意,输出文件的第一行之前不得有换行符。

我正在使用Devexpress出口商? 似乎他们不支持这一点,我可以用一个通用的解决scheme呢?

你正在尝试XlsxExportOptions.ExportMode属性? SingleFilePageByPage导出模式允许您将文档逐页导出到同一个XLSX文件中的多个工作表。 请参阅下面的文章: 如何将报告导出到XLS文件中的其他工作表 。

关于您的请求,请查看http://www.devexpress.com/example=E2440

看来,这正是你正在寻找。