如何在exceljs中添加复杂的公式 - JavaScript

问题描述 投票:0回答:1

我目前正在做一个项目,需要将数据导出到多个xlsx表中。在其中一个中,我需要在单元格中添加公式,以在从第一个工作表添加一些数据之前验证某些条件。这是其中之一:

Ref !== null ? worksheet2.getCell('D2').value ={ formula: `IF('dataSheet'!${Ref.address}<>"";'dataSheet'!${Ref.address};"")`, result:Ref.value} : worksheet2.getCell('D2').value = '';

此处的 Ref 是第一张工作表中包含“ref”标签的单元格。

这个公式(或任何“IF”公式)的问题是,当我打开 Excel 文档时,出现此错误:

We found a problem with some content in test.xlsx. Do you want us to try to recover as much as we can? If you trust the source of this workbook, click Yes.

当我这样做时,它会恢复除所有 IF 公式之外的整个文档。我还有一些 VLOOKUP 公式也不起作用。

A1+A2 等简单公式也可以,但基本上就是这样。

我还测试了其他常见公式,如 SUM 或 AVERAGE,但它们也不起作用。我尝试在公式前添加或不添加“=”,但没有成功。我尝试了简单的公式,例如

formula: '=IF(A1=0;10;0)'
,但没有成功。我读到您有时需要添加结果,正如您在第一部分中看到的那样,它不起作用。

我还尝试了另一个软件包,带有 IF 和 SUM 公式的 XLSX,但同样的问题再次出现。

最后但并非最不重要的一点是,由于我在一家法国公司工作,所有公式都是用法语编写的,所以 IF 是 SI.. 我首先认为这可能是 exceljs 语言使用和 Excel 选项中的语言使用之间的沟通不畅,但即使在更改它之后和英语公式,它仍然向我显示相同的消息。

javascript typescript xlsx exceljs
1个回答
0
投票

这个方法可行。

worksheet.getCell('D2').value = { formula: 'IF(datasheet!A1<>"",datasheet!B1,"")'};

一些公式示例在这里

demo.js
将创建
test.xls

const Excel = require('exceljs');

const workbook = new Excel.Workbook();

const data_sheet = workbook.addWorksheet("datasheet")
const formula_sheet = workbook.addWorksheet("formula")


// set data_sheet data
data_sheet.getCell('A1').value = 'ref';

data_sheet.getCell('B1').value = 1;

// set formula data
formula_sheet.getCell('A1').value = 2;
formula_sheet.getCell('A2').value = 3;
formula_sheet.getCell('A3').value = { formula: 'SUM(A1,A2)'};

formula_sheet.getCell('D2').value = { formula: 'IF(datasheet!A1<>"",datasheet!B1,"")'};

const fileName = './test.xlsx';
workbook.xlsx
    .writeFile(fileName)
    .then(() => {
        console.log('file created');
    })
    .catch(err => {
        console.log(err.message);
    });

datasheet

formula

D2 单元格的公式将创建

=IF(datasheet!A1<>"",datasheet!B1,"")

并显示

1

由于

datasheet
A1
ref
并且
B1
是 1。

© www.soinside.com 2019 - 2024. All rights reserved.