javascript - 如何在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);
};
}
有人可以为此提供解决方案。
解决方案
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);
};
}
推荐阅读
- c# - 在 Debian 10 GNU/Linux 中运行 Unity 的 TextMesh Pro 错误
- javascript - Vuex在使用动作时不更新状态
- ruby-on-rails - 如何在 ruby 中排序、过滤 json 数据?
- python-3.x - 如何在使用 Python 的 Google Cloud 构建中创建具有多个替换变量的触发器
- apache-spark - 在 Yarn 集群模式下如何处理 Spark App 的异常驱动程序终止
- reactjs - 无法解析模块“react-native/Libraries/ART/ReactNativeART”
- java - 使用 Swagger 注释的意外令牌错误
- javascript - javascript socket.on(..) 没有被调用
- reactjs - 如何从子组件进行密码验证?
- python - pickle.loads() 的问题 - 输入不足