exceljs 创建有下拉选择菜单的表格

由 夕空 撰写于  2024年11月4日

创建表格: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);


声明:星耀夕空|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - exceljs 创建有下拉选择菜单的表格


欢迎光顾我的小站!