2017-11-29 14 views
0

大規模なDBからデータを抽出し、(条件付き)書式とともにExcelファイルに出力するツールを作成して、読みやすさを向上させました。このため私はopenpyxlでPythonをLinuxマシンで使用しています。それは素晴らしい作品ですが、このパッケージはExcelを書くにはかなり遅いです。ExcelにCSVを埋め込み、データをインポートする

(圧縮された)csvとしてテーブルをダンプし、Excelにインポートしてマクロ/ vbaを使用して書式を適用するほうがずっと速いようです。

プロセスを自動化するには、フォーマットを行うために必要なVBAがあらかじめロードされた空のExcelファイルを作成したいと思います。テンプレート。データをダンプするたびに、データは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> 

は、それがこの問題を回避することは可能ですか?ファイルをExcel ZIPにどのように埋め込むのですか?ファイルテーブルを更新する必要がありますか(簡単にファイルできませんでした)。

これが完了したら、データをインポートしたいと思います。 Excel ZIPのファイルにVBAからアクセスできますか?私はそうではないと思います。データを一時的なパスに抽出し、そこからロードする必要があります。

私は、ZIPやプレーンテキストをロードするために別の場所でこれらの有用な答えを発見した:

自分の考えを共有するための多くの感謝を!

+0

「Excelで判読できないコンテンツが見つかりました...」という完全なエラーは何ですか?第二に、あなたがExcelファイルを開くと、それは "回復"モードで開きますか?最後に、VBAコードは名前付き範囲を使用してデータの供給/書き込みを行っていますか? – MattR

+0

ありがとう@MattR。私は完全なエラーメッセージを含めました。私はOffice 2016 for Macを使用していますが、Office for Windowsでも動作する必要があります。私はまだVBAコードを書いていません。しかし、おそらく名前付き範囲を使用せずに、csvをテーブルとしてダンプするだけです。 –

答えて

0

私の "回答"は、これが名前付き範囲、または基礎となるテーブル、または埋め込みクエリ/接続を使用しているためです。あなたはこのファイルを操作する起動すると、あなたが話しているエラーが発生します:あなたは「はい」をクリックして開いた場合

enter image description here

がファイルに害はありません。 Excelはこれを修復モードで開き、ファイルを再保存する必要があります。

私がこれを回避する方法は、「修正済み」ファイルをPythonで再読み込みし、別のファイルとして保存するか置き換えることです。 本質的にはは、データをメモリに再読み込みして新しいファイルに書き込むという余計な手順を実行するだけです。エラーは消えます。いつものように、レコードが失われていないことを保証するために、運用に展開する前にこのメソッドをテストしてください。私が解決する方法は、pandasという2つの行です。

import pandas as pd 
repair = pd.read_excel('PATH_TO_REPAIR_FILE') 
new_file = repair.to_excel('PATH_TO_WHERE_NEW_FILE_GOES') 
+0

もう一度@MattRに感謝します。残念ながら、これは機能しませんでした。外部のZIPプログラムを使用してExcelアーカイブに追加されたCSVにデータを格納したいからです。 openpyxlはこれらの追加ファイルを考慮しないため、pandas(偉大なパッケージbtw)を使用してExcelデータだけを読み書きすると、埋め込みCSVが失われます。私はこれを啓発するために私の質問を更新します。 –

関連する問題