2010-12-14 3 views
6

XML 데이터를 Excel 파일에 저장하는 방법을 찾고 있습니다. 데이터는 사용자에게 완전히 숨겨져 있어야하며 숨겨져 있어도 셀이나 주석에 있어서는 안됩니다. 또한 사용자가 Excel을 열고 파일을 저장할 때 데이터가 보존되어야합니다. 외부 XML 데이터에 셀을 매핑하는 방법을 찾고 있지 않습니다. XML 데이터는 xlsx 파일 내에 있어야합니다.XML 데이터를 Excel 파일에 저장하는 가장 좋은 방법은 무엇입니까

데이터는 Excel 자체가 아닌 C# 도구를 사용하여 입력됩니다.

답변

2

Excel은 데이터를 저장, 조작 및 보는 응용 프로그램이므로 읽을 수없는 임의의 데이터를 저장하도록 설계되지 않았습니다. 그러나 암시 하듯이 별도의 시트에 숨겨진 필드를 사용하여 정보를 입력 할 수도 있습니다.

+0

내가 포함 된 OLE 개체를 사용해야 다음 xlworkbook 객체에 대해

//Deletes all the previously added parts and adds a new part //containing the string argument which has to be in XML format. public void addCustomXMLPart(string test) { IEnumerator e = Xlworkbook.CustomXMLParts.GetEnumerator(); e.Reset(); CustomXMLPart p; //The !p.BuiltIn is because before our customXMLPart there are some // Excel BuiltIns of them and if we try to delete them we will get an exception. while (e.MoveNext()) { p = (CustomXMLPart)e.Current; if (p != null && !p.BuiltIn) p.Delete(); } Xlworkbook.CustomXMLParts.Add(test, Type.Missing); } 

은 위에서 사용? 또는 맞춤 부품? – user542393

+0

이 XML을 파일에 저장하는 목적은 무엇입니까? –

6

.xlsx 파일은 실제로 압축 압축 파일 (zip 파일)이므로 실제로 숨겨진 파일을 추가하려면 .xml 파일을 보관 파일에 추가하면됩니다. 그런 식으로 Excel은 심지어 그걸 알지도 못했습니다.

.xlsx 파일의 이름을 .zip으로 변경하고 압축을 풀어 파일을 추가 한 다음 .zip 파일의 내용을 선택하고 다시 아카이브하십시오. .xlsx로 이름을 변경하면 내부에 숨겨진 .xml 파일이 생깁니다. : 당신은 SharpZipLib 같은 압축 라이브러리를 사용하여 C#에서이 작업을 수행 할 수 있습니다

(주 최상위 폴더 만 내용을 압축하지 마십시오) : http://www.sharpdevelop.net/OpenSource/SharpZipLib/

UPDATE :이 "숨겨진"파일이됩니다 사용자가 Excel 내에서 파일을 저장하면 유지되지 않습니다. 이 시나리오에서 내가 생각해 낼 수있는 가장 좋은 아이디어는 시트에 포함 된 VBA 매크로의 일부로 코드를 호출하는 것입니다. http://msdn.microsoft.com/en-us/library/aa982683.aspx

합니다 (docProps 폴더 단위) core.xml 및 app.xml 문서의 속성을 포함하고 추가로 저장할 수있는 좋은 위치가 될 수 있습니다

이 링크는 오피스 패키지의 부품을 조작에 대한 유용한 정보가 포함되어 있습니다 XML 정보.

+0

사용자가 '다른 이름으로 저장 ...'을 수행 한 후에 XML 데이터가 유지됩니까? – reinierpost

+0

저장 또는 다른 이름으로 저장되지 않습니다. 그것을 알아 주셔서 감사합니다. 나는 그 질문의 일부를 충분히 철저히 읽지 않았다. –

+0

정확합니다. Excel.SaveAs에서는 작동하지 않습니다. 그러나 Word에서는 사용자 지정 부분을 허용합니다. Excel에 해당 항목이 있습니까? 어쩌면 특별한 관계 유형일까요? http://msdn.microsoft.com/en-us/library/bb608618.aspx (영문) – user542393

6

동일한 문제가 있으며 여기를 처리 할 코드는 Microsoft's Custom XML Parts입니다. (코드에서 내 설명에 필요한 모든 설명을 찾을 수 있습니다.)

using Excel = Microsoft.Office.Interop.Excel; 

Excel.Workbook XlWorkbook = (Excel.Workbook) 
    (Excel.Application)Marshal.GetActiveObject("Excel.Application")).ActiveWorkbook; 
관련 문제