Не удается создать файлы xlsx с облачными функциями Firebase - PullRequest
0 голосов
/ 05 июля 2018

Я следовал учебному пособию по для пакета excel4node .

Для запуска кода у меня есть функция https, которая создает файл Excel.xlsx в том же каталоге, что и index.js в моей локальной системе.

Однако проблема в том, что каждый раз, когда я вызываю функцию, создается файл нулевого байта Excel.xls.

Тело функции таково:

const createXlxsFile = (req, res) => {
  const xl = require('excel4node');

  // Create a new instance of a Workbook class
  const workbook = new xl.Workbook();

  // Add Worksheets to the workbook
  const worksheet = workbook.addWorksheet('Sheet 1');
  const worksheet2 = workbook.addWorksheet('Sheet 2');

  // Create a reusable style
  const style = workbook.createStyle({
    font: {
      color: '#FF0800',
      size: 12
    },
    numberFormat: '$#,##0.00; ($#,##0.00); -'
  });

  // Set value of cell A1 to 100 as a number type styled with paramaters of style
  worksheet.cell(1, 1).number(100).style(style);

  // Set value of cell B1 to 300 as a number type styled with paramaters of style
  worksheet.cell(1, 2).number(200).style(style);

  // Set value of cell C1 to a formula styled with paramaters of style
  worksheet.cell(1, 3).formula('A1 + B1').style(style);

  // Set value of cell A2 to 'string' styled with paramaters of style
  worksheet.cell(2, 1).string('string').style(style);

  // Set value of cell A3 to true as a boolean type styled with paramaters of style but with an adjustment to the font size.
  worksheet.cell(3, 1).bool(true).style(style).style({ font: { size: 14 } });

  workbook.write('Excel.xlsx');

  res.end('DOC CREATED');
};

Этот код работает нормально со стандартными Node.js, но не с облачными функциями Firebase. Есть ли ограничение на запись файлов с функциями?

У меня такая же проблема даже при использовании пакета Xlsx-populate .

Ответы [ 2 ]

0 голосов
/ 10 июля 2018

OK. Разобрался с вопросом.

Дело в том, что облачная функция не позволяет вам писать в любой каталог в ОС.

Единственное место, к которому у вас есть доступ для записи, - это /tmp в облачных функциях.

Однако на вашем локальном ПК это тоже может произойти сбой (протестировано в Windows 10). Возможно, потому что я не создал папку C:/tmp.

Чтобы исправить это, вы можете использовать метод tmpdir() модуля os в Node.js

const os = require('os');
const path = require('path');
const pathToSave = path.join(os.tmpdir(), 'Excel.xlsx');

При развертывании кода вам нужно заменить os.tmpdir() на `/tmp'.

const pathToSave = path.join('/tmp', 'Excel.xlsx');

Надеюсь, это поможет.

0 голосов
/ 05 июля 2018

workbook.write('Excel.xlsx'); является асинхронным. В документах говорится, что требуется обратный вызов, который вызывается после завершения. Используйте это, чтобы завершить функцию. Прямо сейчас вы заканчиваете работу раньше, чем запись может закончиться.

wb.write ();

Метод write () может принимать одно имя файла, a имя файла с функцией обратного вызова или объект ответа HTTP.

wb.write('ExcelFile.xlsx', function (err, stats) {
    if (err) {
        res.send(500);
    } else {
        res.end('DOC CREATED');
    }
});

Похоже, это может сработать:

wb.write('ExcelFile.xlsx', res);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...