Цитата |
---|
Михаил Нарвич написал: потом увидел, что тема "архивная" |
Владимир
01.05.2025 19:45:44
Владимир
|
|||
|
01.05.2025 18:39:38
К словам Михаила добавлю, что ONLYOFFICE - продукт с открытым исходным кодом (как и LibreOffice) и при очень большом желании (
![]()
Владимир
|
|
|
01.05.2025 17:04:44
Поскольку наш форум обычно отвечает (почти) на все вопросы, то вот ключ к разгадке вопроса о загадочном поведении методов GetValue и SetValue.
Откройте новый документ в P7 или ONLYOFFICE (у меня версия 8.3.3.21) с языком интерфейса "Русский" и занесите в ячейку A1 число 1,2 (или другое дробное). Выполните макрос (JS):
У меня в ячейке A2 появляется дата 1 февраля 2025 года с соответствующим форматом ячейки. Это говорит о следующем (в P7 могут быть другие результаты - проверьте): 1. Метод getRange возврашает строку (string) и для ячеек, содержащих число. Если эта ячейка содержит число, то число преобразуется в текст в соответствии с правилами JS (без учета настроек локали). 2. Метод setRange интерпретирует текст при занесении в ячейку в соответствии с настройками локали.
Изменено:
Владимир
|
|||
|
23.04.2025 17:50:38
Я думаю, что попытка за 0,66 сек 100 раз обновить буфер обмена является непростой задачей для MS Windows (да еще с учетом того, что может быть включено журналирование изменений буфера обмена). Можно добавить после обновлений буфера обмена вызов функции DoEvents, что повысит стабильность, но замедлит время выполнения.
Владимир
|
|
|
23.04.2025 16:38:27
После сохранения в формате .xlsm (который можно анализировать) у меня (Excel 2016 Win 10) Ваши тесты выдают (стабильно) результаты такого порядка:(округлено до 2 знаков после запятой):
test1: 0.42 test2: 0,66 test3: 0,64 test4: 0,01 Остаюсь при своих рекомендациях. P.S. У Вас макрос находится в модуле листа (а не стандартном модуле), так что не запускайте его кнопкой. P.P.S. После команды PasteSpecial, если буфер обмена больше не нужен, лучше добавить строку:
Изменено:
Владимир
|
|||
|
23.04.2025 12:41:43
Спасибо за подготовленный пример.
Методы 2-3 100 раз копируют информацию в буфер обмена и вставляют информацию из буфера обмена. В эффективных программах необходимо минимизировать количество таких операций. Общее замечание - следует минимизировать число взаимодействий между VBA и Excel. Копирование диапазона ячеек во много раз быстрее, чем копирование каждой ячейки этого же диапазона по отдельности.
Изменено:
Владимир
|
|
|
03.04.2025 16:49:26
Совет для читателей темы: никогда не используйте Application.Transpose (если только Вы не разработчик Excel и не видели исходного кода программы). ![]() Поясню (упрощенно) суть вышеуказанного эффекта в макросе из стартового сообщения. После цикла форматирования массива arr элементами массива являются переменные типа Variant подтипа Date. Поскольку такого типа данных для ячеек Excel не существует (в Excel датам соответствуют числа), то метод Application.Transpose преобразует эти даты в текст (в соответствии с локальными настройками). При
Изменено:
Владимир
|
|||
|
31.03.2025 17:28:41
Должна понимать все варианты для непустого Selection (ячейка, диапазон, несколько диапазонов).
Владимир
|
|||||
|
28.03.2025 15:18:20
Excel 2016 и 2019 не работает с "длинными" путями (без трюков с префиксами), более новых версий у меня нет, но, учитывая желание Microsoft сохранять преемственность ошибок...
Владимир
|
|||||
|
24.03.2025 16:18:32
Изменено:
Владимир
|
|||
|
07.03.2025 14:21:10
На листе "ИД" выделяются все строки по 65536. 2. На листе "ИД" выделите интервал строк (полных) 27-65536 и удалите эти строки. Сохраните файл. У меня размер файла уменьшается до 44K.
Владимир
|
|||
|
25.02.2025 20:29:06
В файле - шаблоне используются две группы элементов управления "Переключатели". Выбранное значение первой группы заносится в скрытую ячейку W32, второй группы - в скрытую ячейку X32. По-видимому, далее значения скрытых ячеек обрабатываются при сборе информации.
В LibreOffice эта конструкция с переключателями не работает. Можно предложить использовать выбор элемента из списка (ячейки C32 и K32 в приложенном файле). При этом значения скрытых ячеек W32 и X32 должны формироваться правильно. Прилагаемый файл предназначен для Excel и LibreOffice. В LibreOffice после заполнения файл следует сохранить в том же формате (.xlsm). Разумеется, над дизайном можно еще поработать.
Владимир
|
|
|
24.02.2025 19:59:01
Шаблон для файла иванова.ods был изначально разработан в Excel, затем заполнен в LibreOffice Calc и сохранен в формате .ods.
Нужно посмотреть исходный шаблон (.xlsm или .xltm), возможно ли его заполнить в Calc и сохранить в исходном формате (.xlsm). Как указано выше, создание таких шаблонов требует определенной квалификации.
Изменено:
Владимир
|
|
|
24.02.2025 18:33:52
Два варианта для подготовки исходного шаблона Оценочной формы. 1. Та часть сотрудников, которая работает в Excel, готовит Оценочную форму в формате .xlsm (см. мое сообщение выше). 2. Оценочная форма готовится в LibreOffice и сохраняется в формате .xlsx (макросы, которые "понимает" Excel, Вы все равно не сможете написать). Шаблоны форм смогут заполняться как в Excel (MS Windows), так и в LibreOffice Calc (AstraLinux или MS Windows). Третий вариант - делать разные шаблоны для заполнения в Excel (в формате .xlsm) и в Calc (.ods). Этото вариант более трудоемкий, но предоставляет больше возможностей.
Изменено:
Владимир
|
|||||
|
24.02.2025 16:42:16
LibreOffice корректно работает с данными в этом формате. Что касается пользовательских форм и макросов, то от разработчика требуется определенная квалификация. Примеры не смотрел.
Владимир
|
|||
|