[英]How to export excel file in c# in multiple sheets
我有这段代码可以从1个listview中使用c#导出excel文件。 我现在的问题是,如果我有2个将在1个excel文件中生成的列表视图,我的计划是listview1用于sheet1,listview2用于sheet2。
这是我的代码生成listview1以擅长转换为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 ,它免费提供性能,并提供许多Excel函数。 您可以寻找的其他选项是Microsoft InterOp for Excel export,但是它存在性能问题。
正如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#如何以编程方式添加Office XP / 2003中的Excel工作表 ,以查找如何添加其他工作表。
您现在所要做的就是将文本放入变量,例如HTML或列表框中的任何信息。
string html = Clipboard.GetText(TextDataFormat.Html);
现在,您可以使用剪贴板(替代解决方案,但要避免)。
Clipboard.SetText(html);
它实际上是在剪贴板中输入信息,您所要做的就是将所有列表框值传递到剪贴板中。
现在,最后一步是将其粘贴到所需的位置。
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
进程,请关闭每个对象和文件。
workbook.SaveAs(configuration.XLSExportedFile);
workbook.Close();
xlsApp.Quit();
xlsApp.Dispose();
我并不是说这将是最好的解决方案,但是您也可以查找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");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.