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

时间:2013-07-26 14:10:53

标签: c# winforms excel

我有这个代码使用c#从1 listview导出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);
}

3 个答案:

答案 0 :(得分:3)

我使用了EPPlus,免费提供了性能优势,并提供了许多Excel功能。您可以查找的其他选项是Microsoft InterOp用于Excel导出,但它存在性能问题。

答案 1 :(得分:1)

正如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# how to add Excel Worksheet programmatically Office XP / 2003以了解如何添加其他工作表。

您现在可以做的是将文本放入变量中,例如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

答案 2 :(得分:0)

之前我使用过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");