2015-09-24 14 views
5

EPPlus v3.1.3を使用して一連のExcelワークブックを作成しています。新しく作成したファイルを開くと、何も触らずに閉じると、変更を保存するかどうか尋ねられます。 「はい」と言えば、私が気付いた唯一の変化は、app.xmlファイルが少し変更されていることです。ワークブックに目に見える違いはなく、残りのXMLファイルは同じです。EPPlusで作成されたファイルの変更を保存するように要求しました

ExcelPackage p = new ExcelPackage(new FileInfo(filename)); 
p.Save(); 

など

ExcelPackage p = new ExcelPackage(); 
p.SaveAs(new FileInfo(filename)); 

との両方に同じ問題を抱えている:私は、これらのアプローチの両方を試してみました。 app.xmlファイルを最終形式で出力する方法はありますか?

SASプログラムを使用して、EPPlusプログラムから直接出力されたファイルをSASプログラムが開くと、そのファイルがそれらの式。それが開かれ、 "はい"が "変更を保存しますか"のために選択されている場合、正常に動作します。しかし、これらのうち数百を作成しているので、それは実用的ではありません。

また、テンプレートを使用しています。テンプレートは正常に表示されます。

私たちはこのシステムを1年以上使用してきたことがありますが、この問題が発生したのは初めてです。

これを回避する手段はありますか? C#側かSAS側か?

+0

Excelで数式計算を誤ってオフにしましたか?これが別のマシンの問題であるかどうかを確認できますか? –

+0

数式の計算がオンで、保護されたビューが無効です。私は2つの異なるマシンで試しました。 – yammerade

答えて

2

あなたが見ているのは、実際には珍しいことではありません。 Epplusは実際には完全なXLSXファイルを生成するのではなく、生のXMLコンテンツ(すべてのOffice 2007ドキュメント形式はXMLベース)を作成し、XLSXに名前が変更されたzipファイルに配置します。それはExcelエンジンを介して実行されていないので、それは完全に好きに優れてフォーマットされていません。

単純なデータシートの場合、Excelは多くの計算を行う必要はなく、基本的な書式設定だけです。その場合、保存するように求めるメッセージは表示されません。しかし、それでもあなたがすれば、それはXLSXファイルを少し変更することがわかります。実際に何が舞台裏でやっているのかを見たい場合は、ファイルの名前を.zipに変更し、前と後のxmlファイルを見てください。

実行している問題は、単なるテーブルエクスポートではないため、初めてExcelを開くときに計算を実行する必要があるためです。これは、数式、オートフィルタ、オートコラム/ロウの高さ調整、アウトラインなど、多くのものがあります。基本的に、シートが見た目に少し変わったように見えるものは、Excelで完成します。

残念ながら、これは簡単には解決できません。エクセルのDOMを使って実行すると、EPPlusを使用する目的を克服することができます。あなたが行うことができるもう一つのことは、XMLファイルの前後の違いを見ることです(そこには束があります)。そして、 "後"のファイルバージョンではExcelが何を変更/追加するかを模倣します。手動でXMLコンテンツを編集します。これは、変更の程度に応じて非常にきれいなオプションではありません。あなたは、私がここで他の状況でそれを行っているかを確認することができます

Create Pivot Table Filters With EPPLUS

Adding a specific autofilter on a column

Set Gridline Color Using EPPlus?

+0

ありがとうございます。私はこれが答えになると考えましたが、より簡単な回避策があることを期待していました。私はQCシステムを爆破しないために、すべての計算をExcelから移動するだけだと思います。 – yammerade

+0

@LisaMcCusker私が言いたいことを忘れたもう一つの選択肢はVBAです。問題のあるロジックを、シートがExcelで最初に開き、その後VBAなしで再起動するマクロに移動できます。また、それについて行く最もクリーンな方法ではなく、私はそれを言及するだろうと思った。こちらをご覧ください:http://stackoverflow.com/questions/26734787/epplus-pivot-table-copy-values-to-new-sheet/26736549#26736549 – Ernie

1

私はEPPlus(バージョン4.1を使用してこの同じ問題に遭遇しました。0、fyi)、問題を修正する前に次のコードを追加すると見つかりました:

p.Workbook.Calculate(); 
p.Workbook.FullCalcOnLoad = false; 
関連する問題