我正在尝试使用ExcelJS
. ExcelJS
我正在关注github 页面的官方文档。
第一步是创建工作簿。就我而言,我想要一个流,因为我会附加大量数据。
// Create Excel Workbook Stream
const workbookStream = new Excel.stream.xlsx.WorkbookWriter({
filename: path,
useStyles: true,
useSharedStrings: true,
});
Run Code Online (Sandbox Code Playgroud)
然后,我将工作表添加到创建的工作簿的流中,如文档Worksheet Properties中所述。
const sheet = workbookStream.addSheet('sheet1'); // Throw here
Run Code Online (Sandbox Code Playgroud)
但这样,我得到了以下错误:
'类型错误:workbookStream.addSheet 不是函数
我还发现了一个不会抛出但不起作用并且不会创建许多工作表的代码。
const header = ['A', 'B', 'C'];
const sheet1 = Excel.addSheetOnWorkbook({
workbook: workbookStream,
name: 'sheet1',
});
const sheet2 = Excel.addSheetOnWorkbook({
workbook: workbookStream,
name: 'sheet2',
});
sheet.addRow(header).commit();
sheet.addRow(header).commit();
await workbookStream.commit();
Run Code Online (Sandbox Code Playgroud)
在本例中,仅sheet1
创建 (使用LibreOffice 5.1.6.2打开)。
有什么办法可以解决这个问题吗ExcelJS
?
我不知道这对你有多大帮助,但对我的环境来说:
一旦我设置了worksheet.state
to visible
,我就可以在以下位置看到它LibreOffice
:
const Excel = require('exceljs');
const workbook = new Excel.Workbook();
const fs = require('fs');
const filename = "test.xlsx";
const sheetNames = ["A", "B", "C", "D"];
sheetNames.forEach(sheetName => {
let worksheet = workbook.addWorksheet(sheetName);
// I believe this needs to be set to show in LibreOffice.
worksheet.state = 'visible';
});
const stream = fs.createWriteStream(filename);
workbook.xlsx.write(stream)
.then(function() {
console.log(`File: ${filename} saved!`);
stream.end();
}).catch(error => {
console.err(`File: ${filename} save failed: `, error);
});
Run Code Online (Sandbox Code Playgroud)
使用流式 XLSX WorkbookWriter
:
const Excel = require('exceljs');
const sheetNames = ["A", "B", "C", "D"];
const workbook = new Excel.stream.xlsx.WorkbookWriter( { filename: './streamed-workbook.xlsx' } );
sheetNames.forEach(sheetName => {
let worksheet = workbook.addWorksheet(sheetName);
worksheet.state = 'visible';
worksheet.commit();
});
// Finished the workbook.
workbook.commit()
.then(function() {
console.log(`Worksheet committed!`);
});
Run Code Online (Sandbox Code Playgroud)
我也会在 Ubuntu 机器上进行测试。
XSLX 文件只是.zip
包含多个.xml
文件的文件,因此您可以自己检查 XML 数据。
显示 LibreOffice 与 exceljs 生成的原始 Xml (worksheet.xml):
自由办公室
const Excel = require('exceljs');
const workbook = new Excel.Workbook();
const fs = require('fs');
const filename = "test.xlsx";
const sheetNames = ["A", "B", "C", "D"];
sheetNames.forEach(sheetName => {
let worksheet = workbook.addWorksheet(sheetName);
// I believe this needs to be set to show in LibreOffice.
worksheet.state = 'visible';
});
const stream = fs.createWriteStream(filename);
workbook.xlsx.write(stream)
.then(function() {
console.log(`File: ${filename} saved!`);
stream.end();
}).catch(error => {
console.err(`File: ${filename} save failed: `, error);
});
Run Code Online (Sandbox Code Playgroud)
exceljs
const Excel = require('exceljs');
const sheetNames = ["A", "B", "C", "D"];
const workbook = new Excel.stream.xlsx.WorkbookWriter( { filename: './streamed-workbook.xlsx' } );
sheetNames.forEach(sheetName => {
let worksheet = workbook.addWorksheet(sheetName);
worksheet.state = 'visible';
worksheet.commit();
});
// Finished the workbook.
workbook.commit()
.then(function() {
console.log(`Worksheet committed!`);
});
Run Code Online (Sandbox Code Playgroud)
设置某些非字母字符时,工作表标题可能会破坏XML 文件结构。
请注意工作表标题!
归档时间: |
|
查看次数: |
16163 次 |
最近记录: |