我试图使用xlsx (v0.8.0)解析一个文件,该文件是通过stdin管道传输的。
以下代码:
const data = fs.readFileSync('/dev/stdin').toString();
wb = xlsx.read(data, {type: 'binary'}); 当我将文件(在mac上)作为cat foo.xlsx \节点test.js传输时失败:
> throw new Error("Corrupted zip : can't find end of central directo ^ Error: Corrupted zip : can't find end of central directory at Object.ZipEntries.readEndOfCentral (/Volumes/Macintosh\_HD/Users/shauncutts/src/crane-parse-monthly/node\_modules/jszip/lib/zipEntries.js:135:19) at Object.ZipEntries.load (/Volumes/Macintosh\_HD/Users/shauncutts/src/crane-parse-monthly/node\_modules/jszip/lib/zipEntries.js:197:14) at Object.ZipEntries (/Volumes/Macintosh\_HD/Users/shauncutts/src/crane-parse-monthly/node\_modules/jszip/lib/zipEntries.js:21:14) at Object.module.exports [as load] (/Volumes/Macintosh\_HD/Users/shauncutts/src/crane-parse-monthly/node\_modules/jszip/lib/load.js:11:18) at Object.JSZip (/Volumes/Macintosh\_HD/Users/shauncutts/src/crane-parse-monthly/node\_modules/jszip/lib/index.js:39:14) at read\_zip (/Volumes/Macintosh\_HD/Users/shauncutts/src/crane-parse-monthly/node\_modules/xlsx/xlsx.js:11375:38) at Object.readSync [as read] (/Volumes/Macintosh\_HD/Users/shauncutts/src/crane-parse-monthly/node\_modules/xlsx/xlsx.js:11396:11)
>
However, I can read the same file via:
```javascriptwb = xlsx.readFile(fn);
没有问题。我应该如何修改我的代码以便能够读取管道文件?
发布于 2015-11-25 22:04:42
再次感谢@LazarevAlexandr ..。事实上,问题在于readFile和readFileSync在stdin上有问题。以下代码起作用:
let wb;
const chunks = [];
process.stdin
.on("data", function(chunk) { chunks.push(chunk); })
.on("end", function() {
const buffer = Buffer.concat(chunks);
wb = xlsx.read(buffer, {binary: true});
// (call your favorite async continuation method here...)
});(NB --在@mbostock的测试中尝试将二进制选项传递给readFileSync,结果仍然停留在65535)。
https://stackoverflow.com/questions/33910324
复制相似问题