Excel이 설치되지 않은 경우 Excel 인스턴스를 만드는 방법
제 C# 앱에서는 엑셀 인터op dll(참고 자료)의 도움을 받아 엑셀 파일을 읽고 쓰고 있습니다.이 프로그램을 오피스/엑셀이 설치되지 않은 시스템으로 옮기면(클린머신을 생각하면) 아래 오류가 발생합니다.
시스템. 런타임.Interop Services.COME 예외(0x80040154):CLSID가 {00024500-0000-0000-C000-00000046}인 구성 요소에 대한 COM 클래스 팩토리를 검색하지 못했습니다. 80040154 클래스가 등록되지 않았습니다(HRESULT에서 예외: 0x80040154(REGDB_E_CLASSNOTREG).
대상 컴퓨터에 엑셀이 없으므로 위의 오류가 예상됩니다.
제가 묻고 싶은 것은, 타겟 머신에 Interop dll을 등록하는 것 외에 제 프로그램을 사용할 수 있는 다른 방법이 있나요?
제가 묻고 싶은 것은, 타겟 머신에 Interop dll을 등록하는 것 외에 제 프로그램을 사용할 수 있는 다른 방법이 있나요?
당신은 당신의 프로그램을 실행하는 컴퓨터에 엑셀이 설치되어 있지 않은데 엑셀 interop을 사용하는 당신의 프로그램을 사용할 방법이 있는지 묻고 있습니다.간단히 말하면 아니오입니다.더 긴 대답은 프로그램이 interop을 사용하지 않도록 리팩터링할 의향이 있다면 "예"입니다.
목표로 하는 Excel 버전이 2007 이상이면 Microsoft에서 제공하는 OOXml SDK를 사용할 수 있습니다.약간의 돈을 쓸 의향이 있다면 Aspose와 같은 제3자 도서관을 이용할 수도 있습니다.
Excel 파일에 스프레드시트를 삽입하기 위해 OOOXml SDK를 사용하는 예는 Microsoft 문서에서 확인할 수 있습니다.
// Given a document name, inserts a new worksheet.
public static void InsertWorksheet(string docName)
{
// Open the document for editing.
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true))
{
// Add a blank WorksheetPart.
WorksheetPart newWorksheetPart = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>();
newWorksheetPart.Worksheet = new Worksheet(new SheetData());
Sheets sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>();
string relationshipId = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart);
// Get a unique ID for the new worksheet.
uint sheetId = 1;
if (sheets.Elements<Sheet>().Count() > 0)
{
sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1;
}
// Give the new worksheet a name.
string sheetName = "Sheet" + sheetId;
// Append the new worksheet and associate it with the workbook.
Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName };
sheets.Append(sheet);
}
}
Microsoft에서도 서버의 Interop 라이브러리에서 사용하는 것을 권장하지 않습니다.따라서 Excel을 대신할 수 있는 대체 프레임워크를 찾는 것이 가장 좋습니다.저는 과거에 그런 목적으로 Npoi를 성공적으로 사용한 적이 있습니다.
이것이 당신의 예외에 대한 대답이 아니라는 것을 압니다.하지만 솔직히 인터럽트는 끝없는 문제와 암호화된 예외 메시지를 전달하는 길입니다.
2017년 업데이트: 저는 한동안 NPOI를 사용하지 않았고, 모든 프로젝트를 당신에게 최신 xlsx 파일을 생성하는 OpenXML 기반의 EPLusinsted - 라이브러리로 이동했습니다.
얼마 전 서버에서 엑셀 파일과 상호 작용해야 할 때 제가 조사한 바로는, 당신은 오피스를 설치해야 합니다.
RegSrv32에 COM을 등록할 수 있습니다.
링크: http://msdn.microsoft.com/en-us/library/ms859484.aspx
사용하기 전에 COM을 등록해야 합니다.
언급URL : https://stackoverflow.com/questions/12375943/how-to-create-an-instance-of-excel-if-excel-is-not-installed
'codememo' 카테고리의 다른 글
| 각 루프의 역순 (0) | 2023.04.28 |
|---|---|
| UIButton에서 테두리를 만드는 방법은 무엇입니까? (0) | 2023.04.28 |
| git push --force-with-lease vs. --force (0) | 2023.04.28 |
| aspx 페이지의 if 문 (0) | 2023.04.28 |
| ASP를 위한 Come 구현.NET? (0) | 2023.04.28 |