C#에서 Excel 워크북을 만들 때 클래스가 등록되지 않음 오류 발생
다음 코드를 사용하여 Excel 스프레드시트에 액세스하려고 하면 Office 2007(ver 12)이 설치된 Visual Studio 2012에서 C#을 사용하여 워크북 오브젝트 wrkbuk을 정의할 때 "Library not registered" 오류가 발생합니다.
Microsoft.Office.Interop.Excel.Application excapp = new Microsoft.Office.Interop.Excel.Application();
string bookname = @"C:\Users\Public\Documents\RECRUITMENT & SELECTION\MOVEMENTS\MOVEMENTS\Miscellaneous Documents\VacanciesREAL.xls";
Workbook wrkbuk = excapp.Workbooks.Open(bookname);
Worksheet wrksht = new Worksheet();
에러에 대한 자세한 내용은 다음과 같습니다.
이 시스템에서 처리되지 .Invalid Cast Exception invalid invalid 。HResult=-2147467262
'' = 'Microsoft' com개 COM 개개개 수개다 '수' 。Office.Interop.Excel.ApplicationClass'를 선택합니다.Office.Interop.._이 조작은 인 인터페이스의 컴포넌트에서의 오류로 (HRESULT IID가 {000208D5-0000-C000-0000000046}인 인터페이스의 COM 컴포넌트에 대한 QueryInterface 호출이 실패했기 때문에 이 작업이 실패했습니다.라이브러리가 등록되지 않았습니다.(HRESULT: 0x8002801D (TYPE_E_LIB) 예 source source ) 소스 = mscorlib
Microsoft에 대한 레퍼런스를 작성했습니다.Office.Interop.VS 2012 및 Office 12 버전의 dll에 부속된 Office 14 프라이머리 인터op 어셈블리의 Excel.dll은 문제를 수정하지 않습니다.나는 dls를 regasm에 등록하려고 시도했지만 이것 또한 도움이 되지 않는다.
Office 14 및 Office 12 dls에서 다음 행에 해당하는 워크시트를 작성할 수 있으므로 문제가 워크북 정의에만 영향을 미치는 것 같습니다.
2013년 12월 17일
Office 2007 재인스톨을 시도했지만, 이 솔루션을 발견해, 정상적으로 동작.에 있었다.
문제는 여러 버전의 Office 코드입니다.Office 14의 코드를 사용하고 있었습니다.VS 2012 설치 코드일 가능성이 있습니다.
VS 2012 RC에 Office 2013 타입 라이브러리가 설치되어 중복된 버전이 등록되어 있는 것으로 생각됩니다.특정 에러 메시지를 받았습니다.
('어플리케이션'을 캐스팅할 수 없습니다...')TYPE_E_LIBNOT REGISTERED')
관공서여기서 다른 포럼의 조언에 따라 문제를 해결했습니다. CLSID를 검색했습니다.{00020970-0000-0000-C000-000000000046}
레지스트리 키에는 2개의 키가 포함되어 있으며, 그 중 하나는 'TypeLib'로 불리며, 이 키에는 타입 라이브러리의 다른 CLSID가 포함되어 있습니다.그런 다음 레지스트리를 처음부터 다시 검색하여 두 번째 CLSID를 검색하여 관련 interop 타입 라이브러리로 이동했습니다.엔트리가 는 Office의 인 8.3과 8.4에 Office 8.4와 2가 됩니다.★★★★★★★★★★★★★★★★★★★★ 즉시 을 실행할 수 이치노
나도 똑같은 문제가 있었어수정 방법은 다음과 같습니다.
에 가다
HKEY_CLASSES_ROOT\TypeLib\
Office.Interop.Excel
.
HKEY_CLASSES_ROOT\TypeLib\(guid)\1.8
하위 노드가 비어 있었습니다!Office 15가 그 기계에 설치되어 있지 않아서 삭제했는데, 저기, 작동했어요.
VSTO 프로젝트 설치 관리자 또는 커스텀 설치 관리자가 1.8 폴더를 배치해야 합니다.
여기서 해결책을 찾았습니다.
나도 똑같은 문제가 있었어.Office 의 새로운 버전을 인스톨 하고 있는 경우, 어떠한 이유로 새로운 버전을 삭제하지 않고 이전 버전을 인스톨 할 필요가 있는 경우(이 경우는 Office XP 포토 에디터만 인스톨 하면 됩니다).이것이 문제의 원인입니다.
위아래로 3시간을 보낸 후, 가장 좋은 방법은 새로운 버전의 Office를 수리하는 것입니다.그리고 모든 것이 원래대로 복구되었습니다.
동일하거나 유사한 시나리오가 있는 경우 이 정보가 도움이 되기를 바랍니다.
여기서 언급되지 않았지만 유용할 수 있는 것은 1의 서브키입니다.XX에서도 문제가 발생할 수 있습니다.예를 들어 다음과 같습니다.[컴퓨터(Computer)]아래 \HKEY_CLASSES_ROOT\TypeLib {00020813-0000-0000-C000-0000000046} 서브키 1.9가 있습니다.다음으로 서브키 0(또는 subkey 0)이 됩니다.이 아래에는 Win32와 Win64의 2개의 서브키가 있습니다.그 결과 Visual Studio는 Microsoft의 위치를 확인할 수 없었습니다.Office.Interop.Excel.dll - 1개만 읽을 수 있는 서브키 2개를 읽고 있었습니다.Win32 서브키를 삭제하면 문제가 완전히 해결되었습니다.이는 VS 2017 & Office 365 Pro Plus를 완전히 재설치한 후에 이루어진 것입니다.이게 도움이 됐으면 좋겠네요.
@stuzor의 답변을 2대의 머신에서 확인합니다.
배경:
Windows7 64 bit
Office 2010 (32bit)
Lync 2013
HKEY_CLASSES_ROOT\TypeLib\가 Office를 검색했습니다.상호 운용.엑셀. 거의 존재하지 않는 "1.8" 폴더를 찾았습니다.삭제 후 오래된 VB.net 앱의 기능이 즉시 작동하기 시작했습니다.
regedit 레코드를 수정 또는 삭제할 수 없는 경우의 답변입니다.저도 같은 문제가 있었습니다.제가 일하는 회사에는 Office 2010을 탑재한 기계가 30대 정도 있어서 regedit의 레코드를 지우거나 열 수 없었습니다.클라이언트 머신이 나를 허락하지 않는 도메인에 있었기 때문에 나는 관리자 권한을 가지고 있었지만 regedit의 레코드를 삭제할 수 없었다.1개월 동안 솔루션을 찾았지만 찾을 수 없었기 때문에 인터op 사용을 중지하고 OpenXml로 이행하여 엑셀 템플릿을 편집하고 ClosedXml로 이행하여 새로운 엑셀을 생성해야 했습니다.상사가 이미 저를 압박하고 있었기 때문에, 이것이 제 목숨을 구했습니다.
Visual Studio에서 프로젝트/솔루션을 열고 [Tools]> [ NuGet Package Manager ]> [ Package Manager Console ]명령어를 사용하여 콘솔을 열고 2개의 패키지를 설치합니다.
- 설치 패키지 Document Format.OpenXml - 버전 2.5.0
- 패키지 스프레드시트 라이트 설치
pd: OpenXml 2.8은 Spreadset Light와 함께 사용할 수 없습니다. 2.5.0을 사용하는 것이 좋습니다.
이것을 구걸에 보태다.
using DocumentFormat.OpenXml;
using DocumentFormat.OpenXml.Packaging;
using DocumentFormat.OpenXml.Spreadsheet;
using SpreadsheetLight;
버튼 또는 클래스 복사 및 수정
SaveFileDialog fichero = new SaveFileDialog();
fichero.Filter = "Excel (*.xlsx)|*.xlsx";
if (fichero.ShowDialog() == DialogResult.OK)
{
SLDocument sl = new SLDocument("c:\\bin\\est1.xlsx", "Sheet1");
sl.SetCellValue("E9", "Let's party!!!!111!!!1");
sl.SelectWorksheet("Sheet2");
sl.SetCellValue("C7", "Before anyone calls the popo!");
sl.AddWorksheet("ERTRT");
sl.SetCellValue("B4", "Who let the dogs out?");
sl.SetCellValue("B5", "Woof!");
sl.SaveAs(fichero.FileName);
MessageBox.Show("Report " + fichero.FileName + "!");
}
위에서 설명한 레지스트리 해킹으로 동일한 문제가 해결되었습니다.유일한 차이점은 엔트리 1.9와 1.7이었습니다.1.9 키를 지웠더니 문제가 해결되었습니다.
기타 정보:
OS: Windows 10
Visual Studio Professional 2015
C# Windows 폼어플리케이션
이건 내 업무용 노트북에 있던 거야각 워크스테이션에는 Office 2010이 설치되어 있습니다.
그 밖에도 몇 가지 시도했지만 효과가 없었습니다.
MS OFFICE 복구
MS OFFICE 재설치
Microsoft Office 2010: Microsoft에서 주요 상호 운용 어셈블리 다운로드.
마이크로소프트 버전도 여러 개 가지고 있었습니다.Office.Interop.노트북 Excel.dll.이전 버전을 삭제해도 문제는 해결되지 않았다.
STACKOVERFLOW에 가서 다행이에요.COM, 여기가 너무 좋으니까!!!!!!
우리도 같은 문제가 있었어.
.
2010 : 및 2013 : Office 2010 : Word © Excel © Office 2013 : Outlook
Office 2010 설치 프로그램을 실행하여 복구 옵션을 선택했습니다.그 후 Word와 Excel 레지스트리에 있는 잘못된 키가 모두 삭제되어 문제가 해결되었습니다.
같은 문제가 있었는데...이전에 실행하던 코드가 새 응용 프로그램 인스턴스가 생성되었을 때 동일한 예외를 발생시키기 시작했습니다.이 문제를 해결하려면:
- 프로그램 및 기능, 인스톨 된 날짜별로 주문을 실시해, 코드가 동작하지 않게 된 당일로부터 Microsoft Office 365 의 업데이트가 몇개인가 있는 것을 확인할 수 있었습니다.
- Microsoft Office 365 -en-us 와 Microsoft Office 365 Pro Plus -en-us 의 양쪽 모두에서 [변경]를 오른쪽 클릭하여 [퀵픽스]를 선택합니다.
솔루션을 실행하려고 했는데 다시 작동했어요.
언급URL : https://stackoverflow.com/questions/20397506/class-not-registered-error-when-creating-excel-workbook-in-c-sharp
'programing' 카테고리의 다른 글
xlwings 및 python을 사용하여 워크시트 복사 (0) | 2023.04.17 |
---|---|
데이터그램 열 가시성 MVVM 바인딩 (0) | 2023.04.17 |
WPF 명령줄 (0) | 2023.04.17 |
커밋 메시지 내 GitHub의 이슈 번호 링크 (0) | 2023.04.17 |
읽기 전용 종속성 속성을 생성하려면 어떻게 해야 합니까? (0) | 2023.04.17 |