创建表格:create_xlsx.js
const ExcelJS = require('exceljs');
async function exportExcel() {
// 创建一个新的工作簿
const workbook = new ExcelJS.Workbook();
// 添加sheet1,用于用户填写数据
const sheet1 = workbook.addWorksheet('Sheet1');
// 添加sheet2,用于存放选项数据
const sheet2 = workbook.addWorksheet('Options');
// 添加列标题
sheet2.columns = [
{ header: 'area', key: 'area', width: 20 },
{ header: 'value', key: 'value', width: 10 }
];
sheet2.addRow({ area: '地区', value: '值' });
sheet2.addRows([
{ area: '北京', value: 1 },
{ area: '上海', value: 2 },
{ area: '广州', value: 3 },
]);
sheet1.addRow(['areaName', 'areaValue']);
sheet1.addRow(['选择地区', '地区值']);
sheet1.getCell(`A3`).dataValidation = {
type: "list", // 单元格类型
allowBlank: true, // 是否可以为空
// formulae: ['"One,Two,Three,Four"'], // 可选值
formulae: [`=Options!$A$3:$A$5`],
operator: 'equal', // 运算符
showErrorMessage: true, // 如若填错是否显示错误信息
errorStyle: 'error', // 错误类型
errorTitle: '提示', // 错误标题
error: '请选择下拉列表的项', // 错误具体信息
showInputMessage: true, // 用户输入时,是否展示提示框
promptTitle: '输入提示',// 提示标题
prompt: '请点击下箭头,选择项'// 提示具体信息
};
sheet1.getCell('B3').value = { formula: `VLOOKUP(A3, Options!A:B, 2, FALSE)` };
const lastRow = sheet1.lastRow.number;
// 为每一行添加描边
for (let i = 0; i <= lastRow; i++) {
sheet1.getRow(i).eachCell({ includeEmpty: true }, (cell) => {
cell.border = {
top: { style: 'thin' },
left: { style: 'thin' },
bottom: { style: 'thin' },
right: { style: 'thin' }
};
});
}
// 为第二行设置背景色
sheet1.getRow(2).eachCell({ includeEmpty: true }, (cell) => {
cell.fill = {
type: 'pattern',
pattern: 'solid',
fgColor: { argb: 'FFc7d9ff' } // 蓝色的argb值
};
});
// 保存文件
await workbook.xlsx.writeFile('example.xlsx');
console.log('Excel file has been created.');
}
exportExcel();
保存json格式:excle_json.js
const ExcelJS = require('exceljs');
const fs = require('fs');
async function readExcelAndSaveJSON() {
// 创建一个新的工作簿
const workbook = new ExcelJS.Workbook();
// 读取Excel文件
await workbook.xlsx.readFile('example.xlsx');
// 获取Sheet1工作表
// const sheet = workbook.getWorksheet('Sheet1');
const sheet = workbook.worksheets[0];
// 获取第一行作为键
const keys = [];
sheet.getRow(1).eachCell({ includeEmpty: true }, (cell, colNumber) => {
keys.push(cell.value);
});
// 初始化一个数组来存储JSON数据
const jsonData = [];
// 遍历工作表中的每一行,从第3行开始
sheet.eachRow({ includeEmpty: false }, (row, rowNumber) => {
// 跳过前2行
if (rowNumber <= 2) return;
// 创建一个对象来存储当前行的数据
const rowData = {};
row.eachCell({ includeEmpty: true }, (cell, colNumber) => {
// 使用列标题作为键
const key = keys[colNumber - 1];
rowData[key] = cell.value.result||cell.value;
});
// 将当前行的数据添加到jsonData数组中
jsonData.push(rowData);
});
// 将JSON数据转换为字符串
const jsonString = JSON.stringify(jsonData, null, 2);
// 将JSON字符串写入文件
fs.writeFileSync('tojson.json', jsonString, 'utf8');
}
readExcelAndSaveJSON().catch(console.error);
Comments | NOTHING