Вставить CSV в Excel и импортировать данные

Я написал инструмент, который извлекает данные из большого БД и выводит его в файл Excel вместе с (условным) форматированием для улучшения удобочитаемости. Для этого я использую Python с openpyxl на машине Linux. Он отлично работает, но этот пакет довольно медленный для написания Excel.

Кажется, что намного быстрее сбросить таблицу как сжатый csv, импортировать ее в Excel и применить там форматирование с помощью макроса / vba.

Чтобы автоматизировать процесс, я хотел бы создать пустой файл Excel, предварительно загруженный требуемым VBA для форматирования; шаблон. Для каждого дампа данных данные встраиваются (сжимаются с использованием дефляции) в файл Excel и загружаются в Рабочую книгу после открытия документа (или с помощью кнопки «LOAD», чтобы обойти связанные с макросом вещи безопасности).

Однако просто добавление некоторого файла в файл Excel приводит к ошибке при открытии:

Мы обнаружили проблему с некоторым контентом в «Werkmap1_test_embed.xlsx». Вы хотите, чтобы мы попытались восстановить как можно больше? Если вы доверяете источнику этой книги, нажмите «Да».

При нажатии кнопки « Yes открывается файл и отображается информация о трассировке как XML:

 <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <recoveryLog xmlns="http://schemas.openxmlformats.org/spreadsheetml/2006/main"> <logFileName>Repair Result to Werkmap1_OLE_Word0.xml</logFileName> <summary>Errors were detected in file '/Users/joostk/mnt/cluster/Werkmap1_OLE_Word.xlsx'</summary> <additionalInfo> <info>Excel completed file level validation and repair. Some parts of this workbook may have been repaired or discarded.</info> </additionalInfo> </recoveryLog> 

Можно ли это избежать? Как мне вставить файл в ZIP-файл Excel? Нужно ли мне обновлять некоторую таблицу файлов (которую я не мог легко записать).

Когда все будет сделано, я хочу импортировать данные. Могу ли я получить доступ к файлам в ZIP-архиве Excel из VBA? Наверное, нет, и мне нужно извлечь данные на какой-то временный путь и загрузить его оттуда.

Я нашел эти полезные ответы в другом месте для загрузки ZIP и обычного текста:

  • https://stackoverflow.com/a/35781621/4998990
  • https://stackoverflow.com/a/11267603/4998990

Большое спасибо за то, что поделились своими мыслями!

поэтому мой «Ответ» здесь заключается в том, что это вызвано использованием Named Ranges или базовой таблицы или встроенного Query / Connection. Когда вы начнете манипулировать этим файлом, вы получите сообщение об ошибке:

введите описание изображения здесь

Нет никакого вреда для файла, если вы нажмете «Да» и откройте. Excel откроет это в восстановленном режиме, что потребует повторного сохранения файла.

Способ, которым я работал, это перечитать «восстановленный» файл на python и сохранить его как другой файл или заменить его. По сути, просто сделайте дополнительный шаг для повторного чтения данных в память и запишите его в новый файл. Ошибка исчезнет. Как всегда, проверьте этот метод перед развертыванием на производство, чтобы не потерять записи. То, как я решаю это, – это две линии pandas .

 import pandas as pd repair = pd.read_excel('PATH_TO_REPAIR_FILE') new_file = repair.to_excel('PATH_TO_WHERE_NEW_FILE_GOES') 
  • Хранить и получать доступ к файлам в структуре пакета XLSM
  • Почему я получаю исключение «IOException: размер записи ZIP слишком велик» при попытке открыть файл Excel с помощью Apache POI?
  • Файл VBA для копирования .zip dificulty
  • vba копирование и замена файлов в zip-папке
  • Чтение файлов Excel xlsx в PHP без использования класса ZipArchive или расширения PHP php_zip
  • Программное усечение больших имен файлов (zipped) для разных выпусков Windows
  • R: импортировать выбранные xlsx из многих из одного ZIP-архива
  • Не удалось открыть файл excel в clojure - только записи DEFLATED могут иметь дескриптор EXT
  • «Записи zip-генераторов не зарегистрированы, выход папок отключен» при попытке использовать zexmlss
  • Apache Config Mime Types: файлы xlsx интерпретируются как zip-файлы при загрузке, почему?
  • Как защитить паролем файл ZIP на Java?
  • Давайте будем гением компьютера.