Создание таблицы в эксель



  • Каким модулем node.js пользоваться для создания таблицы в экселе с использованием полученных переменных? И желательно небольшой образец по созданию таблицы.
    Пробовал создавать через встроенную базу и потом экспортировать в эксель, но на выходе все столбцы соединяются в один. Тестил какой-то модуль из похожей темы, но мне выбивало ошибку и около переменной появлялось "BAS_VARS"(вроде так), но без переменных все создавалось.



  • @maxim Вы не поверите, но в wiki Bas это есть, и поиск на форуме тоже найдет Вам ответ )))



  • @usertrue said in Создание таблицы в эксель:

    @maxim Вы не поверите, но в wiki Bas это есть, и поиск на форуме тоже найдет Вам ответ )))

    В вики есть, но там нет про создание таблицы и запись в нее.
    Я даже смотрел какой-то старый гайд с использованием модуля xlsx, но тут вообще не пошло) В первом посте написано про модуль xlsx-populate и тестировал на образце из документации.



  • @maxim Что Вы имеете ввиду под созданием таблиц?
    Вот пример из модуля которых вы хотите использовать, записывает значения в ячейки и сохраняет в файл.

    const XlsxPopulate = require('xlsx-populate');
    const filePath = 'D:/Рабочая/node/out.xlsx';
    
    await (new Promise(async function(resolve,reject){
        let workbook = await XlsxPopulate.fromBlankAsync()
        workbook.sheet("Sheet1").cell("A1").value("This is neat!");
        workbook.sheet("Sheet1").cell("B1").value("This is neat!");
        workbook.toFileAsync(filePath);
        resolve();
    }))
    


  • @usertrue said in Создание таблицы в эксель:

    @maxim Что Вы имеете ввиду под созданием таблиц?
    Вот пример из модуля которых вы хотите использовать, записывает значения в ячейки и сохраняет в файл.

    const XlsxPopulate = require('xlsx-populate');
    const filePath = 'D:/Рабочая/node/out.xlsx';
    
    await (new Promise(async function(resolve,reject){
        let workbook = await XlsxPopulate.fromBlankAsync()
        workbook.sheet("Sheet1").cell("A1").value("This is neat!");
        workbook.sheet("Sheet1").cell("B1").value("This is neat!");
        workbook.toFileAsync(filePath);
        resolve();
    }))
    

    Да, я писал как раз об этом варианте, но к сожалению у меня выдает ошибку при использовании переменных.
    Собственно вот так вставляю переменную

    const XlsxPopulate = require('xlsx-populate');
    const filePath = 'C:/out.xlsx';
    
    await (new Promise(async function(resolve,reject){
        let workbook = await XlsxPopulate.fromBlankAsync()
        workbook.sheet("Sheet1").cell("A1").value("[[TEST]]");
        workbook.sheet("Sheet1").cell("B1").value("This is neat!");
        workbook.toFileAsync(filePath);
        resolve();
    }))
    

    И выдает вот такую ошибку

    Не удалось обновить:
    
    
    C:\Users\User\AppData\Roaming\BrowserAutomationStudio\apps\21.5.2\embedded\b8346293.QYZov3bt17UM\distr\lib\custom\5zzb3zf8g6p.js:10
        workbook.sheet("Sheet1").cell("A1").value("BAS_VARS["TEST"]");
                                                  ^^^^^^^^^^^
    
    SyntaxError: missing ) after argument list
        at createScript (vm.js:80:10)
        at Object.runInThisContext (vm.js:139:10)
        at Module._compile (module.js:588:28)
        at Object.Module._extensions..js (module.js:635:10)
        at Module.load (module.js:545:32)
        at tryModuleLoad (module.js:508:12)
        at Function.Module._load (module.js:500:3)
        at Module.require (module.js:568:17)
        at require (internal/module.js:11:18)
        at C:\Users\User\AppData\Roaming\BrowserAutomationStudio\apps\21.5.2\embedded\b8346293.QYZov3bt17UM\distr\lib\internal\custom.js:11:38
    


  • @maxim said in Создание таблицы в эксель:
    У вас переменная [[TEST]] стоит в кавычках, уберите и все будет норм.



  • @john_bradley said in Создание таблицы в эксель:

    @maxim said in Создание таблицы в эксель:
    У вас переменная [[TEST]] стоит в кавычках, уберите и все будет норм.

    Спасибо, это решило мою проблему. Странно конечно, так как я еще утром в самом начале делал и так и сяк, но ничего не получалось)
    А как записывать в готовый файл? Хочу сделать запись в готовый шаблон.



  • @maxim Самому интересно стало, предполагаю, что нужно сперва читать готовый фаил, потом в него дописывать, надо посмотреть документацию по модулю.



  • @john_bradley said in Создание таблицы в эксель:

    @maxim Самому интересно стало, предполагаю, что нужно сперва читать готовый фаил, потом в него дописывать, надо посмотреть документацию по модулю.

    Попытался потыкать и изменить готовый файл, но ничего не получилось и думаю пока сразу изменять стиль https://www.npmjs.com/package/xlsx-populate#styles



  • @maxim Читай те доки https://github.com/dtjohnson/xlsx-populate#parsing-data
    Если надо прочитать файл, то надо указать его путь в данной функции.
    let workbook = await XlsxPopulate.fromFileAsync("./Book1.xlsx")



  • @usertrue said in Создание таблицы в эксель:

    @maxim Читай те доки https://github.com/dtjohnson/xlsx-populate#parsing-data
    Если надо прочитать файл, то надо указать его путь в данной функции.
    let workbook = await XlsxPopulate.fromFileAsync("./Book1.xlsx")

    Если все правильно понимаю, то примерно так должно быть, но ничего не изменяется. Пробовал и другие варианты с изменением кода выше, но собственно ничего не получилось и действие выполняется бесконечно.

    const XlsxPopulate = require('xlsx-populate');
    
    // Load an existing workbook
    XlsxPopulate.fromFileAsync("C:/out.xlsx")
        .then(workbook => {
            // Modify the workbook.
            const value = workbook.sheet("Лист1").cell("A1").value([[TEST]]);
            
            // Log the value.
            console.log(value);
        });
    


  • @maxim А куда запись дели? И не забывайте в промис оборачивать.

    const XlsxPopulate = require('xlsx-populate');
    const filePath = 'out.xlsx';
    
    await (new Promise(async function(resolve,reject){
      let workbook = await XlsxPopulate.fromFileAsync(filePath);
      workbook.sheet(0).cell("A1").value("This is neat!");
      workbook.toFileAsync(filePath);
      resolve();
    }));
    


  • @usertrue said in Создание таблицы в эксель:

    @maxim А куда запись дели? И не забывайте в промис оборачивать.

    const XlsxPopulate = require('xlsx-populate');
    const filePath = 'out.xlsx';
    
    await (new Promise(async function(resolve,reject){
      let workbook = await XlsxPopulate.fromFileAsync(filePath);
      workbook.sheet(0).cell("A1").value("This is neat!");
      workbook.toFileAsync(filePath);
      resolve();
    }));
    

    Большое спасибо) Теперь вроде все работает и надеюсь не будет каких-то проблем в дальнейшем.



  • @UserTrue said in Создание таблицы в эксель:

    @maxim А куда запись дели? И не забывайте в промис оборачивать.

    const XlsxPopulate = require('xlsx-populate');
    const filePath = 'out.xlsx';
    
    await (new Promise(async function(resolve,reject){
      let workbook = await XlsxPopulate.fromFileAsync(filePath);
      workbook.sheet(0).cell("A1").value("This is neat!");
      workbook.toFileAsync(filePath);
      resolve();
    }));
    

    Что-то застревает бесконечное выполнение....



  • @Kingstreet06 said in Создание таблицы в эксель:

    @UserTrue said in Создание таблицы в эксель:

    @maxim А куда запись дели? И не забывайте в промис оборачивать.

    const XlsxPopulate = require('xlsx-populate');
    const filePath = 'out.xlsx';
    
    await (new Promise(async function(resolve,reject){
      let workbook = await XlsxPopulate.fromFileAsync(filePath);
      workbook.sheet(0).cell("A1").value("This is neat!");
      workbook.toFileAsync(filePath);
      resolve();
    }));
    

    Что-то застревает бесконечное выполнение....

    Что-то перепробовал все способы в теме. Через nodejs вообще не хочет работать. хотя и выполняется, без ошибок



  • @Kingstreet06 said in Создание таблицы в эксель:

    @Kingstreet06 said in Создание таблицы в эксель:

    @UserTrue said in Создание таблицы в эксель:

    @maxim А куда запись дели? И не забывайте в промис оборачивать.

    const XlsxPopulate = require('xlsx-populate');
    const filePath = 'out.xlsx';
    
    await (new Promise(async function(resolve,reject){
      let workbook = await XlsxPopulate.fromFileAsync(filePath);
      workbook.sheet(0).cell("A1").value("This is neat!");
      workbook.toFileAsync(filePath);
      resolve();
    }));
    

    Что-то застревает бесконечное выполнение....

    Что-то перепробовал все способы в теме. Через nodejs вообще не хочет работать. хотя и выполняется, без ошибок

    Установил библиотеку fast-csv

    и нашел такой код:

    var fs = require('fs');
    
    var csv = require('fast-csv');
    
    var ws = fs.createWriteStream('C:/Users/Admin/Dekstop/Test1.csv');
    
    csv. 
     write([
         ["a1","b1"],      
         ["a2","b2"]
       ], {headers: true} )
       .pipe(ws);
    

    Но сохраняет так :

    csv.png

    Пробую следующим кодом :

    var fs = require('fs');
    
    var csv = require('fast-csv');
    
    var ws = fs.createWriteStream('C:/Users/Admin/Dekstop/Test1.csv');
    
    csv. 
     write([
         {a:"a1",b:"b1"},      
          {a: "b2",b: "c2"},
         {a: "c2",b: "d2"}
       ], {
            headers: true
            transform: function(row){
                return {
                    A: row.A,
                    B: row.B
                };
            }
       })
       .pipe(ws);
    

    Но что-то ошибка в линии transform:

    Не удалось Обновить:
    
    C:\Users\Admin\AppData\Roaming\BrowserAutomationStudio\apps\21.9.2\embedded\54ecb033.N3VtbacAheeI\distr\lib\custom\nims12q0gb9.js:9
    function row();
                  ^
    
    SyntaxError: Unexpected token ;
        at createScript (vm.js:80:10)
        at Object.runInThisContext (vm.js:139:10)
        at Module._compile (module.js:588:28)
        at Object.Module._extensions..js (module.js:635:10)
        at Module.load (module.js:545:32)
        at tryModuleLoad (module.js:508:12)
        at Function.Module._load (module.js:500:3)
        at Module.require (module.js:568:17)
        at require (internal/module.js:11:18)
        at C:\Users\Admin\AppData\Roaming\BrowserAutomationStudio\apps\21.9.2\embedded\54ecb033.N3VtbacAheeI\distr\lib\internal\custom.js:11:38
    

Log in to reply