然而,问题是唯一的方法是对整个工作表使用 ws['!protect'] 属性,然后逐个遍历每个单元格并将其设置为:
worksheet1[cellAddress].s = { 保护: { 锁定: false } };
但这不起作用,它总是锁定整个工作表。我需要类似的东西来保护某个单元格而不是整个工作表。
有人可以帮我吗?
即使您主要使用 XLSX 执行其他任务,也可以使用 exceljs 实现单元格保护:
使用 XLSX 读取或写入 Excel 文件。
使用exceljs应用单元格保护。
安装必要的库:
npm install xlsx exceljs
使用XLSX读取Excel文件,然后使用exceljs保护特定单元格:
const XLSX = require('xlsx');
const ExcelJS = require('exceljs');
const fs = require('fs');
async function protectSpecificCells(filePath) {
// Step 1: Read the Excel file using XLSX
const workbook = XLSX.readFile(filePath);
// Convert to ExcelJS Workbook
const exceljsWorkbook = new ExcelJS.Workbook();
const tmpFilePath = 'temp.xlsx';
// Write XLSX workbook to a temporary file
XLSX.writeFile(workbook, tmpFilePath);
// Step 2: Read the temporary file with ExcelJS
await exceljsWorkbook.xlsx.readFile(tmpFilePath);
// Get the first worksheet (or the specific one you need)
const worksheet = exceljsWorkbook.getWorksheet(1);
// Step 3: Unlock all cells
worksheet.eachRow((row) => {
row.eachCell((cell) => {
cell.protection = { locked: false };
});
});
// Step 4: Lock specific cells
worksheet.getCell('A1').protection = { locked: true }; // Protect cell A1
worksheet.getCell('B2').protection = { locked: true }; // Protect cell B2
// Step 5: Protect the worksheet
await worksheet.protect('your_password', {
selectLockedCells: false,
selectUnlockedCells: true,
});
// Save the modified Excel file
await exceljsWorkbook.xlsx.writeFile(filePath);
// Clean up the temporary file
fs.unlinkSync(tmpFilePath);
}
// Usage
protectSpecificCells('path_to_your_excel_file.xlsx').then(() => {
console.log('Cells protected successfully');
}).catch(err => {
console.error('Error protecting cells:', err);
});