好的,所以我发现这个有很好的文档记录的node_module叫做js-xlsx

Question:我怎么能parse an xlsx to output json

以下是excel工作表的外观:

在此处输入图像描述

最后,json应该是这样的:

[
   {
   "id": 1,
   "Headline": "Team: Sally Pearson",
   "Location": "Austrailia",
   "BodyText": "...",
   "Media: "..."
   },
   {
   "id": 2,
   "Headline": "Team: Rebeca Andrade",
   "Location": "Brazil",
   "BodyText": "...",
   "Media: "..."
   }
]

index.js:

if(typeof require !== 'undefined') {
    console.log('hey');
    XLSX = require('xlsx');
}
var workbook = XLSX.readFile('./assets/visa.xlsx');
var sheet_name_list = workbook.SheetNames;
sheet_name_list.forEach(function(y) { /* iterate through sheets */
  var worksheet = workbook.Sheets[y];
  for (z in worksheet) {
    /* all keys that do not begin with "!" correspond to cell addresses */
    if(z[0] === '!') continue;
    // console.log(y + "!" + z + "=" + JSON.stringify(worksheet[z].v));

  }

});
XLSX.writeFile(workbook, 'out.xlsx');

推荐答案

"Josh Marinacci"答案的改进版,它将读取Z列以外的内容(即AA1).

var XLSX = require('xlsx');
var workbook = XLSX.readFile('test.xlsx');
var sheet_name_list = workbook.SheetNames;
sheet_name_list.forEach(function(y) {
    var worksheet = workbook.Sheets[y];
    var headers = {};
    var data = [];
    for(z in worksheet) {
        if(z[0] === '!') continue;
        //parse out the column, row, and value
        var tt = 0;
        for (var i = 0; i < z.length; i++) {
            if (!isNaN(z[i])) {
                tt = i;
                break;
            }
        };
        var col = z.substring(0,tt);
        var row = parseInt(z.substring(tt));
        var value = worksheet[z].v;

        //store header names
        if(row == 1 && value) {
            headers[col] = value;
            continue;
        }

        if(!data[row]) data[row]={};
        data[row][headers[col]] = value;
    }
    //drop those first two rows which are empty
    data.shift();
    data.shift();
    console.log(data);
});

Node.js相关问答推荐

Spotify Auth访问令牌给出错误代码400

NodeJS中的Vertex AI GoogleAuthError

try 使用Express和连接池将数据插入MySQL数据库时出现拒绝访问错误

将 POST 的 json 变量格式化为 lambda

如何在nodejs中打印pdf

Mongodb - 在数组数组中查找()

nyc 代码覆盖不适用于 NodeJs Express 服务器

如何解决未调用 Express 错误处理程序的问题

MongoDB Aggregate - 如何使用前一阶段的值作为下一阶段的字段名称?

如何找到特定文档并更新数组中特定键的值?

如何解决这个关于 TaskRunner 的 Node/Express 代码问题?

如何刷新 youtube-data-api v3 的访问令牌

Cypress net::ERR_EMPTY_RESPONSE 在真实服务器调用上

如何使用 UglifyJS 缩小文件夹中的多个 Javascript 文件?

Chrome 浏览器未将 if-modified-since 标头发送到服务器

如何在 AWS 上的 Amazon Linux AMI 中自动启动 node.js 应用程序?

TypeError:winston.Logger 不是带有winston 和morgan 的构造函数

从目录 node Js 中检索文件

为什么数组上的js映射会修改原始数组?

在 Node 中连接和缩小 JS 文件