我有一个数组列表,List<float[]>
我想创建 excel 文件,以便我可以通过电子邮件发送数组进行测试。我需要它在 excel 而不是 XML - 序列化不会在这里做。我想在自己的工作表(选项卡)中拥有每个数组 - 这里 CSV 走出窗口:(
有人可以指导我实现它的最佳方法是什么吗?使用Microsoft.Office.Interop.Excel
似乎对我的需求来说有点过头了,但如果这是最好的方法,我会很感激一个关于如何做到这一点的样本。
谢谢。
您好,您可以按照以下步骤操作
1 添加对 Microsoft.Office.Interop.Excel 的引用;
2 在您的班级中使用 Microsoft.Office.Interop.Excel 添加
3 试试这个代码
阅读
var applicationClass = new Application();
var workbook = applicationClass.Workbooks.Open(workbookPath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing
, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
var worksheet = workbook.GetWorksheet(sheet);
var usedRange = worksheet.UsedRange;
for (int i = beginIndexRow; i < usedRange.Rows.Count; i++)
{
var input = (Range)usedRange.Cells[i, 1]; //I read the first column
}
workbook.Close(false, workbookPath, null);
applicationClass.Quit();
while (Marshal.ReleaseComObject(usedRange) > 0)
{ }
while (Marshal.ReleaseComObject(worksheet) > 0)
{ }
while (Marshal.ReleaseComObject(workbook) > 0)
{ }
while (Marshal.ReleaseComObject(applicationClass) > 0)
{ }
写作
usedRange.Cells[i, 1].Value2 = .....; //I write the first column
使用互操作可能是最简单的事情。
如果 l 是您的列表:
Microsoft.Office.Interop.Excel.Application xlApp = new Microsoft.Office.Interop.Excel.ApplicationClass();
xlApp.Visible = true;
xlApp.Workbooks.Add(misValue);
int nWS = xlApp.ActiveWorkbook.Worksheets.Count;
for (int i = nWS; i < l.Count; i++)
xlApp.ActiveWorkbook.Worksheets.Add(misValue, misValue, misValue, misValue);
int iWS = 1;
foreach (float[] ff in l)
{
Microsoft.Office.Interop.Excel.Worksheet ws = (Microsoft.Office.Interop.Excel.Worksheet)xlApp.ActiveWorkbook.Worksheets[iWS++];
int idxRow = 1;
foreach (float aFloat in ff)
ws.Cells[idxRow++, 1] = aFloat;
}
我发现ClosedXML api 很容易使用并且速度更快,因为它生成 Excel XML。
以下是如何在ClosedXML中执行此操作:
var list = new List<float[]>() { new float[] { 1, 2 }, new float[] { 3, 4 } };
var wb = new XLWorkbook();
int i = 1;
foreach (var l in list)
wb.AddWorksheet("Sheet" + i++).FirstCell().Value = l;
wb.SaveAs("Arrays.xlsx");
您可以查看 Matt Hidinger 的开源项目 - DoddleReport - “开箱即用,它可以将报告呈现为 Excel、PDF、HTML 和 CSV——当然是完全可插入的”。
它可以从任何 IEnumerable 数据源生成表格报告