Расчет формул

Добавление формул и вычисление результатов

У Aspose.Cells есть встроенный механизм вычисления формул. Он не только может пересчитывать формулы, импортированные из шаблонов дизайнера, но также поддерживает вычисление результатов формул, добавленных во время выполнения.

Aspose.Cells поддерживает большинство формул или функций, которые являются частью Microsoft Excel (см. список функций, поддерживаемых движком вычислений). Эти функции могут использоваться через API или дизайнерские таблицы. Aspose.Cells поддерживает огромный набор математических, строковых, логических, дата/время, статистических, баз данных, поисковых и ссылочных формул.

Используйте свойство Formula или методы SetFormula(…) класса для добавления формулы в ячейку. При применении формулы всегда начинайте строку с знака равенства (=), как это делается при создании формулы в Microsoft Excel, и используйте запятую (,) для разделения параметров функции.

Для расчета результатов формул пользователь может вызвать метод CalculateFormula класса Workbook, который обрабатывает все формулы, встроенные в файл Excel. Или пользователь может вызвать метод CalculateFormula класса Worsheet, который обрабатывает все формулы, встроенные в листе. Или пользователь также может вызвать метод Calculate класса Cell, который обрабатывает формулу одной ячейки:

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(CalculatingFormulas.class) + "formulas/";
// Instantiating a Workbook object
Workbook workbook = new Workbook();
// Adding a new worksheet to the Excel object
int sheetIndex = workbook.getWorksheets().add();
// Obtaining the reference of the newly added worksheet by passing its sheet index
Worksheet worksheet = workbook.getWorksheets().get(sheetIndex);
// Adding a value to "A1" cell
worksheet.getCells().get("A1").putValue(1);
// Adding a value to "A2" cell
worksheet.getCells().get("A2").putValue(2);
// Adding a value to "A3" cell
worksheet.getCells().get("A3").putValue(3);
// Adding a SUM formula to "A4" cell
worksheet.getCells().get("A4").setFormula("=SUM(A1:A3)");
// Calculating the results of formulas
workbook.calculateFormula();
// Get the calculated value of the cell
String value = worksheet.getCells().get("A4").getStringValue();
// Saving the Excel file
workbook.save(dataDir + "CalculatingFormulas_out.xls");

Важно знать

Прямое вычисление формулы

Aspose.Cells имеет встроенный механизм расчета формул. Кроме того, в Aspose.Cells можно вычислять результаты формул непосредственно, импортированных из файла дизайнера.

Иногда вам нужно вычислить результаты формул напрямую, без добавления их в электронную таблицу. Значения ячеек, используемые в формуле, уже существуют в электронной таблице, и все, что вам нужно, - найти результат этих значений на основе некоторой формулы Microsoft Excel без добавления формулы в электронную таблицу.

Вы можете использовать API механизм расчета формул Aspose.Cells для Worksheet для calculate результатов таких формул без их добавления в лист:

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(DirectCalculationFormula.class) + "formulas/";
// Create a workbook
Workbook workbook = new Workbook();
// Access first worksheet
Worksheet worksheet = workbook.getWorksheets().get(0);
// Put 20 in cell A1
Cell cellA1 = worksheet.getCells().get("A1");
cellA1.putValue(20);
// Put 30 in cell A2
Cell cellA2 = worksheet.getCells().get("A2");
cellA2.putValue(30);
// Calculate the Sum of A1 and A2
Object results = worksheet.calculateFormula("=Sum(A1:A2)");
// Print the output
System.out.println("Value of A1: " + cellA1.getStringValue());
System.out.println("Value of A2: " + cellA2.getStringValue());
System.out.println("Result of Sum(A1:A2): " + results.toString());

Приведенный выше код производит следующий вывод:

Value of A1: 20
Value of A2: 30
Result of Sum(A1:A2): 50.0

Повторное вычисление формул

Если в книге много формул, и пользователю необходимо повторно их вычислять, внося изменения только в небольшую часть из них, может быть полезным для производительности включить цепочку расчета формул: FormulaSettings.EnableCalculationChain.

// For complete examples and data files, please go to https://github.com/aspose-cells/Aspose.Cells-for-Java
// The path to the documents directory.
String dataDir = Utils.getSharedDataDir(CalculatingFormulasOnce.class) + "formulas/";
// Load the template workbook
Workbook workbook = new Workbook(dataDir + "book1.xls");
// Print the time before formula calculation
System.out.println(DateTime.getNow());
// Set the CreateCalcChain as true
workbook.getSettings().getFormulaSettings().setEnableCalculationChain(true);
// Calculate the workbook formulas
workbook.calculateFormula();
Cells cells = workbook.getWorksheets().get("Sheet1").getCells();
//with original values, the calculated result
System.out.println(cells.get("A11").getValue());
//update one value the formula depends on
cells.get("A5").putValue(15);
// Calculate the workbook formulas again, in fact only A11 needs to be and will be calculated
workbook.calculateFormula();
//check the re-calculated value
System.out.println(cells.get("A11").getValue());
// Print the time after formula calculation
System.out.println(DateTime.getNow());

Важно знать

Продвинутые темы