76

次のコードで Excel アドインを実行すると、"HRESULT: 0x800A03EC" エラーが発生します。

Excel.Range rng = ActiveSheet.Cells[x, y] as Excel.Range;                
string before = rng.Value2; 
string cleanV = System.Text.RegularExpressions.Regex.Replace(before, @"\s+", "");
rng.set_Value(cleanV);

エラーが発生した場合、X と Y は 1 に設定されるため、Excel の範囲は違反されません。私は広範囲に検索し、セル値を設定するいくつかの方法(例:Cells [x、y]、range.set_Value())を試しましたが、このエラーが発生する理由と回避方法がわかりません。

どんな助けでも大歓迎です。

例外の詳細は次のとおりです。


System.Runtime.InteropServices.COMException was unhandled by user code
  HResult=-2146827284
  Message=Exception from HRESULT: 0x800A03EC
  Source=""
  ErrorCode=-2146827284
  StackTrace:
       at System.RuntimeType.ForwardCallToInvokeMember(String memberName, BindingFlags flags, Object target, Int32[] aWrapperTypes, MessageData& msgData)
       at Microsoft.Office.Interop.Excel.Range.set_Value(Object RangeValueDataType, Object value)
       at ImportValidation.ThisAddIn.removeAnySpaces(Int32 x, Int32 y) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 354
       at ImportValidation.ThisAddIn.ReadHeaders(Hashtable columnAddress) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 123
       at ImportValidation.ThisAddIn.mapColumns() in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\ThisAddIn.cs:line 493
       at ImportValidation.Ribbon1.button6_Click(Object sender, RibbonControlEventArgs e) in c:\Users\dshevelev\Documents\Visual Studio 2012\Projects\ImportValidation\ImportValidation\Ribbon1.cs:line 55
       at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ControlActionRaise(IRibbonControl control)
       at Microsoft.Office.Tools.Ribbon.RibbonPropertyStorage.ButtonClickCallback(RibbonComponentImpl component, Object[] args)
       at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.Invoke(RibbonComponentCallback callback, Object[] args)
       at Microsoft.Office.Tools.Ribbon.RibbonMethodInfo.Invoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture)
       at Microsoft.Office.Tools.Ribbon.RibbonManagerImpl.System.Reflection.IReflect.InvokeMember(String name, BindingFlags invokeAttr, Binder binder, Object target, Object[] args, ParameterModifier[] modifiers, CultureInfo culture, String[] namedParameters)
  InnerException: 
4

16 に答える 16

117

この行で同じエラーが発生しました

 Object temp = range.Cells[i][0].Value;

非ゼロベースのインデックスで解決

 Object temp = range.Cells[i][1].Value;

このライブラリを作成した担当者が、ゼロ以外のインデックスを使用することをお勧めします。

于 2013-01-16T17:54:27.667 に答える
20

これは一般的ですが、あまり文書化されていない Excel COM エラーです。これは、Excel の COM レイヤーが無効になっており、COM プロパティまたはメソッド名が見つからないことを意味します。

Excel が「ビジー」であるときに COM コードを実行すると、このエラーが一貫して発生します。常にこのエラーが発生します。このエラーは、コードがメインの Excel スレッドで実行されている場合にのみ発生しますが、Excel が「ビジー」であるときに別のスレッドから Excel COM オブジェクト モデルを呼び出したときに発生するエラー VBA_E_IGNORE = 0x800AC472 と同等のようです。

唯一の回避策は、COM 呼び出しが成功するまで (少し遅れて) 再試行することです (Excel が「ビジー」でなくなるまで)。

于 2012-10-15T10:29:07.863 に答える
8

開始インデックスを確認してください。Microsoft.Office.Interop.Excel 範囲オブジェクトの場合、0 ではなく 1 から始まります。ループ開始値が原因で、同じエラーを受け取りました。

于 2012-10-15T10:12:24.383 に答える
4

このエラーも発生しました....

私の場合、ファイルパスに保存するときに無効な文字が含まれている場合に発生します。

path = "C:/somefolder/anotherfolder\file.xls";

\との両方の存在に注意してください。/

※存在しないディレクトリに保存しようとした場合にも発生することがあります。

于 2014-07-08T15:31:41.313 に答える
4

私たちは同じ問題を抱えていて、解決策を見つけました:

このフォルダを作ってください。C:\Windows\SysWOW64\config\systemprofile\Desktop ・Windows 2008 Server x86
このフォルダを作ってください。C:\Windows\System32\config\systemprofile\Desktop

于 2015-04-27T09:47:46.723 に答える
2

大きなExcelファイル(〜150.000行)をエクスポートしようとしたときに同じエラーが発生しました 次のコードで修正されました

Application xlApp = new Application();
xlApp.DefaultSaveFormat = XlFileFormat.xlOpenXMLWorkbook;
于 2014-07-04T07:08:17.820 に答える
1

Excel 2003 DLL を使用して 257 列目に書き込もうとすると、同じエラーが発生しました。Excel 2003 では、ワークシートあたりの最大列数が 256 に制限されているため、この例外が発生します。

Excel 2003 の詳細な制限については、 http://office.microsoft.com/en-001/excel-help/excel-specifications-and-limits-HP005199291.aspxを参照してください。

Excel 2007 から、列の制限が 16384 列に増えました

于 2014-01-31T08:30:21.160 に答える
0

しばらく前に同じエラーを受け取っていました。問題は、私の XLS ファイルに 65531 を超えるレコード (正確には 50 万) が含まれていたことです。セルの範囲を読み取ろうとしていました。

Excel.Range rng = (Excel.Range) myExcelWorkbookObj.UsedRange.Rows[i];

カウンター、つまり「i」がこの制限の 65531 レコードを超えたときに、セルの範囲を読み取ろうとしているときに例外がスローされました。

于 2018-04-10T06:53:24.163 に答える
0

2020 年になってもこのエラーが発生します。上記のstt106で述べたように、考えられる原因は非常に多くあります。私の場合、ワークシートへのデータの自動挿入中に、日付が 2019 年ではなく 1019 年と誤って入力されていました。データ配列を使用して挿入していたため、切り替えるまで問題を見つけるのが困難でした。行ごとの挿入。

これは、問題のデータを「隠した」私の古いコードでした。

    Dim DataArray(MyDT.Rows.Count + 1, MyDT.Columns.Count + 1) As Object
    Try
        XL.Range(XL.Cells(2, 1), XL.Cells(MyDT.Rows.Count, MyDT.Columns.Count)).Value = DataArray
    Catch ex As Exception
        MsgBox("Fatal Error in F100 at 1270: " & ex.Message)
        End
    End Try

一度に 1 行ずつ同じデータを挿入すると、同じエラーで停止しましたが、問題のあるデータを簡単に見つけることができるようになりました。

これが他の誰かを助ける場合に備えて、私は何年も後にこの情報を追加しています。

于 2020-11-12T20:54:09.180 に答える