我有这个代码使用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);
}
答案 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");