我的 Angular-CLI 前端开发服务器在本地运行 localhost:4200
出于特定原因,我需要将本地 Excel 文件存储在我的 PC 上,读取其内容并对 API 进行一些调用。而且它必须是从客户端。
我正在尝试使用 js-xlsx,已安装它,npm install xlsx但我找不到如何获取文件并读取其内容。
如何在 Angular 12 中使用 js-xlsx 导入本地 excel 文件?
注意:如果使用纯 JavaScript 可能/更容易,它对我也有效。
在项目(在Angular4.3上编写)中,我们使用xlsx创建xlsx/csv表以供用户下载。我们面临的问题是,当我们尝试导出大量数据时,原始json文件可以是100+Mb,转换后的xlsx/csv文件可以是28Mb,并且所有这些转换操作都在客户端处理,它使用所有资源在主线程上。我尝试添加网络工作人员以将所有进程移动到另一个线程,当尝试从工作人员下载创建的文件时,我收到错误:
export.worker.bundle.js:2 未捕获错误:无法保存文件 test.xlsx
单击添加工人的示例代码:
btn.addEventListener('click', (e) => {
const worker = new Worker('./export.worker.bundle.js');
const payload = {
data: [
{ name: 'Moran', role: 'back' },
{ name: 'Alain', role: 'front' },
{ name: 'Tony', role: 'back' },
{ name: 'Mike', role: 'back' },
{ name: 'Abo', role: 'back' },
{ name: 'Toni', role: 'back' }
]
};
worker.postMessage(payload);
worker.onmessage = (e) => {
console.log(e.data);
// worker.terminate();
};
});
Run Code Online (Sandbox Code Playgroud)
工人代码:
(function() {
const XLSX = require('xlsx');
const utils …Run Code Online (Sandbox Code Playgroud) 我有一个包含 id 和数据的多个标签的数组:
[
{
"id": "tagID1",
"error": { "code": 0, "success": true },
"data": [
[1604395417575, 108, 3],
[1604395421453, 879, 3]
]
},
{
"id": "tagID2",
"error": {"code": 0, "success": true},
"data": [
[1604395417575, 508, 3],
[1604395421453, 179, 3]
]
}
]
Run Code Online (Sandbox Code Playgroud)
我想使用NPM 的xlsx包将此数据转换为 Excel 电子表格。
注:1604395417575 是时间戳,608 是值,3 是质量。
我想按以下格式在 Excel 工作表中显示
| Timestamp | tagID1 value | tagID1 quality | tagID2 value | tagID2 quality|
| -------- | -------------- | -------- ------| -------------| ------------- | …Run Code Online (Sandbox Code Playgroud) 我正在尝试将新行追加到现有的 Excel 工作表中,但没有成功。
当我使用writeFile而不是write函数时,它会创建一个包含所有数据的全新文件,但我想将行附加到现有记录。
这是到目前为止的代码。我正在使用 SheetJs。
const reader = require('xlsx')
const wb = reader.readFile('./plan.xlsm')
const sheets = wb.SheetNames
var xl_data = reader.utils.sheet_add_json(wb.Sheets[sheets[0]], [
{ A: 4, B: 5, C: 6 }], {header: ["A", "B", "C"], skipHeader: true, origin: "A31"});
reader.utils.book_append_sheet(wb, xl_data);
reader.write(wb, {type: "binary", bookType: "xlsm" });
Run Code Online (Sandbox Code Playgroud) 我正在开发一个 Meteor 应用程序,使用由“SheetJSDev”制作的“SheetJS”中名为“js_xlsx”的 Node.js 包。我正在使用这个包在后端将上传的 Excel 表转换为 JSON,这样我就可以将它存储在我的 MongoDB 中,并使用它在前端做一些花哨的分类工作。只有一个问题。该包会跳过标题为空的列,但最右侧的列的标题为空。我已经发现该包可以很好地处理带有空标题的列,但是因为 JSON 键需要是唯一的,所以它只保存 JSON 对象中带有空标题的最后一列。
例子:
填充所有标题:
如您所见,当所有标题都填满时,一切正常。
第一个和第二个最后一个标题为空:
在这里你看到倒数第二列放在前面,有一个“未定义”的标题,第一列甚至不在那里(因为它被倒数第二列覆盖,因为它们都有“未定义”作为它们的键)。
前 3 列和倒数第二个标题为空:
与第三张和第四张图像相同的东西。只有带有空标题的最后一列才会进入 JSON 对象。
现在,我已经浏览了源代码并搜索了 GitHub 页面,甚至要求 Google 帮助我,但没有太大帮助。
我想知道的是:
你如何让 js_xlsx 处理所有带有空标题的列?
包的 GitHub 页面的链接是:
https://github.com/SheetJS/js-xlsx
任何帮助深表感谢!
我正在使用它js-xlsx来创建 Excel 文件。完成后.json_to_sheet,我得到的工作表不符合所需的列顺序。例如,我收到以下订单:
100 | 200 | 300| 400| a | b | c
Run Code Online (Sandbox Code Playgroud)
100, 200, 300, 400, a, b, c我的列标题是什么时候。
我要得到以下订单:
a | b | c | 100 | 200 | 300| 400
Run Code Online (Sandbox Code Playgroud)
当 a | b | c总是恒定的,而其他列的数量正在变化。
如何重新排列列顺序?
注意:
当使用数字作为标题时,请xlsx重新排列列,使标题以数字开头,然后是其余的。JSON当标题不以数字开头时,您可以仅对保存的列进行排序。一种解决方案是在数字前添加一个空格' ',这样就可以解决问题。但我不想在数字前有空格。
我有一个 Excel 工作表,有 500 行。我正在尝试获取从 101 到 200 的行。
我在谷歌中搜索过,我找到了一个获取起始行的示例,例如1到100或1到1000,甚至1到任何数字。
但我还没有找到任何代码来获取从第 m 行到第 n 行的行(这里“m”和“n”可以是任何数字,例如 m=101 到 n=200)
下面是我发现获取前 100 行的代码:
let workbook = XLSX.readFile('./files/uploaded_files/testfile.xlsx', {sheetRows: 100})
const wsname = workbook.SheetNames[0];
const ws = workbook.Sheets[wsname];
var exceldata = XLSX.utils.sheet_to_json(ws);
Run Code Online (Sandbox Code Playgroud)
即使有任何其他模块可以获取之间的行,我想知道是否有任何?
我正在使用一个名为SheetJS的库,我想在不使用 nodejs 的情况下读取驻留在服务器上的 Excel 工作表,只使用纯 javascript。这可能吗?
文档中有一条消息说“readFile 仅在服务器环境中可用。浏览器没有用于读取给定路径的任意文件的 API,因此必须使用另一种策略”
对于上述消息,我假设作者指的是文件驻留在客户端的情况。
这是我到目前为止所做的
var wb = XLSX.readFile("myFile.xlsx"); //my file is in same directory on server
Run Code Online (Sandbox Code Playgroud)
我收到错误“ xlsx.full.min.js:22 Uncaught TypeError:无法读取未定义的属性‘readFileSync’ ”
我使用 js-xlsx 和函数 utils.json_to_sheet 导出到 excel。
问题是我有另一个 json 对象,我想将其导出到同一张表,就在前一个的正下方。
XLSX.utils.json_to_sheet(outputData);
Run Code Online (Sandbox Code Playgroud)
试图在文档等中找到有关它的任何信息,但似乎没有人遇到过这个问题。不久前有人问过一个类似的问题,但不幸的是没有答案 - How to add multiple table with different data-set to the same sheet in exceljs。有任何想法吗?
我有一个使用 js-xlsx 读取的 excel 文件。除了单元格为空外,代码工作正常。这些单元格被忽略。创建 JSON 对象时,如何获取这些单元格?
我在 SO 以及其他一些论坛上针对同一问题解决了一些问题,但没有任何令人满意的结果。
欢迎任何帮助。我的代码是:
reader.addEventListener('load', function(){
var data = this.result;
var wb = XLSX.read(data, {type: 'binary', sheetStubs:true});
// console.log(headers);
wb.SheetNames.forEach(function(sheetName){
//pulling out column headers for tablecreation
var headers = get_header_row(wb.Sheets[sheetName]);
createTableInDB(headers);
// Here is your object
var XL_row_object = XLSX.utils.sheet_to_json(wb.Sheets[sheetName]);
//console.log(XL_row_object);
for(var i=0; i<XL_row_object.length; i++){
var json_object = XL_row_object[i];
if(json_object !== null){
var dataobject = {
"tablename": tname,
"dbname": dbname,
"info": json_object,
"uname": uname
}
dataobject = $.toJSON(dataobject);
$.ajax({
type: "POST",
url: "insertIntoTable.php", …Run Code Online (Sandbox Code Playgroud)