excel xlsx文件parsing – 使用koogra

在用git hub尝试几个包之后,试图parsing/处理这个相当大的excel文档。 我试过的每个方法都是在out of memory抛出exception。

我正在谷歌更多,发现这个名为koogra GNU库,似乎只有一个我可以看到适合的工作,不能打扰太多,继续search,因为我没有时间这个项目的这一部分。

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

所以唯一剩下的就是我如何正确parsing一个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(); 

通过一些更多的发现….谷歌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());