Excel からデータのテーブルを取得し、それを埋め込みの .xml にインポートするアプリケーションがありますSpreadsheetGear.WorkbookView
。Excel のワークシートのサイズに制限があることは認識していますが、Excel が より大きいデータ セットを処理できるかどうか疑問に思っていましたSpreadsheetGear
。これまでに誰かがこれに遭遇したことがありますか?
ジェイク
Excel からデータのテーブルを取得し、それを埋め込みの .xml にインポートするアプリケーションがありますSpreadsheetGear.WorkbookView
。Excel のワークシートのサイズに制限があることは認識していますが、Excel が より大きいデータ セットを処理できるかどうか疑問に思っていましたSpreadsheetGear
。これまでに誰かがこれに遭遇したことがありますか?
ジェイク
.NET 4.5 x64 アプリケーションで実行されている .NET 用の SpreadsheetGear 2012 と、オーバークロックされた Core i7-980X を搭載した Windows 8 x64 で実行されている Excel 2013 x64 RTM でテストを行いました。
1,000 万の数式 (数式 "=RAND()" を使用して 1,000,000 行と 10 列) を含むワークブックを作成しました。
Excel 2013 は 20.18 秒でブックを作成し、795 MB の RAM を使用し、0.39 秒で計算されました。
SpreadsheetGear 2012 は、ワークブックを 0.42 秒で作成し、153MB の RAM を使用し、0.09 秒で計算しました。
SpreadsheetGear はメモリの量によってのみ制限され、メモリ使用に関しては明らかに Excel 2013 よりも効率的です。言うまでもなく、SpreadsheetGear 2012 は Excel 2013 よりも高速に大きなワークブックを作成および計算します (少なくともこの場合)。
SpreadsheetGear for .NET の無料評価版は、ここからダウンロードできます。
免責事項: 私は SpreadsheetGear LLC を所有しています。
SpreadsheetGear で実行したコードは次のとおりです。
using System;
using SpreadsheetGear;
namespace SpreadsheetGearMemTest
{
class Program
{
static void Test(IWorkbook workbook, int rows, int cols)
{
var worksheet = workbook.Worksheets[0];
var cells = worksheet.Cells;
var timer = System.Diagnostics.Stopwatch.StartNew();
var startMem = System.GC.GetTotalMemory(true);
cells[0, 0, rows - 1, cols - 1].Formula = "=RAND()";
timer.Stop();
var memUsed = System.GC.GetTotalMemory(true) - startMem;
var calcTimer = System.Diagnostics.Stopwatch.StartNew();
workbook.WorkbookSet.Calculate();
Console.WriteLine("Creating took {0} seconds and {1}MB, calc took {2} seconds.",
timer.Elapsed.TotalSeconds, memUsed / (1024.0 * 1024.0), calcTimer.Elapsed.TotalSeconds);
workbook.Close();
}
static void Main(string[] args)
{
// Get the code JITed.
Test(Factory.GetWorkbook(), 100, 10);
// Do the test.
Test(Factory.GetWorkbook(), 1000000, 10);
}
}
}