Уменьшите время расчета Cell. Метод расчета
Возможные сценарии использования
Обычно мы рекомендуем пользователям звонитьРабочая книга.ВычислитьФормулу() один раз, а затем получить рассчитанные значения отдельных ячеек. Но иногда пользователи не хотят вычислять всю книгу. Они просто хотят вычислить одну ячейку. Aspose.Cells предоставляетCalculationOptions.Recursive свойство, которое вы можете установитьЛОЖЬи это значительно уменьшит время расчета отдельной ячейки. Поскольку, когда рекурсивное свойство установлено вистинныйто все зависимые ячейки пересчитываются при каждом вызове. Но когда рекурсивное свойство установлено вЛОЖЬ, то зависимые ячейки вычисляются только один раз и не вычисляются повторно при последующих вызовах.
Уменьшить время расчета метода Cell.Calculate().
Следующий пример кода иллюстрирует использованиеCalculationOptions.Recursive имущество. Пожалуйста, выполните этот код с указаннымобразец эксель файла и проверьте его консольный вывод. Вы обнаружите, что установка рекурсивного свойства наЛОЖЬзначительно сократил время расчета. Также прочитайте комментарии, чтобы лучше понять это свойство.
// 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 true: 51 seconds
Recursive false: 16 seconds