Worksheet.rangeメソッドでHRESULT:0x800A03ECを取得しています。行数が70Kを超えています。 Office 2007。
コード:
Microsoft.Office.Interop.Excel.Range neededRange
= currentWS.Range[cell.Cells[1, 1], cell.Cells[nRowCount, nColumnCount]];
ここで、私の行数は65530以上です。この機能を中断します。行数が65530を超えた場合にのみ破損することを確認しました。
この問題は、.xlsxの代わりに下位互換性のあるシート(.xls)を使用している場合に発生します
プレオフィス2007バージョンでシートを開くことができるようにするために、65,000行を超える行を含めることはできません。シートの行数を確認するには、ctrl + arrowdownを使用して、一番下に達するまで続けます。その行数よりも大きい範囲を取得しようとすると、エラーが発生します
私たちは同じものを受け取っていました。例外は
Stacktrace:at Microsoft.Office.Interop.Excel._Workbook.SaveAs(Object Filename、Object FileFormat、Object Password、Object WriteResPassword、Object ReadOnlyRecommended、Object CreateBackup、XlSaveAsAccessMode AccessMode、Object ConflictResolution、Object AddToMru、Object TextCodepage、Object Text VisualLayout、Objectローカル) `
内部の例外を除いて
HRESULTからの例外:0x800A03EC 2012-11-01 10:37:59`
this post からの情報で問題を解決することができました。便宜上ここに引用しています...
この問題が発生しました。
私のコードのどこかで、0からカウントするように求めていたことを発見しました(C#コードのように)。
Excelのカウントが1から始まることがわかります。
上記のさまざまな応答を見て、自分の最近の経験に基づいて(このエラーコードはまったく関係のないことをしていたので、設定Application.Calculation
)複数の無関係な問題を示すために同じエラーコードが使用されていると結論付けます。 @Garrehの場合、おそらく新しい質問をしているはずです(エラーコードだけに基づいて誰もが支援できるわけではありません)。私は、C#のWord相互運用で動作する同じことを見てきました。ほとんどの種類のエラーに同じHRESULT
が使用されているようです。コードが何を意味するのかについて、満足できるマイクロソフトのドキュメントを見つけたことがありません。
これは、保存先のパーティションに空きがない場合にも発生する可能性があります。
私は自分のHDをチェックし、最大になったのを見つけました。不要なファイルを別のパーティションに移動すると、問題が解決しました。
単純に、Excelファイルが破損しています。最善の解決策は、ファイルを変更/修復することです(既存のファイルのコピーを作成し、名前を変更します)。
この回答 に返信/承認できないため、ここに投稿します。
実際、ある範囲から別の範囲にデータを移動するときのソース/デスティネーション範囲のフォーマットもこのエラーを引き起こす可能性があります。
私の場合、コピーしたい範囲には日付形式の列が含まれていて、列には無効な日付値を持つセルが1つ含まれていました(値が負の整数であるため、形式さえありませんでした)。そのため、2つの範囲間のコピー操作は、このセルで停止し、ここで説明したエラーメッセージが表示されました。
私の場合の解決策は、Range.Valueの代わりにRange.Value2を使用することでした。日付(詳細 ここ )。ただし、これにより、日付と時刻の列が整数と小数として表示されるようにレンダリングされます。ただし、Range/Column/Cell.NumberFormatプロパティを適切に設定することにより、日付と時刻の値がどこにあるかがわかっている場合は、形式を目的の形式に変更できます。
これは質問に直接答えているわけではありませんが、xlsxファイルを開くときにこのエラーが発生していました。問題は、ファイルパスでスラッシュを使用していたことです。 https://stackoverflow.com/a/24635904/59320 も参照してください。以前のバージョンのExcelでは機能していましたが、バージョン1711(ビルド8730.2127)では機能しませんでした。
IDispatch-> Invoke(...、EXCEPINFO、...)を使用して問題を診断できました。 EXCEPINFOオブジェクトには、何がうまくいかなかったかの有用な説明が含まれていました。私はC++の土地にいましたが、これに似たC#コードSO postがトリックを行うと思います: C#のパラメーターを使用したIDispatch呼び出し(DISPPARAMSを使用) 。
ちなみに、行スタイルを適用しようとするとエラーが発生しました。
wSheet.Rows(y).Style = System.Drawing.ColorTranslator.ToOle(System.Drawing.Color.Red)
VS 2017で.Netアプリケーション内に作成されたExcelファイルを保存しようとしたときに、このエラーコード0x800A03ECを受け取りました。Excel.ApplicationオブジェクトプロパティVisible = Trueを変更し、失敗するまで実行させました。 Excelで手動で手順を完了しようとしましたが、フォルダーのアクセス許可がないためにファイルを保存できないことがわかりました。フォルダーに書き込みアクセス許可を追加すると、エラーはなくなりました。
私は問題を理解していません。しかし、ここに私の問題を解決したものがあります。
[Excelオプション]> [保存]> [この形式でファイルを保存]に移動し、[Excelワークブック(* .xlsx)]を選択します。以前、私のWorkBookは[互換モード]で開いていましたが、現在は通常モードで開いています。範囲関数はそれでうまく機能します。
Range.Valueにセルの配列を割り当てようとしたときに、正確なコードでエラーが発生しました。私の場合、間違ったデータ形式の問題でした。セルのデータ形式はDATEに設定されていましたが、ユーザーがエラーを犯し、「20.02.2013」の代わりに日付「20.02.0213」を入力しました。 ExcelのCOMオブジェクトは '0213'年の取得を拒否し、このエラーで例外をスローしました。
Hugh Wの投稿に同意します。「同じエラーコードが複数の無関係な問題を示すために使用されていると結論します」
他の投稿は、ワークシートがロックされている場合にこのエラーが頻繁に発生することについて言及していません。すべてのシナリオをテストしたわけではありませんが、ワークシートがロックされているときにVSTO/Com経由でワークシートをロックしようとすると、ワークシートがロックされているときにExcelでできないことはすべてこのエラーをスローするようです。例えば。スタイルアーティファクト(フォント、フォントサイズ、色、下線)の変更、Excel検証の変更、列幅、行の高さ、数式の変更
文字が多すぎるシートの名前を変更しようとしたため、このエラーが発生しました
このように思える私はあなたが試みた操作で「何かがうまくいかなかった」ためのかなり一般的なエラーです。数式エラーがあり、その数式をセルに割り当てている場合にも発生することを確認しました。例えば。 「= fubar()」
以下のコードを使用して、この問題を解決しました。これらの関数では他のパラメーターを使用しないでください。
mWorkBook = xlApp.Workbooks.Open(FilePath)
mWorkBook.Save();
[〜#〜] resolved [〜#〜]
編集:これはIS WAY BETTER !!!その古い関数は必要ありません、ごめんなさい。次のようにしてください:
Microsoft.Office.Interop.Excel.Range neededRange = currentWS.Range["A1", ((Microsoft.Office.Interop.Excel.Range)currentWS.Cells[nRowCount, nColumnCount])];
それは魅力のように動作するはずです。また、今後の参考のために、使用している関連コードを質問の中に入れてください。コメントでそれを人々に尋ねさせないでください。それがあなたが投票された理由だと思います。
次のステートメントを実行すると、同じエラーコードが表示されました。
sheet.QueryTables.Add("TEXT" & Path.GetFullPath(fileName), "1:1", Type.Missing)
その理由は、「TEXT」の後に欠落しているsemicolon(;)でした。
これが正しいものです:
sheet.QueryTables.Add("TEXT;" & Path.GetFullPath(fileName), "1:1", Type.Missing)
同じ例外を持っている私のような他の人のために:
また、Missing.Value(またはType.Missing)の代わりにnull値を渡そうとした場合にも発生する可能性があります
例えば.
Worksheet worksheet = ...;
return worksheet.Range["A1", null]; //This call generates the error 0x800A03EC
return worksheet.Range["A1", Missing.Value]; //This works correctly
次のように入力したため、この例外が発生しました。
ws.get_Range("K:K").EntireColumn.AutoFit();
ws.get_Range("N:N").EntireColumn.AutoFit();
ws.get_Range("0:0").EntireColumn.AutoFit();
間違いがありますか?ヒント:Excelは1からのインデックス付けを受け入れますが、C#のように0からのインデックス付けは受け入れません。
このタイプのエラーは、Excelシートを開こうとしたときに、エラーメッセージが表示された場合にも発生します。単に、Excelファイルが破損したときに言うことができます。
プロジェクトの内容をExcelファイルにエクスポートするアプリケーションを開発していたときにも、同じ問題に直面しました。
私の問題のフォーラムで解決策を見つけることができませんでした。次に、Excelの最大容量を確認し、以下のリンクを見つけました
「ワークシートのサイズは1,048,576行x 16,384列」で、これが私の場合の問題でした。私はその行より多くエクスポートしていました。詳細については、以下のリンクを参照してください
よろしくPrashant Neve