我正在使用一个名为SymPy的库,我想要读取驻留在服务器上的excel表,而不使用nodejs,只使用纯javascript。这可能吗?
文档中有一条消息说" readFile仅在服务器环境中可用。浏览器没有API来读取给定路径的任意文件,因此必须使用另一种策略"
根据上述消息,我假设作者指的是文件驻留在客户端的情况。
这是我到目前为止所做的事情
var wb = XLSX.readFile("myFile.xlsx"); //my file is in same directory on server
我收到错误" xlsx.full.min.js:22未捕获的TypeError:无法读取属性' readFileSync'未定义的"
答案 0 :(得分:2)
这对我有用
/* set up async GET request */
var req = new XMLHttpRequest();
req.open("GET", url, true);
req.responseType = "arraybuffer";
req.onload = function(e) {
var data = new Uint8Array(req.response);
var workbook = XLSX.read(data, {type:"array"});
/* DO SOMETHING WITH workbook HERE */
}
req.send();
答案 1 :(得分:1)
我在读取文件服务器端时遇到许多问题,其中包括许多错误,包括类型错误,charCodeAt。因此,这提供了使用阅读器的客户端和服务器端解决方案。 excel文件来自文件上传按钮,并使用node.js。 客户端:
let excelInput = document.getElementById("fileToUpload");
let excelFile = excelInput.files[0];
let reader = new FileReader();
因此,您可以使用该元素中的files [0]获取文件并创建一个fileReader。
您可以在Github上看到Aymkdn的解决方案。 https://github.com/SheetJS/sheetjs/issues/532。它使用Uint8Array进行工作。
reader.readAsArrayBuffer(excelFile);
reader.onload = function() {
excelArray = new Uint8Array(reader.result); //returns Uint8Array using the result of reader
let binary = "";
var length = excelArray.byteLength;
for (var i = 0; i < length; i++) {
binary += String.fromCharCode(excelArray[i]);
//uses a for loop to alter excelArray to binary
}
let formData = new FormData(); //create form data
formData.append("excel", binary); //append binary to it
fetch('/excel', {method: "POST", body: formData}) //post as normal
.then((data) => {
console.log('Success:', data);
})
.catch((error) => {
console.error('Error:', error);
});
}
服务器端:
app.post('/excel', function(req, res) {
let data = req.body;
var workbook = sheetJS.read(data, {type: 'buffer'});
console.log("workbook is", workbook);
res.send();
}