簡體   English   中英

無法從龐大的xlsx文件中獲取正確的工作表-使用NodeJS XLSX庫

[英]Not able to get right Sheets from huge xlsx files — using NodeJS XLSX library

我正在嘗試從一個巨大的文件(800k行)中獲取數據,並通過lambda(AWS)將其放入數據庫。 為此,我從S3獲取xlsx文件作為緩沖區並讀取它。

module.exports.getSalesData = new Promise((resolve, reject) => {
  getFileFromS3(filename)
    .then(function (workbook) {
      console.log(workbook.SheetNames[1]); // 'sales'
      console.log(workbook.SheetNames); // showing sales as [ 'main', 'sales', 'Sheet1' ]
      console.log(Array.isArray(workbook.SheetNames)); // true
      console.log(typeof workbook.SheetNames); // Object
      console.log(Object.keys(workbook.Sheets)); // [ 'main', 'Sheet1' ] == why 'sales' is not here?

      var sheet_name = workbook.SheetNames[1]; // sales tab
      var json_sheet = XLSX.utils.sheet_to_json(workbook.Sheets[sheet_name], { raw: true })
      resolve(json_sheet)
    })
    .catch(err => {
      console.log('File: ' + filename + ' doesn\'t exists on S3 or you\'re not connected to the internet.');
    })
})

問題在於workbook.Sheets我應該看到[ 'main', 'sales', 'Sheet1' ] ,對嗎?

然后,我嘗試像這樣獲取行數(已轉換為JSON):

getSalesData.then(function (data) {
    console.log(data.length + ' rows');
    console.log(data[0]);
  }).catch(err => console.error(err));

其中參數data是上面函數中定義的json_sheet 因此,對於data.length (行數),我得到0而不是800k +。 而且,當然,我無法獲得undefined data[0]

PS .:該文件有57.3mb-不確定是否是原因。

在此先感謝您的幫助。

因此,基本上發生的是NodeJS無法讀取完整文件,因為它使NodeJS VM的字符串內存限制崩潰了。

所以我要做的是增加內存限制,如下所示:

node --max-old-space-size=2048 services/process/process-sales.js

NodeJS的內存將從512MB增加到2048MB / 2GB。

但這只是讀取大量值的一種解決方案。

我不建議使用NodeJS這樣威脅大量數據。 而是使用一些很棒的庫(例如Pandas)來使用Python。

PS .:我的觀點和經驗是使用nodejs處理數據。 我不認為nodejs是為此而設計的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM