@Fox Привет.Я описывал задачу в этой теме https://community.bablosoft.com/topic/27417/вызов-многопоточной-функции
Дело в том,что я не могу вообще никак перевести свой скрипт на многопоток,у меня тупо,что в вызове функции в многопоток,что просто обычный многопоток,выполняет свою работу с данными по очереди,а не одновременно.И это очень сильно бьет по времени,а нужна именно скорость обработки.Все уже готово и скрипт рабочий полностью,но скорость обработки заставила воспользоваться многопотоком.Ранее,подобных проблем не замечал,а сейчас элементарную задачу не могу уже несколько дней решить.
Скрипт очень простой и работает без браузера вообще,в скрипте используется только одно взаимодействие с гет запросом.Пример скрипта я приложил в этой теме(но без запросов),он точно почти такой же,как и основа.
Логика такова:
1)Запускается скрипт (без всяких ресурсов изначально и данных) и создаются два ресурса.
2)Делается запрос на сайт,который обрабатывается в отдельной функции,т.е. обрабатывает полученные строки и записывает в ресурс.
3)Вызывается функция в несколько потоков,которая работает (должна работать) с каждой строкой из созданного ранее ресурса(уникальной)в отдельном потоке.Данные обрабатываются и записываются во второй ранее созданный ресурс.
4)Как только данные обработаны,ресурс переводится в список и список записывается в файл.Более ничего не делается.
-Сперва я думал,что проблема в создаваемых в ходе работы ресурсах,но нет.Создавал изначально ресурсы и то же самое было.
-Потом пробовал брать из файлов значения\потом создавать файлы по ходу и из них брать данные\сохранять напрямую пытался и.т.д
-Возможно думал стоят какие то ограничения из за слабого пк с 4 гб оперативы и взял сервер с 64 гб,но как обрабатывалась строка за 5 минут на моем пк,так же по скорости и на серваке.Ладно, с этим я уже ничего не поделаю из за регулярок в проекте,согласен.Но вот перевести на поток и хотя бы по 10 строк одновременно обрабатывать,очень бы помогло.А сейчас в любом случае,у меня,сколько бы потоков не выставил - работает все равно как один,просто по очереди разный поток берет свои данные(
Создание таблицы в эксель
-
Каким модулем node.js пользоваться для создания таблицы в экселе с использованием полученных переменных? И желательно небольшой образец по созданию таблицы.
Пробовал создавать через встроенную базу и потом экспортировать в эксель, но на выходе все столбцы соединяются в один. Тестил какой-то модуль из похожей темы, но мне выбивало ошибку и около переменной появлялось "BAS_VARS"(вроде так), но без переменных все создавалось. -
@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]] стоит в кавычках, уберите и все будет норм.Спасибо, это решило мою проблему. Странно конечно, так как я еще утром в самом начале делал и так и сяк, но ничего не получалось)
А как записывать в готовый файл? Хочу сделать запись в готовый шаблон. -
@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);Но сохраняет так :

Пробую следующим кодом :
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