繁体   English   中英

如何在多张工作表中以C#导出Excel文件

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM