如何在多个工作表中输出c#中的excel文件

我有这样的代码,从1列表视图使用C#导出Excel文件。 我现在的问题是,如果我有两个列表视图将生成1个Excel文件,我的计划是listview1是为sheet1和listview2是为sheet2。

这是我的代码生成listview1 excel到sheet1:

string[] st = new string[listView1.Columns.Count]; DirectoryInfo di = new DirectoryInfo(Environment.ExpandEnvironmentVariables("%USERPROFILE%") + @"\Desktop\"); if (di.Exists == false) di.Create(); fileName f = new fileName(); if (f.ShowDialog() == DialogResult.OK) { StreamWriter sw = new StreamWriter(Environment.ExpandEnvironmentVariables("%USERPROFILE%") + @"\Desktop\" + f.Filenam + ".xls", false); sw.AutoFlush = true; string header = ""; for (int col = 0; col < listView1.Columns.Count; col++) { header += listView1.Columns[col].Text.ToString() + "\t"; } sw.Write(header); int rowIndex = 1; int row = 0; string st1 = ""; for (row = 0; row < listView1.Items.Count; row++) { if (rowIndex <= listView1.Items.Count) rowIndex++; st1 = "\n"; for (int col = 0; col < listView1.Columns.Count; col++) { st1 = st1 + listView1.Items[row].SubItems[col].Text.ToString() + "\t"; } sw.Write(st1); } sw.Close(); FileInfo fil = new FileInfo(Environment.ExpandEnvironmentVariables("%USERPROFILE%") + @"\Desktop\" + f.Filenam + ".xls"); if (fil.Exists == true) MessageBox.Show("Process Completed", "Export to Excel", MessageBoxButtons.OK, MessageBoxIcon.Information); } 

我已经使用EPPlus ,它的免费,提供性能优势,并提供了许多Excelfunction。 其他选项你可以找的是Microsoft InterOp的Excel导出,但它有性能问题。

正如Irfan已经提到的,你可以用Microsoft.Office.Interop来做到这一点

 Excel.Application xlsApp = new Excel.Application(); Excel.Workbook workbook; workbook = xlsApp.Workbooks.Open(configuration.XLSExportedFile, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing); foreach (Excel.Worksheet sheet in workbook.Sheets) { workbook.Activate(); sheet.Activate(); } 

这将帮助您逐步浏览Excel文件中的所有工作表。 现在,如果您想用多张表来扩展它,您可以阅读C#中的如何以编程方式添加Excel工作表Office XP / 2003 ,以便find如何添加附加工作表。

你现在可以做什么,把你的文本放入一个variables,例如HTML或你的列表框中的任何types的信息。

 string html = Clipboard.GetText(TextDataFormat.Html); 

现在你可以玩剪贴板(替代解决scheme,但要避免)。

 Clipboard.SetText(html); 

它实际上将信息input到剪贴板,你可以做的是将所有的列表框值传递到剪贴板。

现在最后一步就是把它粘贴到你想要的位置。

 sheet.Range(cellmapp).PasteSpecial(); 

其中cellmap应该是例如A1。 如果你在你的列表框中的文本太长,你可以调整你的行/列。

 //Auto fits all columns and rows //https://stackoverflow.com/questions/14748322/c-sharp-autofit-method-for-excel-sheet sheet.Columns.AutoFit(); sheet.Rows.AutoFit(); 

不要忘了,如果你使用COM进程,closures每个对象和文件。

 workbook.SaveAs(configuration.XLSExportedFile); workbook.Close(); xlsApp.Quit(); xlsApp.Dispose(); 

我不认为这将是最好的解决scheme,但你也可以查找OpenXML

我以前使用过ClosedXML ,语法非常干净简单,只需几行即可完成这种任务

此块显示如何将列表添加到新工作表并保存

 List<string> list = new List<string>(); var workbook = new XLWorkbook(); var worksheet = workbook.Worksheets.Add("Sample Sheet"); worksheet.Cell(1, 1).Value = list; workbook.SaveAs("HelloWorld.xlsx");