お疲れ様です。堺です。
マクロやClosedXML、EPPlus(C#でエクセル操作するライブラリ)などで処理して保存したエクセルファイルを開くと、「'XXXX.xlsx'の一部の内容に問題が見つかりました。」というエラーメッセージが出るトラブルについて、原因と対処法を紹介します。
◇目次
原因:XMLの構成がエクセルのルールを逸脱している場合に発生
Office2007以降のエクセルファイル(xlsx形式)はXML形式の集合体として構成されており、XMLの内容を解読してエクセルUIとして描写されています。ClosedXML等のライブラリはこのXMLを操作するAPI群と言えます。
本件のエラーは、エクセルのルールにそぐわない内容を、ClosedXML等を通じてXMLに書き込んでしまうことにより発生します。「ルールにそぐわない内容」とは例えば「正しくない式をセルに記入する」、「1048577行以降の行・XFD列以降の列に属するセルに値を書き込む」といった内容が挙げられます。以下詳細解説します。
原因例①:不完全な式をセルに入れてしまっている
例えば、以下の例のように不完全な式(カッコが閉じていない)をセルに入れて保存してしまうと、エクセルで開くときに標題のエラーが表示されます。
C#
using var wb = new XLWorkbook(@"C:\Users\sakai\Desktop\Book1.xlsx");
var ws = wb.Worksheets.First();
//不完全な式を入れてしまっている(IF関数のカッコが閉じていない)
ws.Cell(1, 1).SetFormulaA1("=IF(A1=A2,1,0");
wb.Save();
この場合、「はい」を選択すると不完全な式が入っている箇所は空きセルに変更された後にワークブックが開きます。
セル数が多いとどこが破損しているか大変ですが、式が消えている箇所を見つけて、そのセルを操作しているC#コードを修正しに行きましょう。
原因例②:値を入れる範囲が1048576×16383を超過している
エクセルファイルで表示可能な範囲1048576×16383、XFD1048576セルよりも下・右に値を入れている場合もこのメッセージが表示されます。
内部のXMLとしては書き込み可能ですが、エクセルのUIでは表示できないので切り捨てられます。
ClosedXMLやEPPlusのエクセルファイル操作については、別途記事を作成しています。
APIの使い方を網羅的に紹介しています。是非ご参考ください。
記事筆者へのお問い合わせ、仕事のご依頼
当社では、IT活用をはじめ、業務効率化やM&A、管理会計など幅広い分野でコンサルティング事業・IT開発事業を行っております。
この記事をご覧になり、もし相談してみたい点などがあれば、ぜひ問い合わせフォームまでご連絡ください。
皆様のご投稿をお待ちしております。