SheetJs 使用节点读取 xlsx 文件

SheetJs reading a xlsx file with node

嗨,我是 nodeJs 编程的新手,在我的项目中,我需要从 xlsx 文件中读取值,我使用的是 SheetJs。

现在我正在尝试读取联机文档后文件中的特定单元格。 如果我尝试从我的文件 xlsx 中读取单元格 A1,我没有错误,但如果我尝试读取不同的单元格,我会收到一条错误消息。 这是我的代码,取自文档,我在其中尝试读取文件的单元格 C7,我不明白为什么更改单元格以读取我会出错。

代码:

var XLSX = require('xlsx');

    /* data is a node Buffer that can be passed to XLSX.read */
    var workbook = XLSX.read('backend\Voti_Fantacalcio_Stagione_2020-21_Giornata_13.xlsx', {type:'buffer'});

    /* DO SOMETHING WITH workbook HERE */
    var first_sheet_name = workbook.SheetNames[0];
    console.log('Sheet name');
    console.log(first_sheet_name);
    console.log('End first_sheet_name');
    var address_of_cell = 'C7';
    var worksheet = workbook.Sheets[first_sheet_name];
    console.log('Worksheet start');
    console.log(worksheet);
    console.log('Worksheet end');
    var desired_cell = worksheet[address_of_cell];
    console.log('Inizio cella desiderata');
    console.log(desired_cell);
    console.log('Fine cella desiderata');
    var desired_value = (desired_cell ? desired_cell.v : undefined);
    console.log('Inizio valore cella desiderata');
    console.log(desired_value);
    console.log('Fine valore cella desiderata');

xlsx文件包含了梦幻足球的投票,如果你需要看它是如何制作的,可以从这里下载link(不知道能不能post links,如有错误请见谅:https://www.fantacalcio.it/voti-fantacalcio-serie-a

我的控制台输出:

Sheet name
Sheet1
End first_sheet_name
Worksheet start
{
  A1: {
    t: 's',
    v: 'backendVoti_Fantacalcio_Stagione_2020-21_Giornata_13.xlsx'
  },
  '!ref': 'A1'
}
Worksheet end
Inizio cella desiderata
undefined
Fine cella desiderata
Inizio valore cella desiderata
undefined
Fine valore cella desiderata

两个问题:

  1. XLSX.read 希望你传递文件的 contents (你的评论甚至这么说,它应该是一个节点缓冲区里面的数据)。不过,您传递的是一个文件名,因此它的处理方式就好像您有一个 CSV 文件,其中包含一个包含文件名的单元格。看看你的A1!它甚至不是正确的内容。您需要 XLSX.readFile

  2. 您的路径中有一个反斜杠,但您忘记将其转义(反斜杠在字符串文字中具有特殊含义)。在前面添加第二个反斜杠。

所以固定码是:

var workbook = XLSX.readFile('backend\Voti_Fantacalcio_Stagione_2020-21_Giornata_13.xlsx')