5

在使用 git hub 尝试了几个包之后,并尝试解析/处理这个相当大的 excel 文档。我尝试的每一种方法都在out of memory.

我在谷歌上搜索了更多内容,发现这个名为 GNU 库的名称似乎koogra只是我认为适合这项工作的唯一一个,因为我的这部分项目的时间已经不多了,所以不能打扰太多并继续搜索。

我现在得到的代码正在通过“内存不足”问题的一部分,

所以剩下的就是我如何正确解析 Excel 文档,以便可以提取说一种字典集合键是一列,值是另一列。

这是有问题的文件

这是我到目前为止的代码

var path = Path.Combine(Environment.CurrentDirectory, "tst.xlsx");
Net.SourceForge.Koogra.Excel2007.Workbook xcel = new Net.SourceForge.Koogra.Excel2007.Workbook(path);
var ss = xcel.GetWorksheets();
4

1 回答 1

6

被更多人找到了...... google ing ... 2007 年使用的第一行(xlsx

第二行是xls版本

        Net.SourceForge.Koogra.IWorkbook genericWB = Net.SourceForge.Koogra.WorkbookFactory.GetExcel2007Reader("tst.xlsx");

        //genericWB = Net.SourceForge.Koogra.WorkbookFactory.GetExcelBIFFReader("some.xls");

        Net.SourceForge.Koogra.IWorksheet genericWS = genericWB.Worksheets.GetWorksheetByIndex(0);

        for (uint r = genericWS.FirstRow; r <= genericWS.LastRow; ++r)
        {
            Net.SourceForge.Koogra.IRow row = genericWS.Rows.GetRow(r);

            for (uint c = genericWS.FirstCol; c <= genericWS.LastCol; ++c)
            {
                // raw value
                Console.WriteLine(row.GetCell(c).Value);

                // formatted value
                Console.WriteLine(row.GetCell(c).GetFormattedValue());
            }
        }

我希望我能帮助遇到同样“内存不足”问题的其他人......'享受

对上面代码的一个小更新

好的..我已经玩了一点,就它与图表排名所依据的文件内容有关Unique IP,当前代码是

            //place source file within your current:
            //project directory\bin\debug and you should find extracted file next to the source file 
            var pathtoRead = Path.Combine(Environment.CurrentDirectory, "tst.xlsx");
            var pathtoWrite = Path.Combine(Environment.CurrentDirectory, "tst.txt");

            Net.SourceForge.Koogra.IWorkbook genericWB = Net.SourceForge.Koogra.WorkbookFactory.GetExcel2007Reader(pathtoRead);
            Net.SourceForge.Koogra.IWorksheet genericWS = genericWB.Worksheets.GetWorksheetByIndex(0);
            StringBuilder SbXls = new StringBuilder();
            for (uint r = genericWS.FirstRow; r <= genericWS.LastRow; ++r)
            {
                Net.SourceForge.Koogra.IRow row = genericWS.Rows.GetRow(r);
                string LineEnding = string.Empty;
                for (uint ColCount = genericWS.FirstCol; ColCount <= genericWS.LastCol; ++ColCount)
                {

                    var formated = row.GetCell(ColCount).GetFormattedValue();
                    if (ColCount == 1)
                        LineEnding = Environment.NewLine;
                    else if (ColCount == 0)
                        LineEnding = "\t";
                    if (ColCount > 1 == false)
                        SbXls.Append(string.Concat(formated, LineEnding));
                }
            }
            File.WriteAllText(pathtoWrite, SbXls.ToString());
于 2012-11-28T16:01:23.443 回答