Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

Форум поддержки пользователей. LibreOffice, Apache OpenOffice, OpenOffice.org

21 Сентябрь 2020, 17:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
Новости: Часто задаваемые вопросы по LibreOffice и Apache OpenOffice.org
 
   Начало   Помощь Поиск Войти Регистрация    задать вопрос  
Страниц: 1 2 »   Вниз
  Печать  
Автор Тема: Экспорт таблицы из Excel в LibreOffice  (Прочитано 1566 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Fiona
Форумчанин
***
Offline Offline

Сообщений: 73


« Стартовое сообщение: 29 Май 2020, 10:32 »

Всем доброго времени суток!

Помогите, пожалуйста... Может кто-то сталкивался с подобной проблемой?
Файл xlsm при открытии в LO удивительным образом сохраняет все кнопки управления, обработчики событий - но после первого запуска макроса таблице словно память отшибает: кнопки не действуют, пока явно не назначишь макрос, ячейки листа не идентифицируются, макросы на событие листа не вызываются.
В чем корень зла?
Записан
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 3 036



« Ответ #1: 29 Май 2020, 10:41 »

В том, что ЛибреОфис - это НЕ МСОфис. Если цель - обработать XLSM в Либре, а затем сохранить в этот же формат и потом работать с ним в Экселе, то это работать не будет
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
Fiona
Форумчанин
***
Offline Offline

Сообщений: 73


« Ответ #2: 29 Май 2020, 11:22 »

Цель - оценка возможности перехода на LO. Файл сохранен в формате LO,  но отрабатывает только один раз.
Записан
kompilainenn
Мастер
*****
Offline Offline

Сообщений: 3 036



« Ответ #3: 29 Май 2020, 13:08 »

Тогда нужно смотреть файл и немного его доработать. В том числе сами макросы, поскольку Либра макросы VBA понимает, но далеко не до конца
Записан

Поддержать разработчиков LibreOffice можно тут, а наш форум вот тут
Fiona
Форумчанин
***
Offline Offline

Сообщений: 73


« Ответ #4: 29 Май 2020, 15:09 »

Это понятно:) без доработки макрос  бы и не запустился. Вопрос, почему кнопки управления перестают работать? Как они, после сохранения в ods, определяют событие кнопки, а потом перестают определять это событие после выполнения макроса? В настройках ничего интересного на эту тему не нашла...
Записан
Fiona
Форумчанин
***
Offline Offline

Сообщений: 73


« Ответ #5: 10 Июнь 2020, 09:22 »

Добрый день!
Решила к этой теме вернуться... Не могу найти ни на форуме, ни у Питоньяка. Через запись макроса инициируется добавление области в табличке InsertColumnsBefore средствами dispatcher, а как это в макросе прописать не для thisComponent, а для загруженного из thisComponent файла? Причем, с сохранением форматов и формул...  В замешательстве Помогите, пожалуйста, может есть наработки. Есть нечто похожее для строки, но там копирование в пустую область, а мне нужно раздвинуть колонки, чтобы адаптировать загружаемый файл к новому шаблону.
Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 158


WWW
« Ответ #6: 10 Июнь 2020, 13:25 »

В дополнение и закрепление материала книги А.Питоньяка можно использовать краткое руководство . Там есть и про вставку столбцов (со сдвигом вправо). Диспетчером лучше не пользоваться, если есть "прямой" путь.
Можно для вставки столбцов  также использовать метод insertCells интерфейса XCellRangeMovement. Второй параметр этого метода должен соответствовать COLUMN (4) в перечислении CellInsertMode.
Записан

Владимир.
Fiona
Форумчанин
***
Offline Offline

Сообщений: 73


« Ответ #7: 15 Июнь 2020, 12:05 »

Спасибо, все получилось.
Записан
Fiona
Форумчанин
***
Offline Offline

Сообщений: 73


« Ответ #8: 20 Август 2020, 05:58 »

Здравствуйте!
Наконец, благодаря Вашей коллективной помощи, все работает. Единственно, с увеличением объема импортируемого файла, возникает проблема быстродействия. Когда загружаемый xlsm порядка 3 mb, разница во времени загрузки по сравнению с excel не критична, пара минут. А при загрузке файла размером в 11 mb  время загрузки в разы больше, чем в excel. Почитала, что раньше была в настройках вкладка Память, теперь ее нет. Но конкретно на моем ноуте с аппаратным ускорением вообще проблемы (не могла открыть 7 офис, пока не отключила эту опцию). К вопросу об использовании python начальство отнеслось насторожено. Но может ли этот функционал или что-то иное ускорить копирование листа в 5 тысяч строк? Речь не идет об обработки базы данных (бухи параллельно с базой данных ведут учет в excel для консолидированной отчетности). В течение года шаблон меняется, чтобы не вводить данные в новый шаблон заново используется импорт данных из уже заполненной  таблицы в 120 листов (с учетом возможных изменений структуры - соответственно, просто скопировать лист нет возможности, копируются только заполненные незащищенные ячейки). Помогите, пожалуйста, дайте идею - у Вас это замечательно получается Улыбка
Записан
economist
Форумчанин
***
Offline Offline

Сообщений: 1 262


« Ответ #9: 20 Август 2020, 10:29 »

Для правильных идей мало вводных.

Если переходить на LO Calс - так переходить, т.е. истребить формат XLSM в принципе. Но сначала нужно попробовать на АРМ начальников, кто "останется с Excel" - открыть на их машинах ODS-файл и поработать в нем. Если им не зайдет ODS в Excel (глюки итп) - пиши пропало.

Быстро читать XLS/ODS можно по разному, вот в порядке убывания скорости (Win7):

Без пересчета ячеек
- Python + Pandas
- MS ADO (OLE DB)
- Python + opynpyxl
- LO Base, подключенное к XLS
- LO Base, подключенное к ODBC MS Excel Driver

С пересчетом ячеек
- MS Excel
- LO Calc

Если XLS 10 Мб, значит в нем 20k строк и 50 столбцов. Это уже объемы для SQL-баз данных. Либо можно хранить данные в (одном/нескольких) CSV или одном SQLite-файле, а Excel/Calc/BASE/Python+Pandas - просто их "отображать", выполнять запросы, делать отчеты и дополнять.

Для начала - сохраните ваш 120-страничный XLS в TXT, с разделителем табуляция, безо всяких допоопций типа кавычек, кодировку - win, не utf-8. И дальше в пустом Calc Лист - Вставить лист... - из файла - Связь. Данные можно "слегка" отформатировать. Попробуйте пооткрывать этот файл по сети LAN (не wifi), с разных машин, оцените скорость открытия. Если она устраивает - идем дальше.

Но если нужно, грубо говоря, вашу ежедневную выгрузку в XLS/TXT из 1С/итп максимально быстро обрабатывать (чистить, заменять) и потом делать запросы/группировки/суммировать - то для себя определил 3 самых быстрых способа, все на базе свободного ПО:

1) Python + Pandas в JupyterLab, в браузере. Пример - одна таблица бухпроводок 3,5 млн строк на 50 столбцов (20 лет, 100 млрд. выручки). Загружается сначала из CSV, а потом - из более быстрых колоночных хранилищ (PKL, Parquet, hd5 итд) - вся целиком в RAM (занимает там 5GB) на PC i5/8GB RAM/HDD - за 5 секунд. Любой сложный запрос с группировкой и суммированием ~15% строк - за 1 секунду. Всё что проще - мгновенно. Ничего быстрее нет и быть не может.  

2) LO Base Base/Calc/Writer + ODBC/JDBC SQlite - самый быстрая однофайловая база данных, сродни MSAccess. Та же таблица. Открывается мгновенно. Тот же сложный запрос - за 5 секунд. Вполне всё можно настроить самому, без прав админа. Если часто обращаться к файлу по сети (3-5 человек) - скорость запроса падает до 10-15 секунд, возникают таймауты на 5 сек. при записи кем-то. При чтении - таймаутов нет, но падает скорость до 10 сек.

3) LO Base/Calc/Writer + FireBird Server/MySQL/PosrtgreSQL. Та же таблица. Открывается мгновенно. Тот же сложный запрос - за 10 секунд. Очень хорошо масштабируется на несколько десятков и сотен аналитиков. Требует выделенного сервера и его админства.
« Последнее редактирование: 20 Август 2020, 10:33 от economist » Записан

Руб. за сто, что Питоньяк
Любит водку и коньяк!
Потому что мне, без оных, -
Не понять его никак...
mikekaganski
Гуру
*******
Offline Offline

Пол: Мужской
Расположение: Хабаровск -> Москва
Сообщений: 2 043


« Ответ #10: 20 Август 2020, 10:33 »

Обратите внимание, что Calc достаточно быстро работает с большими объёмами данных, если они однородные. "Однородные" значит, что в массиве данных нет пустых строк или строк с другим типом данных ("подзаголовков", скажем). Как только появляются такие вставки, Calc начинает тормозить.
Записан

С уважением,
Михаил Каганский
Fiona
Форумчанин
***
Offline Offline

Сообщений: 73


« Ответ #11: 20 Август 2020, 10:58 »

Спасибо, этого более чем достаточно для размышления
Записан
sokol92
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 158


WWW
« Ответ #12: 20 Август 2020, 13:42 »

Здравствуйте, Fiona (к сожалению, не знаю имени)!

1. О времени открытия файла.
Файл ФСД (образца 2016 года) формата .xlsm объемом в 20 MB у меня открывается в Excel 2016 (32-) 20 сек. В Calc - 1 мин 25 сек. Так и должно быть, поскольку .xlsm - не родной формат для Calc.
Если тот же файл сохранить в Calc в формате .ods и заново открыть, то (судя по слайдеру) он открывается 15 сек. и еще 45 секунд уходит на подбор высоты строк, с чем, очевидно, можно побороться (сделать так, чтобы при открытии подбор высоты не происходил).

2. О копировании данных.
Скорости копирования диапазонов ячеек в Excel и Calc сопоставимы. Попробуйте, например, скопировать в Calc в другой документ вручную через буфер обмена заполненный диапазон в 5 000 строк и 50 столбцов. Время работы макроса (после детального изучения UNO-объектов  Улыбка) будет не хуже.

Если речь идет о переносе данных из одной версии бланка ФСД в другую, то точно в LO можно сделать не медленнее, поскольку макросы бланка в Excel (сужу по 2016 году) далеко не оптимальны.

3. О Basic. Обсуждать замену языка на данном этапе явно преждевременно, поскольку текущие "тормоза" с Basic не связаны (а связаны с освоением достаточно сложной объектной модели LO).

На всякий случай, характеристики моего компьютера: Intel(R) Core(TM) i5-8400 CPU @ 2.80GHz 2.81 GHz, ОП 16 ГБ, Windows 10 Pro.
Записан

Владимир.
eeigor
Ubuntu 18.04 LTS
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 109


« Ответ #13: 18 Сентябрь 2020, 00:09 »

можно использовать краткое руководство
Зд. есть одна ошибка на странице 2:
Access to ranges
Randomly (ex third sheet)
Ran = ThisComponent.Sheets.getCellRangeByPosition(2, 2, 1, 6, 13)  '(2, 1, 6, 13, 2)  - аргумент "Номер листа" идет последним
« Последнее редактирование: 18 Сентябрь 2020, 00:11 от eeigor » Записан
eeigor
Ubuntu 18.04 LTS
Форумчанин
***
Offline Offline

Пол: Мужской
Сообщений: 109


« Ответ #14: 18 Сентябрь 2020, 00:21 »

сделать так, чтобы при открытии подбор высоты не происходил
sokol92, а как это сделать? (Ответ #12)
Записан
Страниц: 1 2 »   Вверх
  Печать  
 
Перейти в:  

Powered by MySQL Powered by PHP Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines Valid XHTML 1.0! Valid CSS!