我正在尝试使用 SheetJS 读取 .xlsx 文件并将其转换为 JSON。我能够读取简单的(没有合并单元格).xlsx 文件并将其转换为 JSON,但我无法正确处理合并单元格。
问题是我有一个 .xlsx 文件,其中包含不同语言的产品。
我尝试在不同的网站和 SheetJS 的 github 存储库https://github.com/sheetjs/js-xlsx/#json上寻找解决方案,但效果平平。主要解决如何编写合并单元格。
function handleFile(e) {
var files = e.target.files, f = files[0];
var reader = new FileReader();
reader.onload = function(e) {
var data = new Uint8Array(e.target.result);
var workbook = XLSX.read(data, {type: 'array'});
let result = '';
let sheet_name_list = workbook.SheetNames;
// iterate through sheets
sheet_name_list.forEach(function (y) {
workbook.Sheets[y]['!merges'].map(r => {
let startChar = XLSX.utils.encode_range(r).split(':')[0].replace(/[^a-zA-Z]+/g, '');
let endChar = XLSX.utils.encode_range(r).split(':')[1].replace(/[^a-zA-Z]+/g, '');
let number = XLSX.utils.encode_range(r).split(':')[0].match(/[+-]?\d+(?:\.\d+)?/g)[0];
for …Run Code Online (Sandbox Code Playgroud) 我有一个嵌套的json对象。为了简单起见:
data = {'key1': 1, 'key2': 2, 'key3': {'nestedKey1': 3, 'nestedKey2': 4}}
Run Code Online (Sandbox Code Playgroud)
一个真实的对象更大,但要点是它是一个嵌套的对象。值可以是字符串,数字或其他对象。现在,我需要获取一个excel表(对于此特定的json如下所示):
|----------------------------------------
| key1 | key2 | key3 |
| | |--------------------------
| | | nestedKey1 | nestedKey2 |
|----------------------------------------
| 1 | 2 | 3 | 4 |
|----------------------------------------
Run Code Online (Sandbox Code Playgroud)
为了做到这一点,我尝试使用xlsx库。我导入库,如下所示:
import { WorkSheet, WorkBook, utils, writeFile } from 'xlsx';
Run Code Online (Sandbox Code Playgroud)
在我的方法中,我定义了对象:
let myObj = {'key1': 1, 'key2': 2, 'key3': {'nestedKey1': 3, 'nestedKey2': 4}}
Run Code Online (Sandbox Code Playgroud)
然后创建一个工作表和工作簿:
const workSheet: WorkSheet = utils.json_to_sheet([myObj]);
const workBook: WorkBook = utils.book_new();
utils.book_append_sheet(workBook, workSheet, 'object_to_save');
Run Code Online (Sandbox Code Playgroud)
最后将其写入文件: …
我目前正在使用 NodeJS 和库 SheetsJS 来阅读 XLSX 工作簿。
我的任务是从多个工作表中获取数据并将它们附加到新工作表中。工作表的结构在 A 列中具有类别,在 B列中具有类别值。
*我尝试 过的事情*我尝试了 2 件事,它们提出了 2 个不同的问题:
1.) 我尝试使用内置函数sheet_to_json将我的 xlsx 数据格式化为 JSON,但它使标头成为每个对象的键。我已经使用选项skipHeader: true来否定这一点,但如果 A1 是标题,则 A2 是作为对象重复的下一个值。
下面是一个代码片段:
let readFiletoJSON = filename => {
//wb = workbook
let wb = xlsx.readFile(filename, {cellDates: true});
let ws = wb.Sheets["1-Header"]
let currentRange = { s: { c: 0, r: 1 }, e: { c: 1, r: 10 } }
let encodedRange = xlsx.utils.encode_range(currentRange) …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用带有日期列的sheetjs节点模块读取XLSX文件。解析后我得到的数据格式不正确
文件数据为:2020年2月17日
但 xlsx 读完后,它给了我 2/17/20。它正在改变年份格式。我的要求是按原样获取数据。
示例代码:
var workbook = XLSX.readFile('a.xlsx', {
sheetRows: 10
});
var data = XLSX.utils.sheet_to_json(workbook.Sheets['Sheet1'], {
header: 1,
defval: '',
blankrows: true,
raw: false
});
Run Code Online (Sandbox Code Playgroud) 我跟着这里的演示:https : //github.com/SheetJS/js-xlsx/tree/master/demos/electron
我可以将一个 excel 文件拖到我的电子应用程序中。
该文件说,你可以访问每一个细胞:
for(var R = range.s.r; R <= range.e.r; ++R) {
for(var C = range.s.c; C <= range.e.c; ++C) {
var cell_address = {c:C, r:R};
/* if an A1-style address is needed, encode the address */
var cell_ref = XLSX.utils.encode_cell(cell_address);
}
}
Run Code Online (Sandbox Code Playgroud)
我如何在下面的代码中使用它?我将文件的内容存储在我的测试变量中,但我无法访问它。那里的文档缺乏信息。
var do_file = (function() {
return function do_file(files) {
var f = files[0];
var reader = new FileReader();
reader.onload = function(e) {
var data = e.target.result;
data = new …Run Code Online (Sandbox Code Playgroud) 我正在尝试从使用 sheet js 库加载的一组数据中写入多个 csv 文件。我的第一次尝试是这样的:
for (let i = 0; i < dataSetDivided.length; i++) {
let exportSet = dataSetDivided[i]
console.log(exportSet)
let ws = XLSX.utils.json_to_sheet(exportSet, {header: finalHeaders})
let wb = XLSX.utils.book_new()
XLSX.utils.book_append_sheet(wb, ws, "SheetJS")
let todayDate = this.returnFormattedDate()
let originalFileName = this.state.fileName
let exportFileName = 'import_' + originalFileName + '_' + todayDate + '(part_' + (i + 1) + ').csv'
XLSX.writeFile(wb, exportFileName)
}
Run Code Online (Sandbox Code Playgroud)
使用此代码,我猜只写入了一些文件,因为 for 循环在继续之前不会等待写入文件。
所以我试图将每个文件写入如下承诺中:
Promise.all(
dataSetDivided.map((exportSet, i) => {
return new Promise((resolve, reject) => {
console.log(exportSet)
let …Run Code Online (Sandbox Code Playgroud) 我有一个 JSON 对象数组,如下所示:
[
{"name":"John", "city": "Seattle"},
{"name":"Mike", "city": "Los Angeles"},
{"name":"Zach", "city": "New York"}
]
Run Code Online (Sandbox Code Playgroud)
当我使用下面的代码时,它不起作用:
_export: function(records,opts) {
var XLSX = xlsx;
var fileName = opts.split(".")[2]
var workSheet = XLSX.utils.json_to_sheet(records);
console.log("THis is Worksheet",workSheet);
var wb = XLSX.utils.book_new();
console.log("THis is workbook",wb)
XLSX.utils.book_append_sheet(wb, workSheet, fileName);
var bin = XLSX.write(wb, {bookType:'xlsx',type: "binary"});
return new Blob([this._binStr2ArrBuff(bin)], { type: "" });
},
},
Run Code Online (Sandbox Code Playgroud)
我正在使用 SheetJS 版本 0.9.11,只是想检查是否有任何方法可以将其导出为 Excel 格式?最近两天我被困在这里了。任何帮助将不胜感激。
我正在创建一个网页,其中的数据上传到 HTML 表。经过一些计算后,会生成一个输出 HTML 表。输出 HTML 表必须以 Excel ( .xlsx) 格式转储。我使用SheetJS库来上传和下载。
我尝试过以下代码,将数据导出到 Excel,无需任何格式。
计算后输出HTML:
<table border="1" id="tempTable">
<thead>
<tr>
<th style="border:1px solid #000000;border-collapse: collapse">Column1</th>
<th style="border:1px solid #000000;border-collapse: collapse">Column2</th>
<th style="border:1px solid #000000;border-collapse: collapse">Column3</th>
</tr>
</thead>
<tbody>
<tr>
<td style="border:1px solid #000000;border-collapse: collapse">R1C1</td>
<td style="border:1px solid #000000;border-collapse: collapse">R1C2</td>
<td style="border:1px solid #000000;border-collapse: collapse">R1C3</td>
</tr>
<tr>
<td style="border:1px solid #000000;border-collapse: collapse">R2C1</td>
<td style="border:1px solid #000000;border-collapse: collapse">R2C2</td>
<td style="border:1px solid #000000;border-collapse: collapse">R2C3</td>
</tr>
</tbody>
</table>
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) 我正在使用 xlsx 文件。我找到了两个很棒的库
但我无法在他们之间做出决定。我应该选择哪个对象?我研究了它们的功能比较,但没有发现任何这样的比较。大多数比较是基于启动次数、年龄、更新频率等,而不是基于它们的功能。
https://www.libtrends.info/npm-compare/exceljs-vs-xlsx
https://www.libhunt.com/compare-exceljs-vs-sheetjs
https://npmcompare.com/compare/exceljs,node-xlsx,xlsx。
它们的功能没有区别吗?Sheetjs 的专业社区编辑怎么样?