Cell.Calculateメソッドの計算時間の短縮
可能な使用シナリオ
通常、私たちはユーザーにWorkbook.CalculateFormula() メソッドを1回呼び出してから個々のセルの計算値を取得することをお勧めしています。しかし、時々、ユーザーはワークブック全体を計算したくないことがあります。彼らは単に単一のセルを計算したいだけです。Aspose.CellsはCalculationOptions.Recursive プロパティを提供しており、それをfalseに設定すると、個別のセルの計算時間が著しく短縮されます。なぜなら、recursiveプロパティがtrueに設定されていると、依存セルは各呼び出しで再計算されるからです。しかし、recursiveプロパティがfalseに設定されていると、依存セルは1回だけ計算され、後続の呼び出しで再計算されません。
Cell.Calculate() メソッドの計算時間を短縮する
次のサンプルコードはCalculationOptions.Recursive プロパティの使用例を示しています。このコードを指定されたサンプルエクセルファイルと一緒に実行して、そのコンソール出力を確認してください。recursiveプロパティをfalseに設定すると、計算時間が著しく減少していることが分かります。このプロパティの理解を深めるために、コメントもお読みください。
// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java | |
public static void main(String[] args) throws Exception { | |
// Test calculation time after setting recursive true | |
TestCalcTimeRecursive(true); | |
// Test calculation time after setting recursive false | |
TestCalcTimeRecursive(false); | |
} | |
// -------------------------------------------------- | |
static void TestCalcTimeRecursive(boolean rec) throws Exception { | |
String dataDir = Utils.getDataDir(DecreaseCalculationTime.class); | |
// Load your sample workbook | |
Workbook wb = new Workbook(dataDir + "sample.xlsx"); | |
// Access first worksheet | |
Worksheet ws = wb.getWorksheets().get(0); | |
// Set the calculation option, set recursive true or false as per parameter | |
CalculationOptions opts = new CalculationOptions(); | |
opts.setRecursive(rec); | |
// Start calculating time in nanoseconds | |
long startTime = System.nanoTime(); | |
// Calculate cell A1 one million times | |
for (int i = 0; i < 1000000; i++) { | |
ws.getCells().get("A1").calculate(opts); | |
} | |
// Calculate elapsed time in seconds | |
long second = 1000000000; | |
long estimatedTime = System.nanoTime() - startTime; | |
estimatedTime = estimatedTime / second; | |
// Print the elapsed time in seconds | |
System.out.println("Recursive " + rec + ": " + estimatedTime + " seconds"); | |
} |
コンソール出力
これは上記のサンプルコードを私たちの機械で指定されたサンプルエクセルファイルで実行したときのコンソール出力です。ご注意ください、出力は異なる場合がありますが、recursiveプロパティをfalseに設定した後の経過時間は常にtrueに設定した場合よりも短くなります。
Recursive true: 51 seconds
Recursive false: 16 seconds