programing

Excel 오류 HRESULT: 0x800A03셀 이름을 사용하여 범위를 가져오는 동안 EC가 발생했습니다.

newstyles 2023. 4. 24. 22:57

Excel 오류 HRESULT: 0x800A03셀 이름을 사용하여 범위를 가져오는 동안 EC가 발생했습니다.

저는 윈도 서비스 프로젝트를 진행하고 있습니다.데이터를 Excel 파일의 시트에 순차적으로 작성해야 합니다.

단, 이 서비스가 예외인 "Exception from HRESULT: 0x800A03"을 삭제하는 경우가 있습니다.셀 이름을 가진 범위를 얻으려고 하는 동안 EC"가 표시됩니다.

엑셀 시트를 열고 셀을 받는 코드를 여기에 입력했습니다.

  • OS: window server 2003 Office:
  • Microsoft Office 2003 sp2

1: 엑셀 시트 열기

m_WorkBook = m_WorkBooks.Open(this.FilePath, 0, false, 5,
     "", "", true, Excels.XlPlatform.xlWindows, ";",
     true, false, 0, true, 0, 0);

2: 셀을 쓸 수 있도록 하다

protected object m_MissingValue = System.Reflection.Missing.Value;
Range range = m_WorkSheet.get_Range(cell.CellName, m_MissingValue);
// error from this method, and cell name is string.

코드 「」가 됩니다.0x800A03EC(-는 NAME_NOT_FOUND를했지만 Excel은 수 (-2146827284) NAME_NOT_FOUND입니다.

입니다. 예를 그 하지 않은 수 없는 에 적용할 수 경우에 적용할 수 있는 코드입니다. 예를 들어, 다음과 같이 당시에는 유효하지 않은 속성을 사용합니다.PivotItem.SourceNameStandardPivotItem pivot pivot pivot pivot pivot 、 PivotItem 。 Worksheets["BLAHBLAH"]을 사용법일반적으로 당신은 특정한 이름을 가진 것을 요구하지만 그것은 존재하지 않는다.왜 그랬는지, 그건 자네 입장에서 좀 더 파고들게 될 거야.

, "가 표시되어 있는지 합니다..CellName확실히 원하시는 범위의 이름을 알려드리고 있습니다.

"="로 시작하는 셀에 문자열을 쓰려다가 이 오류가 발생했습니다.

해결책은 등호 앞에 "" (아포스트로피)를 붙이는 것입니다.이것은 실제로 공식을 쓰려는 것이 아니라 등호만 인쇄하려고 한다는 것을 Excel에게 알려주는 방법입니다.

여기에서 가능한 해결책을 찾았습니다.http://www.made4dotnet.com/Default.aspx?tabid=141&aid=15

편집:

Microsoft Visual Basic을 사용하여 Microsoft Excel을 자동화하는 경우.NET, Microsoft Visual C#.NET 또는 Microsoft Visual C++ 는, 특정의 메서드를 호출하면, 다음의 에러가 표시되는 경우가 있습니다.이는 머신의 로케일이 미국 영어 이외의 로케일로 설정되어 있기 때문입니다(로케일 ID 또는 LCID 1033).

HRESULT 예외: 0x800A03EC

및/또는

이전 형식 또는 잘못된 형식 라이브러리

해결책 1:


이 에러를 회피하려면 , Excel 관련의 코드를 실행할 때에 CurrentCulture 를 en-US 로 설정하고, 다음의 2개의 기능을 사용해 원래의 설정으로 되돌립니다.

//declare a variable to hold the CurrentCulture
System.Globalization.CultureInfo oldCI;
//get the old CurrenCulture and set the new, en-US
void SetNewCurrentCulture()
{
  oldCI = System.Threading.Thread.CurrentThread.CurrentCulture;
  System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
}
//reset Current Culture back to the originale
void ResetCurrentCulture()
{
  System.Threading.Thread.CurrentThread.CurrentCulture = oldCI;
}

해결책 2:


다른 솔루션으로는 Microsoft Office\Office11(또는 대응하는 Office-version) 아래에 1033 디렉토리를 생성하여 excel.exe를 1033 디렉토리에 복사하고 이름을 xllex.dll로 변경합니다.

이러한 솔루션 중 하나를 사용하여 문제를 해결할 수 있지만, 미국 영어 이외의 로케일로 Excel 객체 모델을 호출하면 Excel 객체 모델이 다르게 동작하고 코드가 생각지도 못한 방식으로 실패할 수 있습니다.예를 들어 범위 값을 날짜로 설정하는 코드가 있을 수 있습니다.

범위를 지정합니다.값 2 = "10/10/09"

이 코드는 로케일에 따라 다르게 동작할 수 있으며 Excel은 다음 값 중 하나를 범위에 넣을 수 있습니다.

2009년 10월 10일 2009년 9월 10일 2010년 10월 9일

시트 이름에 공백이 있는 오류가 발생했습니다.

using (var range = _excelApp.Range["Sheet Name Had Space!$A$1"].WithComCleanup())

시트 이름 주위에 공백이 있는 작은 따옴표를 붙여 수정했습니다.

using (var range = _excelApp.Range["'Sheet Name Had Space'!$A$1"].WithComCleanup())

완전히 문서화되지 않은 오류 800A03의 의미EC(Microsoft의 수치)는, 「OPERATION NOT Supported」와 같은 것입니다.

그럴 수도 있다

  • 현재 Excel 버전이 이해하지 못하는 새로운 Excel 버전에서 작성된 내용이 있는 문서를 열 때.
  • 문서를 로드한 경로와 동일한 경로에 저장할 때(파일은 이미 열려 있고 잠겨 있음)

그러나 대부분 Excel의 심각한 버그로 인해 이 오류가 발생합니다.

  • 예를 들면, Microsoft.Office.Interop.Excel.Picture의 속성은 "Enabled"입니다.당신이 그것을 부를 때 당신은 bool 값을 받아야 합니다.대신 에러 800A03이 표시됩니다.EC. 이건 버그야.
  • 2016년에는 하여 【Exel 2013】【2016】【Exel 2013】을 하면, 뚱뚱한 . 엑셀Application.Visible=true ★★★★★★★★★★★★★★★★★」Application.WindowState = XlWindowState.xlMinimized 개 수 있습니다.EC를 사용합니다.Merge(), CheckBox.Top Left , Shape. (톱 왼쪽 셀, 쉐이핑왼쪽 상단 셀, 모양.「」를 참조해당됩니다.Excel 2007 2010년.

레인지를 사용하려고 했을 때 이 문제가 발생했습니다.Add Comment() 함수.나는 이것을 통화 범위로 해결할 수 있었다.코멘트를 추가하기 전에 ClearComment()를 참조해 주세요.

워크북이나 시트를 보호 해제하는 것을 잊어버렸을 때 받았습니다.

도미닉의 답변을 통해 저는 특히 제 문제에 대한 답이 범위에 적용되기 전 소스 데이터에서 유효하지 않은 DateTiime이라는 것을 발견했습니다.데이터베이스 사이 어딘가에 있습니다.NET 및 Excel 변환 날짜 기본값은 "1/1/1899 12:00:00 AM"입니다. 확인 후 빈 문자열로 변환하면 수정되었습니다.

if (objectArray[row, col].ToString() == "1/1/1899 12:00:00 AM")
{
    objectArray[row, col] = string.Empty;
}

이것은 매우 구체적인 예이지만, 다른 사용자가 잘못된 데이터를 추적하려고 할 때 시간이 절약되기를 바랍니다.

Excel 범위 인덱스는 없음-제로이며 1부터 시작합니다.
전화하시면sheet.Rows[0]또는sheet.Columns[0]또는sheet.Cells[0]인덱스가 1부터 시작되고 0이 유효하지 않은 인덱스이기 때문에 예외가 느려졌습니다.

이름을 열거하고 워크시트를 호출할 때 이 에러 코드가 발생했습니다.get_Range(name)이것은 이름이 범위에 적용되지 않을 때 발생하는 것으로 보이며, 내 경우 매크로 이름입니다.

VBA에서 Excel을 실행하다가 비슷한 오류가 발생했습니다. 제가 배운 것은 MSQL에서 데이터를 풀었을 때, 그리고 나서get_range그리고..Value2적용범위가 범위를 벗어났습니다.유형의 모든 값uniqueidentifier(GUID)로 인해 이 오류가 발생하였습니다.오직 내가 가치관을 던질 때만nvarcahr(max)효과가 있었어요

흥미로운 점은 이 오류가 오픈 시에도 발생한다는 것입니다..XLS?파일 형식이 잘못되었거나 복구가 필요합니다.

.xls(오래된 Excel) 파일의 많은 행에 오류가 발생합니다.

테스트: 해당 파일을 Excel 데스크톱에서 수동으로 엽니다.

저는 자동화를 사용하여 매일 수백 개의 파일을 처리합니다.이 오류가 발생하면 소유자에게 메일로 통지하고 처리되지 않은 파일을 임시 위치에 저장합니다.

Hi는 같은 문제에 직면해 있었다.

순서

  1. 변경 내용을 편집 및 저장하는 동안 읽기 전용 모드(보호 모드)가 아닌 Excel 파일에 액세스하고 있는지 확인합니다.

  2. 그 후에도 이 문제가 발생할 경우 Excel 파일로 이동합니다.--> Options --> Formula 및 여기서 오류 체크가 비활성화됩니다(이것은 대부분의 HRESULT 오류의 원인).

예외 전체를 복사할 수 있다면 훨씬 더 좋을 것입니다만, 일단 이 예외에 직면했을 때, 이것은 당신의 dll 파일에서 호출하는 함수가 제대로 서명되지 않았기 때문입니다.는 이것이 중복될 가능성이 있다고 생각한다.

참고로 dll이 제대로 서명되지 않았는지 확인하려면 해당 dll을 마우스 오른쪽 버튼으로 클릭하고 서명에 접속해야 합니다. 그러면 전자서명이 잘 되었는지 여부가 나타납니다.

언급URL : https://stackoverflow.com/questions/891394/excel-error-hresult-0x800a03ec-while-trying-to-get-range-with-cells-name