首页 > 解决方案 > 如何在javascript中使用sheetjs检查Excel工作表的特定标题列

问题描述

我的要求是阅读 Excel 表并检查特定的标题列是否存在。我正在使用 sheetjs 读取标题列的值。

但是,它正在尝试收集所有标题列名称,但我只想要某些索引处的某些单元格。我怎样才能只收集某些特定的标题?

validateMissingHeaders = (sheet) => {
    var headers = [];
    var range = XLSX.utils.decode_range(sheet['!ref']);
    var C, R = range.s.r; /* start in the first row */
    /* walk every column in the range */
    for(C = range.s.c; C <= range.e.c; ++C) {
        var cell = sheet[XLSX.utils.encode_cell({c:C, r:R})] /* find the cell in the first row */

        var hdr = ""; // <-- replace with your desired default 
        if(cell && cell.t) hdr = XLSX.utils.format_cell(cell);

        headers.push(hdr);
    }
    console.log(`-- Headers collected :`, headers);
}

fileChange = event => {
    const inputFile = event.target.files[0];
    const fileReader = new FileReader();
    fileReader.readAsArrayBuffer(inputFile);
    fileReader.onload = (e) => {
        const bufferArray = e.target.result;
        const wb = XLSX.read(bufferArray, { type: "buffer" });
        const wsname = wb.SheetNames[1];
        const ws = wb.Sheets[wsname];
        this.validateMissingHeaders(ws);
    };
}

有人可以为此提供解决方案。

标签: javascriptreactjssheetjs

解决方案


const HEADERS_MAP = new Map();
HEADERS_MAP.set(0, "Item");
HEADERS_MAP.set(1, "Name");
HEADERS_MAP.set(3, "Age");
HEADERS_MAP.set(5, "Address");

validateMissingHeaders = (sheet, errors) => {
        var missingHeaders = [];
        HEADERS_MAP.forEach((value, index) => {
            var cell = sheet[XLSX.utils.encode_cell({c:index, r:0})]
            var header = "";
            if (cell && cell.t) {
                header = XLSX.utils.format_cell(cell);
                if (value !== header) {
                    missingHeaders.push(value);
                }
            }
        });
        if (missingHeaders.length !== 0) {
            errors.push({
                row: "Missing Headers",
                column: missingHeaders,
            });
        }
    }

fileChange = event => {
    const inputFile = event.target.files[0];
    const fileReader = new FileReader();
    fileReader.readAsArrayBuffer(inputFile);
    fileReader.onload = (e) => {
        const bufferArray = e.target.result;
        const wb = XLSX.read(bufferArray, { type: "buffer" });
        const wsname = wb.SheetNames[1];
        const ws = wb.Sheets[wsname];
        this.validateMissingHeaders(ws);
    };
}

推荐阅读