我想使用 npm 包 XLSX 保护 excel 中的某些单元格

问题描述 投票:0回答:1

然而,问题是唯一的方法是对整个工作表使用 ws['!protect'] 属性,然后逐个遍历每个单元格并将其设置为:

worksheet1[cellAddress].s = { 保护: { 锁定: false } };

但这不起作用,它总是锁定整个工作表。我需要类似的东西来保护某个单元格而不是整个工作表。

有人可以帮我吗?

javascript node.js angular xlsx sheetjs
1个回答
0
投票

即使您主要使用 XLSX 执行其他任务,也可以使用 exceljs 实现单元格保护:

  1. 使用 XLSX 读取或写入 Excel 文件。

  2. 使用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);
});
© www.soinside.com 2019 - 2024. All rights reserved.