programing

C#을 사용하여 사용자 지정 XML을 열린 Excel 2007 워크북에 추가하려면 어떻게 해야 합니까?

mytipbox 2023. 8. 26. 16:16
반응형

C#을 사용하여 사용자 지정 XML을 열린 Excel 2007 워크북에 추가하려면 어떻게 해야 합니까?

C#을 사용하여 열린 Excel 2007 워크북에 사용자 지정 XML을 추가하려고 합니다.저는 마이크로소프트를 사용합니다.사무실.인터럽트.인터페이스로서 탁월합니다.CustomXMLPart 클래스가 있는 것을 발견했지만 사용 방법을 알 수 없습니다.처음에는 코드가 다음과 같이 단순할 것으로 예상했습니다.

CustomXMLPart myXMLPart = 새 CustomXMLPart(xmlString);

내 워크북.XML 사용자 지정 부품.추가(myXMLPart);

하지만 그것은 일에 가깝지 않습니다.

온라인에서 예제를 찾아봤지만 패키지, 애드인, OpenXML, VSTO 스트림 등에 대해 이야기하는 것은 이해할 수 없을 정도로 복잡합니다.적합한 워크북(xlsx)의 압축을 풀었더니 docProps/custom.xml 요소가 있습니다.

저장하기 전에 새 워크북(2007)에 유사한 custom.xml을 추가하고 싶습니다.이것이 가능합니까?추가 패키지 또는 라이브러리를 설치할 수 없습니다.

편집: 저는 이 문제를 조사하는 데 조금 더 진전이 있었습니다.올바른 Office 참조(COM 아래의 Microsoft Office 12.0 Object Library)와 Excel 상호 운용 참조(Microsoft)를 가지고 있다고 확신합니다.사무실.인터럽트.GAC 아래에서 Excel).

선언문

Microsoft.Office.Core.CustomXMLParts myCustomXMLParts;

그러나 컴파일

Microsoft.Office.Core.CustomXMLParts myCustomXMLParts =
    Microsoft.Office.Interop.Excel.Workbook.CustomXMLParts;

다음 오류 메시지가 표시됩니다.오류 CS0029: 'Microsoft' 유형을 암시적으로 변환할 수 없습니다.사무실.Core.CustomXMLParts'에서 'Microsoft'로 이동합니다.사무실.Core.CustomXMLParts.

Excel CustomXMLParts 속성 위에 마우스를 놓으면 어떤 의미에서 Microsoft인 CustomXMLParts 개체를 반환한다고 주장합니다.사무실.Core.CustomXMLParts 개체이지만 Office 어셈블리와 완전히 같지는 않습니다.따라서 여기에는 분명히 비호환성이 있지만 해결할 수 없습니다.마이크로소프트 Office Professional Plus 2007(12.0.6612.1000) 및 Office 2007 Primary Interop Assembly(12.0.4518.1014)가 설치되어 있습니다.

편집: 문제는 오피스 DLL이라고 확신합니다.참조 추가에서 "Microsoft Office 12.0 Object Library"가 표시되고 오류 없이 추가할 수 있습니다.참조에서 단순히 "사무실"로 나타납니다.그러나 여전히 Microsoft를 주장하는 동안 컴파일러에게는 보이지 않는 것처럼 보입니다.사무실.참조되지 않는 어셈블리에 코어가 정의되어 있으며 어셈블리 'office', Version=12.0.0.0을 지정합니다.

제 오피스 레퍼런스는 MSO와 연결되어 있습니다.Microsoft Shared/OFFICE12 아래의 DLL과 Properties 아래의 Major Version 2 Minor Version 4가 있습니다.이것이 중요합니까?아니면 어떤 이유로 참조된 내용을 처리하고 있지 않음을 나타내는 오류 메시지입니까?

편집: 확실히 COM 개체 "Microsoft Office 12.0 개체 라이브러리"를 추가하는 것이 문제인 것 같습니다.다른 포럼 게시물에서 저는 다른 사람들이 "Microsoft"에 대한 언급을 보는 것을 발견했습니다.사무실.Core"가 표시되지만 "Office"만 표시됩니다..csproj 파일을 직접 편집해봤는데 "Microsoft.사무실.코어" 하지만 여전히 작동하지 않습니다.제가 정말로 할 수 있는 유일한 결론은 MSO라는 것입니다.Office 12 Professional Plus용 DLL(버전(12.0.6612.1000)에는 실제로 Microsoft가 포함되어 있지 않습니다.사무실.코어 어셈블리, 또는 어느 쪽이든 제대로 노출되지 않습니다.

MSDN Docs는 VSTO를 사용하는 예를 제공하며, 이를 Winform 애플리케이션과 함께 작동하도록 조정했습니다.

경우 PIA를 참조하는 것이 요령입니다. 아래 스크린샷에서 Excel Reference의 툴팁 경로를 참조하십시오.참고: 사용하지 않았습니다.Net 또는 COM 참조 탭에서 Excel DLL을 "찾아보기"해야 했습니다.


Below is the Winform Code of a working example using the Excel PIA (also version 12.0.4518.1014). See screenshot for more detailed info of the Book1.xlsx renamed to a zip and extracted after I ran the code, along with the resulting 항목1.xml file in the 사용자 정의 XML folder:

private void button1_Click(object sender, EventArgs e)
{
    string path = @"c:\temp\test\Book1.xlsx";
    var xlApp = new Microsoft.Office.Interop.Excel.Application();
    Workbook wb = xlApp.Workbooks.Open(path);

    string xmlString =
    "<?xml version=\"1.0\" encoding=\"utf-8\" ?>" +
    "<employees xmlns=\"http://schemas.microsoft.com/vsto/samples\">" +
        "<employee>" +
            "<name>Karina Leal</name>" +
            "<hireDate>1999-04-01</hireDate>" +
            "<title>Manager</title>" +
        "</employee>" +
    "</employees>";

    wb.CustomXMLParts.Add(xmlString, Type.Missing);
    wb.Save();
}

스크린샷 확대보기: https://i.stack.imgur.com/O8Qhm.png

enter image description here

사용자 지정 X를 가져오려는 경우워크북의 ML은 다음 답변을 참조하십시오. https://stackoverflow.com/a/8488072/495455 .


편집:

마이크로소프트도 있습니다.사무실.GAC에서 참조된 코어 ActiveX:C:\Windows\assembly\GAC_MSIL\Office\15.0.0.0__71e9bce111e9429c\Office.dllMicrosoft VBIDE를 사용할 수 있습니다.GAC로부터의 인터럽트 또한.C:\Windows\assembly\GAC_MSIL\Microsoft.Vbe.Interop\15.0.0.0__71e9bce111e9429c\Microsoft.Vbe.Interop.dll.

여기 제 프로젝트가 있습니다. 사용해 보십시오. 작동하는 제레미 톰슨.Net/Rocks/OfficeExcelCustomXML.zip과 비교하여 솔루션에서 누락된 내용을 확인할 수 있기를 바랍니다.

zip에는 Bin\Debug 폴더에 GAC DLL이 포함되어 있습니다.

나는 당신이 엑셀 자동화를 통해 길을 완전히 버리는 것이 훨씬 더 적합할 것이라고 생각합니다.아마도 다음을 통해 엑셀 파일을 열기에 충분할 것입니다.System.IO.Packaging Namespace여기에서 전체 샘플을 찾을 수 있습니다.Microsoft Office를 시작하지 않고 문서에 사용자 지정 XML 부품 추가

게시된 다른 답변과 달리 이 솔루션은 Office PIA에 대한 참조가 필요하지 않습니다.에 대한 .WindowsBase에 포함되어 있습니다.NET. 심지어 docx, pptx와 같은 다른 OpenXML 문서 형식도 처리할 수 있습니다.

두 번째 스니펫에는 마이크로소프트가 있습니다.사무실.인터럽트.Excel. 워크북.CustomXMLParts는 유형이므로 myCustomXMLParts 변수에 할당할 수 없습니다.당신은 그것을 가지고 있어야 할 것입니다.

Microsoft.Office.Interop.Excel.Workbook myWorkbook = <some appropriate constructor>;
...
Microsoft.Office.Interop.Excel.Workbook.CustomXMLParts myParts = myWorkbook.CustomXMLParts;

언급URL : https://stackoverflow.com/questions/29903139/how-do-i-add-a-custom-xml-to-an-open-excel-2007-workbook-using-c

반응형