在 JS 操作 Excel 物件模型(如 ExcelJS、SheetJS、ActiveX `Excel.Application`)時,直接給儲存格的 value 或 formula 屬性賦值「以 = 開頭的字串」即可:
| 庫/環境 | 設定公式語法 | 範例 |
|---|---|---|
| ExcelJS (Node/瀏覽器) | cell.value = { formula: 'AVERAGE(A9:D17)*E1+50', result: 0 } | ws.getCell('F1').value = { formula: 'AVERAGE(A9:D17)*E1+50' }; |
| SheetJS (xlsx) | cell.f = 'AVERAGE(A9:D17)*E1+50'; delete cell.v; | ws['F1'] = { f: 'AVERAGE(A9:D17)*E1+50' }; |
| ActiveX (IE/舊專案) | Range("F1").Formula = "=AVERAGE(A9:D17)*E1+50" | excelApp.ActiveSheet.Range("F1").Formula = "=AVERAGE(A9:D17)*E1+50"; |
| Google Apps Script | range.setFormula('=AVERAGE(A9:D17)*E1+50') | sheet.getRange('F1').setFormula('=AVERAGE(A9:D17)*E1+50'); |
= 開頭,否則會被視為純文字。A9:D17 表示矩形區域。AVERAGE,繁中版同;簡中版同)。workbook.calcChain 或開啟檔案時自動重算。async function exportWithFormula() {
const wb = new ExcelJS.Workbook();
const ws = wb.addWorksheet('報表');
// 填入基礎資料
ws.getCell('A9').value = 10; ws.getCell('B9').value = 20;
ws.getCell('A10').value = 30; ws.getCell('B10').value = 40;
ws.getCell('E1').value = 2;
// 設定公式儲存格
const formulaCell = ws.getCell('F1');
formulaCell.value = {
formula: 'AVERAGE(A9:B10)*E1+50',
result: 0 // 可選:預設顯示值,開啟時 Excel 會重算
};
formulaCell.numFmt = '0.00'; // 格式化顯示
// 觸發下載
const buf = await wb.xlsx.writeBuffer();
saveAs(new Blob([buf], {type: 'application/octet-stream'}), '報表.xlsx');
}
掌握這一招,動態報表自動試算不再是夢!