Записать в xlsx (эксель) через цикл



  • Потратил 2 дня на танцы с бубнами для решения этой проблемы. Надеюсь будет полезно, что то вроде мануала для новичков

    Для начала ставим npm модуль "exceljs"
    Кто не знает как это сделать, мануал создателя

    Дальше вставляем в функцию Node.js готовый код.

    var Excel = require('exceljs');
    var workbook = new Excel.Workbook();
    
    workbook.xlsx.readFile('/*путь к файлу (для чтения) например C:/our.xlsx') 
        .then(function() {
            var i = /* ваша переманная (в BAS) со значением цикла[[CYCLE_INDEX]]*/;
            var info = /*ваша переменная с даннымы[[FIRST_LIST_ELEMENT]]*/;
            var worksheet = workbook.getWorksheet(/*номер стриницы xlsx1*/);
            var row = worksheet.getRow(/*номер строки, можно из переменной i*/);
            row.getCell(/*номер столбца*/).value = info); 
            row.commit();
            return workbook.xlsx.writeFile('/*Путь к файлу для записи напиример: C:/our.xlsx'*/);
        })
    

    Вот пример как должно выглядеть

    var Excel = require('exceljs');
    var workbook = new Excel.Workbook();
    
    workbook.xlsx.readFile('C:/our.xlsx')
        .then(function() {
            var i = [[CYCLE_INDEX]];
            var info = [[FIRST_LIST_ELEMENT]];
            var worksheet = workbook.getWorksheet(1);
            var row = worksheet.getRow(i);
            row.getCell(1).value = info; 
            row.commit();
            return workbook.xlsx.writeFile('C:/our.xlsx');
        })
    

    Готовый проект с установленным модулем: 0_1550491140538_manual.xml

    ВАЖНО!!! Файл уже должен быть создан перед началом работы

    Кратко о логике, модуль читает указанный вами файл.
    Добавляет или изменяет нужные значение.
    Записывает в файл
    Если есть вопросы задавайте.

    P.s. Не знал в какую категорию записать тему, админ не серчай.



  • @warenuk можно было сюда запостить - https://community.bablosoft.com/topic/3521/лайфхаки-bas



  • @uraabk said in Записать в xlsx (эксель) через цикл:

    @warenuk можно было сюда запостить - https://community.bablosoft.com/topic/3521/лайфхаки-bas

    Я очень рад, что @warenuk смог сам разобраться. Но тема лайфхаков несколько иная. Я переместил тему в ветку "Делитесь приложениями", здесь она будет более к месту.



  • @fox хм, тогда можно создать тему, с уже готовыми решениями, что бы новичкам не искать по форуму среди множества тем как же правильно решить капчу и подобное.



  • @uraabk Согласен, у новичков с поиском сложновато



  • @warenuk

    @warenuk said in Записать в xlsx (эксель) через цикл:

    Потратил 2 дня на танцы с бубнами для решения этой проблемы. Надеюсь будет полезно, что то вроде мануала для новичков

    Для начала ставим npm модуль "exceljs"
    Кто не знает как это сделать, мануал создателя

    Дальше вставляем в функцию Node.js готовый код.

    var Excel = require('exceljs');
    var workbook = new Excel.Workbook();
    
    workbook.xlsx.readFile('/*путь к файлу (для чтения) например C:/our.xlsx') 
        .then(function() {
            var i = /* ваша переманная (в BAS) со значением цикла[[CYCLE_INDEX]]*/;
            var info = /*ваша переменная с даннымы[[FIRST_LIST_ELEMENT]]*/;
            var worksheet = workbook.getWorksheet(/*номер стриницы xlsx1*/);
            var row = worksheet.getRow(/*номер строки, можно из переменной i*/);
            row.getCell(/*номер столбца*/).value = info); 
            row.commit();
            return workbook.xlsx.writeFile('/*Путь к файлу для записи напиример: C:/our.xlsx'*/);
        })
    

    Вот пример как должно выглядеть

    var Excel = require('exceljs');
    var workbook = new Excel.Workbook();
    
    workbook.xlsx.readFile('C:/our.xlsx')
        .then(function() {
            var i = [[CYCLE_INDEX]];
            var info = [[FIRST_LIST_ELEMENT]];
            var worksheet = workbook.getWorksheet(1);
            var row = worksheet.getRow(i);
            row.getCell(1).value = info; 
            row.commit();
            return workbook.xlsx.writeFile('C:/our.xlsx');
        })
    

    Готовый проект с установленным модулем: 0_1550491140538_manual.xml

    ВАЖНО!!! Файл уже должен быть создан перед началом работы

    Кратко о логике, модуль читает указанный вами файл.
    Добавляет или изменяет нужные значение.
    Записывает в файл
    Если есть вопросы задавайте.

    P.s. Не знал в какую категорию записать тему, админ не серчай.

    Сделал также, ошибок не выдает, но Файл ексель не меняется



  • @Kingstreet06 Смотрите в ваш цик пошагово, и определите на каком месте данные уходят. Более вероятно что косяк с расположением файла



  • Здравствуйте, скажите пожалуйста, почему первую строку в ексель перезаписывает и конечный результат начинается со второго елемента? И как это побороть?



  • @Semen said in Записать в xlsx (эксель) через цикл:

    Здравствуйте, скажите пожалуйста, почему первую строку в ексель перезаписывает и конечный результат начинается со второго елемента? И как это побороть?

    всё зависит от логики вашего скрипта. В файл лучше записывать один раз, сформировать весь документ в коде node js и один раз сохранить.



  • @Fox said in Записать в xlsx (эксель) через цикл:

    @Semen said in Записать в xlsx (эксель) через цикл:

    Здравствуйте, скажите пожалуйста, почему первую строку в ексель перезаписывает и конечный результат начинается со второго елемента? И как это побороть?

    всё зависит от логики вашего скрипта. В файл лучше записывать один раз, сформировать весь документ в коде node js и один раз сохранить.

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



  • @Semen said in Записать в xlsx (эксель) через цикл:

    @Fox said in Записать в xlsx (эксель) через цикл:

    @Semen said in Записать в xlsx (эксель) через цикл:

    Здравствуйте, скажите пожалуйста, почему первую строку в ексель перезаписывает и конечный результат начинается со второго елемента? И как это побороть?

    всё зависит от логики вашего скрипта. В файл лучше записывать один раз, сформировать весь документ в коде node js и один раз сохранить.

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

    В таком случае приложите тестовый проект



  • @Fox said in Записать в xlsx (эксель) через цикл:

    @Semen said in Записать в xlsx (эксель) через цикл:

    @Fox said in Записать в xlsx (эксель) через цикл:

    @Semen said in Записать в xlsx (эксель) через цикл:

    Здравствуйте, скажите пожалуйста, почему первую строку в ексель перезаписывает и конечный результат начинается со второго елемента? И как это побороть?

    всё зависит от логики вашего скрипта. В файл лучше записывать один раз, сформировать весь документ в коде node js и один раз сохранить.

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

    В таком случае приложите тестовый проект

    Спасибо за отклик. Проблема решилась добавлением к номеру строки +1, т.е. var row = worksheet.getRow(i+1);


Log in to reply