Excel

Делитесь модулями
  • @UserTrue said in Excel:

    @GhostZ said in Excel:

    @UserTrue, в смысле? В модуле же есть действия для работы со стилями, только нельзя делать гипер ссылки и устанавливать стили отдельно для столбцов и строк.

    Я не уверен, что стилями можно все покрыть (хотя там действительно их много), но главное, что очень трудоемко делать красивые и сложные таблички. А так я в ноде в 3 строчки делаю, прочитал шаблон, внес данные, записал под другим названием.

    Кстати я в тот день видимо перегрелся, можно же просто БАСом скопировать шаблон и так же модулем вносить данные ))

  • Уважаемый @GhostZ! Модуль пушка, но у меня есть вопрос касаемо действия "Вставить строки". Там есть параметр "Со строки. Может быть пустым". Так вот почему-то у меня в этом параметре не получается использовать значение из переменной. Допустим у меня есть переменная Х со значением 2. Если я подставляю Х в этот параметр, то строка создается внизу таблицы, не там, где должна быть. Но если я подставлю в параметр просто 2, то все ок, строка создается там где надо. Это на моей стороне проблема, или так было задумано?

  • @Вениамин said in Excel:

    Уважаемый @GhostZ! Модуль пушка, но у меня есть вопрос касаемо действия "Вставить строки". Там есть параметр "Со строки. Может быть пустым". Так вот почему-то у меня в этом параметре не получается использовать значение из переменной. Допустим у меня есть переменная Х со значением 2. Если я подставляю Х в этот параметр, то строка создается внизу таблицы, не там, где должна быть. Но если я подставлю в параметр просто 2, то все ок, строка создается там где надо. Это на моей стороне проблема, или так было задумано?

    А в переменной Х строка или число?

  • @smeckoi77 как выяснилось - строка :) Надо переводить в число, тогда работает. Проблема решена)

  • Вопрос: Как записать число вида 0123456 в ячейку в виде текста.
    Устанавливаю стиль numberFormat:@, ячейка становиться "Текстовый", выполняю "записать в ячейку" 0123456 естественно запись переформатируется в "Общий" и записывается число 123456.

  • @Sedoy, можно вот так
    86a9fb96-3c8b-49b4-859d-7aa8016cf794-image.png

  • @GhostZ said in Excel:

    @Sedoy, можно вот так
    86a9fb96-3c8b-49b4-859d-7aa8016cf794-image.png

    Если бы... Я перепробовал конвертить toString(), String(), ''+(0123456) и т.д и т.п. Все одно меняет на общий.
    Вот это читал https://support.microsoft.com/en-us/office/number-format-codes-5026bbd6-04bc-48cd-bf33-80f18b4eae68 и пробовал, ни чего. Может от версии Офиса зависит, у меня 2019?

  • @Sedoy, формат нужно менять после записи значения, так как запись значения в любом случае меняет формат

  • @GhostZ said in Excel:

    @Sedoy, формат нужно менять после записи значения, так как запись значения в любом случае меняет формат

    Имеется в виду формат ячейки? Если да, то сначала все равно запишется 123456 и даже если поменять формат на текстовый 0 впереди уже не добавиться.

  • @Sedoy, устанавливал так как на скриншоте выше
    41aabb6b-283d-4f2b-8ce6-df49e4aa6c2e-image.png

  • @GhostZ said in Excel:

    @Sedoy, устанавливал так как на скриншоте выше
    41aabb6b-283d-4f2b-8ce6-df49e4aa6c2e-image.png

    Ок. Не учел пробел между скобками 8-). Получается так только через вставить ячейку, через вставить строку не выходит. Буду думать.
    Спасибо за подсказку!

  • @Sedoy, для вставить строку данные также нужно передавать в двумерном массиве чтобы они дополнительно не обрабатывались, а нет там в любом случае обработка

  • @GhostZ said in Excel:

    @Sedoy, для вставить строку данные также нужно передавать в двумерном массиве чтобы они дополнительно не обрабатывались, а нет там в любом случае обработка

    Уже убедился.
    А вот, случаем не тестировался модуль на больших объемах? Есть смысл использовать его если у меня от 1мл строк или не стоит заморачиваться?

  • @Sedoy, лучше использовать встроенную или SQL базу.

  • @GhostZ сегодня столкнулся с нежелательным преобразованием строки в число, строка "24.05", была преобразована в 24,05. Оказалось, что в модуле всем ячейкам присваивается числовой формат (cell.style("numberFormat", styles)), зачем?
    Пришлось ноду использовать.

  • @UserTrue, устанавливается "Общий" или "dd\.mm\.yyyy\ hh:mm:ss" если дата, это сделано чтобы ранее установленный формат не влиял на новое значение.

  • @UserTrue Например в ячейке раньше была дата, а при смене схемы таблицы там уже число, если не сменить формат то ексель будет воспринимать указанное число как дату (Так как дата это число с особым форматом), или было число, а ты указываешь текст и т.д

  • @GhostZ Пример кода модуля

    const util = require(\"../ExcelUtil\");
    var [file_path, sheet_index_or_name, data, sync] = [[XLSX_NODE_PARAMETERS]];
    var [data, styles] = data;
    data = util.format_data(data);
    
    var [file, exist] = await util.create_or_open_file(file_path, true, false);
    try{
        var workbook = file.workbook;
        var sheet = util.get_or_create_sheet(workbook, sheet_index_or_name, exist);
        var cell = sheet.cell(\"A1\");
        cell.value(data);
        cell.style(\"numberFormat\", styles);
        sync ? await util.save_file(workbook, file_path) : file.enableSave();
    \tfile.setTimeout();
    }catch(err){
        file.enableSaveError(err);
        file.setTimeout();
        throw err;
    };",```
  • @UserTrue, numberFormat это формат ячейки, например "@" - это текст, а "General"- это общий, подробнее тут.

  • @GhostZ said in Excel:

    @UserTrue, numberFormat это формат ячейки, например "@" - это текст, а "General"- это общий, подробнее тут.

    Ну я как бы знаю его и использовал за долго до появления модуля. И вот в модуле же стоит cell.style("numberFormat", styles); и происходит авто преобразование, как бы сомнительно решение решать за юзера, какой формат нужен