0

我有一个数组列表,List<float[]>我想创建 excel 文件,以便我可以通过电子邮件发送数组进行测试。我需要它在 excel 而不是 XML - 序列化不会在这里做。我想在自己的工作表(选项卡)中拥有每个数组 - 这里 CSV 走出窗口:(

有人可以指导我实现它的最佳方法是什么吗?使用Microsoft.Office.Interop.Excel似乎对我的需求来说有点过头了,但如果这是最好的方法,我会很感激一个关于如何做到这一点的样本。

谢谢。

4

5 回答 5

2

您好,您可以按照以下步骤操作

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
于 2012-08-03T13:17:49.490 回答
1

使用互操作可能是最简单的事情。

如果 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;
    }
于 2012-08-03T13:28:36.293 回答
1

我发现ClosedXML api 很容易使用并且速度更快,因为它生成 Excel XML。

于 2012-08-03T13:30:18.743 回答
1

以下是如何在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");
于 2012-08-04T03:20:42.563 回答
0

您可以查看 Matt Hidinger 的开源项目 - DoddleReport - “开箱即用,它可以将报告呈现为 Excel、PDF、HTML 和 CSV——当然是完全可插入的”。

它可以从任何 IEnumerable 数据源生成表格报告

于 2012-08-03T13:33:41.270 回答