简体   繁体   English

c# - 将大型 object 数据导出到 Excel 文件

[英]c# - Export large object data to Excel file

my program gather data from different XML files by selecting data with LINQ. It results having below proprieties for each element of my object collections. Each collection having arround 10k objects (with 11 proprieties), 15 collection.我的程序通过选择具有 LINQ 的数据从不同的 XML 文件收集数据。它导致我的 object collections 的每个元素具有以下属性。每个集合有大约 10k 个对象(具有 11 个属性),15 个集合。

https://i.stack.imgur.com/5R1Hj.jpg https://i.stack.imgur.com/5R1Hj.jpg

Everything's fine until i need to export them to excel file.一切都很好,直到我需要将它们导出到 excel 文件。 I'm looping each cell data as below, then this is far too long.我正在如下循环每个单元格数据,这太长了。 As describe above, there is large data to export.如上所述,有大量数据要导出。

            foreach (dataContainer elt in Liste) 
        {
            
            for(int b = 1; b <= 11; b++) 
            { 
            Excel.Range currentRange = outputWorksheet.Cells[Liste.IndexOf(elt)+2, b];
                switch (b)
                {
                    case 1: currentRange.Value2 = elt.ctNumber;break;
                    case 2: currentRange.Value2 = elt.isoType; break;
                    case 3: currentRange.Value2 = elt.bkgNumber; break;
                    case 4: currentRange.Value2 = elt.POO; break;
                    case 5: currentRange.Value2 = elt.POL; break;
                    case 6: currentRange.Value2 = elt.POD; break;
                    case 7: currentRange.Value2 = elt.OPE; break;
                    case 8: currentRange.Value2 = elt.Empty; break;
                    case 9: currentRange.Value2 = elt.flagOOG; break;
                    case 10: currentRange.Value2 = elt.teus; break;
                    case 11: currentRange.Value2 = elt.weight; break;
                }
            }
        }

How can i improve my way to export data in excel?我怎样才能改进我在 excel 中导出数据的方式? Knowing i can't use.csv file.知道我不能使用 .csv 文件。

If you are creating a standalone Excel file instead of updating the one currently being displayed, directly creating the file using Open XML SDK rather than Excel Object Model would be faster - start at https://learn.microsoft.com/en-us/office/open-xml/spreadsheets如果您要创建一个独立的 Excel 文件而不是更新当前显示的文件,则使用 Open XML SDK 而不是 Excel Object Model 直接创建文件会更快 - 从XML 开始 - 从 882107462780563开始 办公室/open-xml/电子表格

After few research, i found out the best way to proceed for my case, very quick method.经过一些研究,我找到了处理我的案例的最佳方法,非常快速的方法。 I create a an object that will contains my 2D data, then assign an excel range value = to this object.我创建了一个包含我的二维数据的 object,然后将一个 excel 范围值 = 分配给这个 object。

object[,] virtualCells = new object[Liste.Count, propertyOfContainer.Length];
        for(int j = 0; j < Liste.Count; j++)
        {
            for(int h = 0; h < 12; h++)
            {
                virtualCells[j, h] = Liste[j].GetType().GetProperty(propertyOfContainer[h]).GetValue(Liste[j]);
            }
        }
        
        int lastRow;
        if (String.IsNullOrEmpty(outputWorksheet.Range["L2"].Value2)) { lastRow = 1; }
        else { lastRow = outputWorksheet.Range["L1"].End[Excel.XlDirection.xlDown].Row; }

outputWorksheet.Range[outputWorksheet.Cells[lastRow+1, 1],outputWorksheet.Cells[lastRow + Liste.Count, propertyOfContainer.Length]].Value2 = virtualCells;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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