Beräkna formulär med JavaScript via C++
Lägga till formler och beräkna resultat
Aspose.Cells har en inbäddad formelberäkningsmotor. Den kan inte bara omberäkna formler importerade från designermallar utan också stödjer beräkning av resultaten av formler som läggs till vid körning.
Aspose.Cells stöder de flesta av de formler eller funktioner som är en del av Microsoft Excel (Läs en lista över de funktioner som stöds av beräkningsmotorn). Dessa funktioner kan användas via API:er eller designer spreadsheets. Aspose.Cells kräver ett stort urval av matematiska, sträng-, boolean-, datum/tid-, statistiska, databas-, uppslags- och referensformler.
Använd formula-egenskapen eller formula(string, object)-metoderna i Cell-klassen för att lägga till en formel till en cell. När du tillämpar en formel, börja alltid strängen med ett likhetstecken (=) som du gör när du skapar en formel i Microsoft Excel, och använd ett komma (,) för att avgränsa funktionsparametrar.
För att beräkna resultaten av formler kan användaren anropa calculateFormula()-metoden i Workbook-klassen som behandlar alla inbäddade formler i en Excel-fil. Eller, användaren kan anropa calculateFormula(string)-metoden i Worksheet-klassen som behandlar alla formler i ett blad. Eller, användaren kan även anropa calculate(CalculationOptions)-metoden i Cell-klassen som behandlar formeln för en Cell:
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat, Worksheet, Cell } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
// Instantiate a new Workbook object
const workbook = new Workbook();
// Add a new worksheet to the Excel object
const sheetIndex = workbook.worksheets.add();
// Obtain the reference of the newly added worksheet by passing its sheet index
const worksheet = workbook.worksheets.get(sheetIndex);
// Adding a value to "A1" cell
const cellA1 = worksheet.cells.get("A1");
cellA1.value = 1;
// Adding a value to "A2" cell
const cellA2 = worksheet.cells.get("A2");
cellA2.value = 2;
// Adding a value to "A3" cell
const cellA3 = worksheet.cells.get("A3");
cellA3.value = 3;
// Adding a SUM formula to "A4" cell
const cellA4 = worksheet.cells.get("A4");
cellA4.formula = "=SUM(A1:A3)";
// Calculating the results of formulas
workbook.calculateFormula();
// Get the calculated value of the cell
const value = worksheet.cells.get("A4").value.toString();
// Saving the Excel file
const outputData = workbook.save(SaveFormat.Excel97To2003);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'output.xls';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Excel File';
document.getElementById('result').innerHTML = `<p style="color: green;">Operation completed successfully! Calculated value in A4: ${value}. Click the download link to get the file.</p>`;
});
</script>
</html>
Viktigt att veta för formler
Direkt beräkning av formel
Aspose.Cells har en inbyggd formelberäkningsmotor. Förutom att beräkna formler som importerats från en designfil kan Aspose.Cells också beräkna formelresultat direkt.
Ibland måste du beräkna formelresultat direkt utan att lägga till dem i ett kalkylblad. Värdena för cellerna som används i formeln finns redan i ett kalkylblad, och allt du behöver är att hitta resultatet av dessa värden baserat på någon Microsoft Excel-formel utan att lägga till formeln i ett kalkylblad.
Du kan använda Aspose.Cells formelberäknings-API:er för {0} till {1} för att {2} resultaten av sådana formler utan att lägga till dem i kalkylbladet:
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example</title>
</head>
<body>
<h1>Aspose.Cells Example - Calculate Sum</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
// Create or load workbook
let workbook;
if (fileInput.files && fileInput.files.length > 0) {
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();
workbook = new Workbook(new Uint8Array(arrayBuffer));
} else {
workbook = new Workbook();
}
// Access first worksheet
const worksheet = workbook.worksheets.get(0);
// Put 20 in cell A1
const cellA1 = worksheet.cells.get("A1");
cellA1.value = 20;
// Put 30 in cell A2
const cellA2 = worksheet.cells.get("A2");
cellA2.value = 30;
// Calculate the Sum of A1 and A2
const results = worksheet.calculateFormula("=Sum(A1:A2)");
// Prepare output text
const outputHtml = [
`<p>Value of A1: ${cellA1.stringValue}</p>`,
`<p>Value of A2: ${cellA2.stringValue}</p>`,
`<p>Result of Sum(A1:A2): ${results.toString()}</p>`
].join("");
// Save the workbook to a downloadable file
const outputData = workbook.save(SaveFormat.Xlsx);
const blob = new Blob([outputData], { type: "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" });
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'output.xlsx';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Excel File';
document.getElementById('result').innerHTML = `<div style="color: green;">Operation completed successfully!</div>${outputHtml}`;
});
</script>
</body>
</html>
Ovanstående kod ger följande utmatning:
Value of A1: 20
Value of A2: 30
Result of Sum(A1:A2): 50.0
Hur man beräknar formler upprepade gånger
När det finns många formler i arbetsboken och användaren behöver beräkna dem om och om igen medan endast en liten del förändras, kan det vara fördelaktigt för prestanda att aktivera formelberäkningskedjan: formulaSettings.enableCalculationChain.
<!DOCTYPE html>
<html>
<head>
<title>Aspose.Cells Example - Calculate Formulas</title>
</head>
<body>
<h1>Calculate Formulas Example</h1>
<input type="file" id="fileInput" accept=".xls,.xlsx,.csv" />
<button id="runExample">Run Example</button>
<a id="downloadLink" style="display: none;">Download Result</a>
<div id="result"></div>
</body>
<script src="aspose.cells.js.min.js"></script>
<script type="text/javascript">
const { Workbook, SaveFormat, Worksheet, Cell } = AsposeCells;
AsposeCells.onReady({
license: "/lic/aspose.cells.enc",
fontPath: "/fonts/",
fontList: [
"arial.ttf",
"NotoSansSC-Regular.ttf"
]
}).then(() => {
console.log("Aspose.Cells initialized");
});
document.getElementById('runExample').addEventListener('click', async () => {
const fileInput = document.getElementById('fileInput');
if (!fileInput.files.length) {
document.getElementById('result').innerHTML = '<p style="color: red;">Please select an Excel file.</p>';
return;
}
const file = fileInput.files[0];
const arrayBuffer = await file.arrayBuffer();
// Instantiating a Workbook object from the uploaded file
const workbook = new Workbook(new Uint8Array(arrayBuffer));
// Print the time before formula calculation
console.log(new Date());
// Set the CreateCalcChain as true
workbook.settings.formulaSettings.enableCalculationChain = true;
// Calculate the workbook formulas
workbook.calculateFormula();
// Print the time after formula calculation
console.log(new Date());
// Change the value of one cell (A1 in first worksheet)
const worksheet = workbook.worksheets.get(0);
const cell = worksheet.cells.get("A1");
cell.value = "newvalue";
// Re-calculate those formulas which depend on cell A1
workbook.calculateFormula();
// Save the modified workbook and provide download link
const outputData = workbook.save(SaveFormat.Excel97To2003);
const blob = new Blob([outputData]);
const downloadLink = document.getElementById('downloadLink');
downloadLink.href = URL.createObjectURL(blob);
downloadLink.download = 'output.out.xls';
downloadLink.style.display = 'block';
downloadLink.textContent = 'Download Modified Excel File';
document.getElementById('result').innerHTML = '<p style="color: green;">Formulas calculated and cell updated successfully! Click the download link to get the modified file.</p>';
});
</script>
</html>
Viktigt att veta
Fortsatta ämnen
- Lägg till celler i Microsoft Excel Formelövervakningsfönstret
- Beräkning av IFNA-funktionen med Aspose.Cells
- Beräkning av Array Formula av Data Tables
- Beräkning av Excel 2016 MINIFS och MAXIFS funktioner
- Minska beräkningstiden för Cell.calculate-metoden
- Upptäcka cirkulär referens
- Direkt beräkning av anpassad funktion utan att skriva den i en kalkylblad
- Implementera anpassad beräkningsmotor för att förlänga standardberäkningsmotorn för Aspose.Cells
- Avbryt eller avbryt formelberäkningen i arbetsbok
- Returnera en rad med värden med hjälp av AbstractCalculationEngine
- Inställning av Formelberäkningsläge för Arbetsbok
- Användning av FormulaText-funktionen i Aspose.Cells