programing

HRESULT에서 예외: 0x800A03EC 오류

lovejava 2023. 4. 29. 08:09

HRESULT에서 예외: 0x800A03EC 오류

"HRESULT: 0x800A03"이 표시됩니다.다음 코드로 Excel 추가 기능을 실행할 때 EC" 오류가 발생했습니다.

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 범위를 위반하지 않습니다.광범위하게 검색하고 셀 값을 설정하는 여러 가지 방법을 시도했습니다(예:셀[x,y], 범위.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: 

이 라인에서 동일한 오류가 발생했습니다.

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

0이 아닌 인덱스로 해결

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

이 라이브러리를 만든 사람들이 제로가 아닌 인덱스를 사용하는 것이 좋은 생각이라고 생각하는 것이 어떻게 가능합니까?

이는 일반적이지만 제대로 기록되지 않은 Excel COM 오류입니다."NAME_NOT_Found"로 문서화된 것을 보았습니다. 즉, Excel의 COM 계층이 비활성화되어 있으며 COM 속성이나 메서드 이름을 찾을 수 없습니다.

예를 들어 Excel이 '사용 중'일 때 COM 코드를 실행할 때 이 오류가 지속적으로 발생합니다. 예를 들어 코드를 시작하는 타이머를 설정하고 사용자가 셀을 편집하거나 마우스 버튼을 누르는 동안 코드가 실행되기 시작하면 항상 이 오류가 발생합니다.이 오류는 코드가 기본 Excel 스레드에서 실행되는 경우에만 발생하지만 오류 VBA_E_IGNORE = 0x800과 동일한 것 같습니다.다른 스레드에서 Excel COM 개체 모델을 호출할 때 나타나는 AC472, Excel은 '사용 중'입니다.

유일한 해결 방법은 Excel이 더 이상 '사용 중'이 아닐 때까지 COM 호출을 약간 지연시켜 재시도하는 것으로 보입니다.

시작 인덱스를 확인합니다.Microsoft의 경우 0이 아닌 1부터 시작합니다.사무실. 인터럽트.Excel 범위 객체.루프 시작 값 때문에 동일한 오류가 발생했습니다.

Excel 옵션 > 저장 > 파일을 이 형식으로 저장 > "Excel Workbook(*.xlsx)"을 선택합니다.이 문제는 .xlsx 대신 이전 버전의 Excel 파일(.xls)을 사용하는 경우에 발생합니다.이전 버전에서는 Excel 시트에서 65k 행을 초과할 수 없습니다.

.xslx로 저장했으면 코드를 다시 실행해 보십시오.

편집 ----

당신의 문제를 좀 더 살펴보니, 지역별로 문제가 있을 수도 있는 것 같습니다.코드가 다른 기계에서 작동합니까?그 세포는 어떤 가치를 가지고 있습니까?날짜 시간 형식입니까?여기를 보십시오.

http://support.microsoft.com/kb/320369

http://blogs.msdn.com/b/eric_carter/archive/2005/06/15/429515.aspx

이 오류도 발생했습니다.

파일 경로에 저장에 잘못된 문자가 포함된 경우 발생합니다. 이 경우:

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

두 가지가 모두 존재합니다.\그리고./

*이미 존재하지 않는 디렉터리에 저장하려고 할 때도 발생할 수 있습니다.

우리는 같은 문제를 겪었고 해결책을 찾았습니다.

이 폴더를 만들어 주세요. C:\Windows\SysWOW64\config\systemprofile\complete · 2008년 버전 x86
이 폴더를 만들어 주세요.C:\Windows\ 파일은 32\config\systemprofile\description입니다.

저는 이것이 오래된 것이라는 것을 알지만 제 경험에 충실하기 위해서입니다.오늘 아침에 우연히 만났어요.내 오류는 .xls 줄 제한 또는 배열 인덱스와 아무런 관련이 없습니다.잘못된 공식으로 인해 발생합니다.

데이터베이스에서 Excel로 고객에 대한 시트를 내보내고 있었습니다.누군가가 고객 이름을 다음과 같이 입력합니다.=90Erickson-King데이터베이스에서 문자열 유형 필드로 문제가 없지만 Excel에서는 수식으로 오류가 발생합니다.보여주는 대신에#N/A당신이 엑셀을 사용할 때처럼, 프로그램이 동결되고 0x800A03을 쏟았습니다.잠시 후 EC 오류.

저는 고객 이름의 등호와 대시를 삭제하여 수정했습니다.그 후 수출은 잘 되었습니다.

저는 사람들이 매우 다양한 가능한 원인을 보고하는 것으로 보이기 때문에 이 오류 코드가 약간 일반적이라고 생각합니다.

큰 Excel 파일(~150.000 행)을 내보내려고 할 때 동일한 오류가 발생함 다음 코드로 수정됨

Application xlApp = new Application();
xlApp.DefaultSaveFormat = XlFileFormat.xlOpenXMLWorkbook;

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개 열로 증가되었습니다. http://office.microsoft.com/en-001/excel-help/excel-specifications-and-limits-HP010073849.aspx 을 참조하십시오.

오늘 Excel Interop을 사용하여 다음 명령으로 받았기 때문에 이 메시지는 세계에서 가장 일반적인 오류 메시지임에 틀림없습니다.

Excel.WorkbookConnection conn;
conn.ODBCConnection.Connection = "DSN=myserver;";

연결 문자열에 ODBC를 지정하는 것이 수정되었습니다.

conn.ODBCConnection.Connection = "ODBC;DSN=myserver;";

혹시라도 다른 사람이 이 오류를 가지고 있다면 도움이 되었으면 합니다.

얼마 전에도 같은 오류가 발생했습니다.문제는 제 XLS 파일에 65531개 이상의 레코드(정확히는 50만 개)가 포함되어 있다는 것입니다.세포의 범위를 읽어내려고 했습니다.

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

내 카운터, 즉 'i'가 이 제한인 65531 레코드를 초과했을 때 셀 범위를 읽는 동안 예외가 발생했습니다.

이를 유발할 수 있는 문제를 하나 더 추가합니다. 즉, 로케일에 따라 잘못된 목록 구분 기호를 사용했기 때문입니다.사용.CultureInfo.CurrentCulture.TextInfo.ListSeparator;문제를 수정했습니다.

다음 코드 행에 예외가 발생했습니다.

이 코드를 호출할 때 다음 오류가 발생했습니다.wks.Range[startCell, endCell]어디서startCell범위 및endCell범위가 다른 워크시트와 변수를 가리켰습니다.wks.

이 오류의 추가 원인입니다.아래 코드 샘플은 데이터 테이블(dtTable)의 테이블 이름이 비어 있으면 다음 오류를 반환합니다.

  ' Open Excel workbook
  objExcelApp = New Application
  objExcelWorkbook = objExcelApp.Workbooks.Add()
  objExcelSheet = objExcelWorkbook.ActiveSheet
  objExcelSheet.Name = dtTable.TableName

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

한 번에 한 행씩 동일한 데이터를 삽입할 때 동일한 오류로 중지되었지만 이제는 문제가 되는 데이터를 쉽게 찾을 수 있습니다.

저는 이것이 다른 사람에게 도움이 될까봐 이 정보를 몇 년 후에 추가합니다.

셀 값을 할당하는 문제가 있습니다.DataTable 열에서 검색한 값에는 곱슬곱슬한 중괄호가 있습니다. 를 사용하여 데이터를 사용하여 검색한 데이터를 확인해야 합니다.ToString() 메서드입니다.이 예외는 값이 적절하지 않을 때 나에게 던져집니다.이것이 도움이 되기를 바랍니다.d

저는 이를 실행할 때 문제가 사라졌습니다(Excel 워크북 저장, Excel = Microsoft 사용).사무실. 인터럽트.시스템 계정을 가진 서버에서 Excel)을 실행합니다.로드 프로파일 설정을 확인했습니다.서버에 있는 DIR에 대한 쓰기 권한과 관련이 있다고 생각합니다.또는 다른 파일 공유에 액세스하고 있기 때문일 수 있습니다.

저도 같은 오류가 발생했지만 지금은 해결되었습니다.저의 경우, "Key1", "Key2" 및 "Key3"라는 제목의 열이 있었습니다.열 이름을 다른 이름으로 변경하여 정렬했습니다.

예약된 키워드인 것 같습니다.

안녕하세요, 마헤쉬

언급URL : https://stackoverflow.com/questions/12714626/exception-from-hresult-0x800a03ec-error