Hücre.Calculate yönteminin Hesaplama Zamanını Düşürme

Olası Kullanım Senaryoları

Normalde, kullanıcılara Workbook.CalculateFormula() methodunu bir kez çağrıp ardından individüel hücrelerin hesaplanmış değerlerini almayı öneririz. Ancak bazen, kullanıcılar tüm çalışma kitabını hesaplamak istemezler. Sadece tek bir hücreyi hesaplamak isterler. Aspose.Cells, CalculationOptions.Recursive özelliği sağlar ve bu özelliği false olarak ayarlarsanız, individüel hücrelerin hesaplanma süresi önemli ölçüde azalacaktır. Çünkü recursive özelliği true olarak ayarlandığında, her çağrıda hücrelerin bağımlıları tekrar hesaplanır. Ancak recursive özelliği false olarak ayarlandığında, bağımlı hücreler sadece bir kez hesaplanır ve ardışık çağrılarda tekrar hesaplanmazlar.

Hücre.Calculate() Yönteminin Hesaplama Zamanını Azaltma

Aşağıdaki örnek kod, CalculationOptions.Recursive özelliğinin kullanımını göstermektedir. Lütfen bu kodu verilen örnek excel dosyası ile çalıştırın ve konsol çıktısını kontrol edin. false olarak recursive özelliğini ayarladıktan sonra hesaplama süresinin önemli ölçüde azaldığını göreceksiniz. Lütfen bu özelliğin daha iyi anlaşılması için yorumları da okuyun.

// 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");
}

Konsol Çıktısı

Yukarıdaki örnek kodun verilen örnek excel dosyası ile çalıştırıldığında konsol çıktısı budur. Lütfen dikkat edin, kendi çıktınız farklı olabilir ancak recursive özelliğini false olarak ayarladıktan sonra geçen süre her zaman true olarak ayarlamaktan daha az olacaktır.

 Recursive true: 51 seconds

Recursive false: 16 seconds