Minska beräkningstiden för Cell. Beräkna metod

Möjliga användningsscenarier

Normalt rekommenderar vi användare att ringaWorkbook.CalculateFormula() metod en gång och få sedan de beräknade värdena för de enskilda cellerna. Men ibland vill användare inte beräkna hela arbetsboken. De vill bara beräkna en enda cell. Aspose.Cells tillhandahållerBeräkningsalternativ.Rekursiv egenskap som du kan ställa infalskoch det kommer att minska beräkningstiden för individuell cell avsevärt. För när den rekursiva egenskapen är inställd påSannsedan räknas alla beroenden av celler om på varje samtal. Men när den rekursiva egenskapen är inställd påfalsk, sedan beräknas beroende celler endast en gång och beräknas inte igen vid efterföljande samtal.

Minska beräkningstiden för Cell.Calculate()-metoden

Följande exempelkod illustrerar användningen avBeräkningsalternativ.Rekursiv fast egendom. Vänligen kör den här koden med den givnaexempel på excel-fil och kontrollera dess konsolutgång. Du kommer att upptäcka att inställningen av den rekursiva egenskapen tillfalskhar minskat beräkningstiden avsevärt. Läs även kommentarerna för en bättre förståelse av denna fastighet.

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

Konsolutgång

Detta är konsolutgången för ovanstående exempelkod när den körs med den givnaexempel på excel-fil på vår maskin. Observera att din utdata kan skilja sig men den förflutna tiden efter att den rekursiva egenskapen ställts in påfalsk kommer alltid att vara mindre än att ställa in den påSann.

 Recursive true: 51 seconds

Recursive false: 16 seconds