值类型

支持以下值类型。

Null 值

Enum: Excel.ValueType.Null

空值表示没有值,通常在写入文件时将不存储(合并的单元格除外)。可用于从单元格中删除该值。例如:

  1. worksheet.getCell('A1').value = null;

合并单元格

Enum: Excel.ValueType.Merge

合并单元格是其值绑定到另一个“主”单元格的单元格。分配给合并单元将导致修改单元格。

数字值

Enum: Excel.ValueType.Number

一个数字值。

例如:

  1. worksheet.getCell('A1').value = 5;
  2. worksheet.getCell('A2').value = 3.14159;

字符串值

Enum: Excel.ValueType.String

一个简单的文本字符串。

例如:

  1. worksheet.getCell('A1').value = 'Hello, World!';

日期值

Enum: Excel.ValueType.Date

日期值,由 JavaScript Date 类型表示。

例如:

  1. worksheet.getCell('A1').value = new Date(2017, 2, 15);

超链接值

Enum: Excel.ValueType.Hyperlink

具有文本和链接值的 URL。

例如:

  1. // 链接到网络
  2. worksheet.getCell('A1').value = {
  3. text: 'www.mylink.com',
  4. hyperlink: 'http://www.mylink.com',
  5. tooltip: 'www.mylink.com'
  6. };
  7. // 内部链接
  8. worksheet.getCell('A1').value = { text: 'Sheet2', hyperlink: '#\'Sheet2\'!A1' };

公式值

Enum: Excel.ValueType.Formula

一个 Excel 公式,用于即时计算值。请注意,虽然单元格类型将为“公式”,但该单元格可能具有一个有效类型值,该值将从结果值中得出。

请注意,ExcelJS 无法处理公式以生成结果,必须提供该公式。

例如:

  1. worksheet.getCell('A3').value = { formula: 'A1+A2', result: 7 };

单元格还支持便捷的获取器,以访问公式和结果:

  1. worksheet.getCell('A3').formula === 'A1+A2';
  2. worksheet.getCell('A3').result === 7;

共享公式

共享的公式通过减少工作表 xml 中文本的重复来增强 xlsx 文档的压缩。范围中左上角的单元格是指定的母版,它将保留该范围内的所有其他单元格都将引用的公式。然后,其他“从属”单元格可以引用此主单元格,而不必再次重新定义整个公式。请注意,主公式将以常用的 Excel 方式转换为从属单元格,以便对其他单元格的引用将根据从属单元相对于主单元的偏移量向右下移。例如:如果主单元格A2具有引用A1的公式,则如果单元格B2共享A2的公式,则它将引用B1。

可以将主公式与该范围内的从属单元格一起分配给该单元格

  1. worksheet.getCell('A2').value = {
  2. formula: 'A1',
  3. result: 10,
  4. shareType: 'shared',
  5. ref: 'A2:B3'
  6. };

可以使用新的值形式将共享公式分配给单元格:

  1. worksheet.getCell('B2').value = { sharedFormula: 'A2', result: 10 };

这指定单元格B2是将从A2中的公式派生的公式,其结果为10。

公式便捷获取器会将A2中的公式转换为B2中应具有的公式:

  1. expect(worksheet.getCell('B2').formula).to.equal('B1');

可以使用 fillFormula 方法将共享的公式分配到工作表中:

  1. // 将 A1 设置为起始编号
  2. worksheet.getCell('A1').value = 1;
  3. // 从 A1 开始以递增计数将 A2 填充到 A10
  4. worksheet.fillFormula('A2:A10', 'A1+1', [2,3,4,5,6,7,8,9,10]);

fillFormula 也可以使用回调函数来计算每个单元格的值

  1. // 从A1开始以递增计数将 A2 填充到 A100
  2. worksheet.fillFormula('A2:A100', 'A1+1', (row, col) => row);

公式类型

要区分真正的和转换后的公式单元格,请使用 FormulaType getter:

  1. worksheet.getCell('A3').formulaType === Enums.FormulaType.Master;
  2. worksheet.getCell('B3').formulaType === Enums.FormulaType.Shared;

公式类型具有以下值:

名称
Enums.FormulaType.None 0
Enums.FormulaType.Master 1
Enums.FormulaType.Shared 2

数组公式

在 Excel 中表示共享公式的一种新方法是数组公式。以这种形式,主单元格是唯一包含与公式有关的任何信息的单元格。它包含 shareType ‘array’ 以及适用于其的单元格范围以及将要复制的公式。其余单元格是具有常规值的常规单元格。

注意:数组公式不会以共享公式的方式转换。因此,如果主单元A2引用A1,则从单元B2也将引用A1。

例如:

  1. // 将数组公式分配给 A2:B3
  2. worksheet.getCell('A2').value = {
  3. formula: 'A1',
  4. result: 10,
  5. shareType: 'array',
  6. ref: 'A2:B3'
  7. };
  8. // 可能没有必要填写工作表中的其余值

fillFormula 方法也可以用于填充数组公式

  1. // 用数组公式 "A1" 填充 A2:B3
  2. worksheet.fillFormula('A2:B3', 'A1', [1,1,1,1], 'array');

富文本值

Enum: Excel.ValueType.RichText

样式丰富的文本。

例如:

  1. worksheet.getCell('A1').value = {
  2. richText: [
  3. { text: 'This is '},
  4. {font: {italic: true}, text: 'italic'},
  5. ]
  6. };

布尔值

Enum: Excel.ValueType.Boolean

例如:

  1. worksheet.getCell('A1').value = true;
  2. worksheet.getCell('A2').value = false;

错误值

Enum: Excel.ValueType.Error

例如:

  1. worksheet.getCell('A1').value = { error: '#N/A' };
  2. worksheet.getCell('A2').value = { error: '#VALUE!' };

当前有效的错误文本值为:

名称
Excel.ErrorValue.NotApplicable #N/A
Excel.ErrorValue.Ref #REF!
Excel.ErrorValue.Name #NAME?
Excel.ErrorValue.DivZero #DIV/0!
Excel.ErrorValue.Null #NULL!
Excel.ErrorValue.Value #VALUE!
Excel.ErrorValue.Num #NUM!

接口变化

我们会尽一切努力创建一个良好的,一致的接口,该接口不会在版本之间不兼容,但令人遗憾的是,为了实现更大的利益,有时需要进行一些更改。

0.1.0

Worksheet.eachRow

Worksheet.eachRow 的回调函数中的参数已被交换和更改;它是 function(rowNumber,rowValues),现在是 function(row,rowNumber),使它的外观更像 underscore(`.each`)方法,并且行对象优先于行号。_

Worksheet.getRow

此函数已从返回稀疏的单元格数组更改为返回 Row 对象。这样可以访问行属性,并有助于管理行样式等。

仍可通过 Worksheet.getRow(rowNumber).values; 获得稀疏的单元格值的数组。

0.1.1

cell.model

cell.styles 重命名为 cell.style

0.2.44

从 Bluebird 切换到 Node 原生 Promise 的函数返回的 Promise 如果依赖 Bluebird 的额外功能,则可能会破坏调用代码。

为了减少这种情况的出现,在0.3.0中添加了以下两个更改:

  • 默认情况下使用功能更全且仍与浏览器兼容的 promise lib。 该库支持 Bluebird 的许多功能,但占用空间少得多。
  • 注入其他 Promise 实现的选项。有关更多详细信息,请参见配置部分。