5

gitハブでいくつかのパッケージを試し、この非常に大きなExcelドキュメントを解析/処理しようとした後。私が試していたメソッドのそれぞれは、例外をスローしout of memoryます。

私はもう少しグーグルで検索していて、この名前のGNUライブラリはkoogra、私が仕事に適していると思う唯一のもののようで、プロジェクトのこの部分の時間が不足しているので、あまり気にせずに検索を続けることができました。

私が今までに得たコードは、「メモリ不足」の問題の一部を通過して機能しています。

したがって、残っているのは、Excelドキュメントを適切に解析して、ある種の辞書コレクションキーが1つの列で、値が別の列であると抽出できるようにする方法だけです。

これは問題のファイルです

これは私がこれまでに持っているコードです

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

もう少しでそれを見つけました....グーグルing ...2007年の使用のための最初の行(xlsx

2行目は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());
            }
        }

同じ「メモリ不足」の問題が発生した他の人を助けてくれることを願っています...'お楽しみください

上記のコードの小さな更新

OK ..少し遊んだことがありますが、ファイルの内容に関連する限り、チャートはそれに基づいてランク付けされ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 に答える