2010-12-14 10 views
6

XMLデータをExcelファイルに保存する方法を探しています。 データはユーザーに完全に隠されている必要があります。セルやコメント内に隠れてはいけません。 また、ユーザーがExcelを開いてファイルを保存するときにデータを保存する必要があります。 私は外部XMLデータにセルをマップする方法を探していません。 XMLデータはxlsxファイル内にある必要があります。XMLデータをExcelファイルに保存するにはどうすればいいですか

データは、Excel自体ではなく、C#ツールを使用して入力されます。

答えて

2

Excelは、データの格納、操作、および表示のためのアプリケーションであり、したがって、任意の読み取り不可能なデータを格納するようには設計されていません。しかし、あなたが暗示したように、別のシートに隠しフィールドを使用して情報を入力することもできます。

+0

私は、埋め込まれたOLEオブジェクトを使用する必要がありますか?またはカスタム部分ですか? – user542393

+0

このxmlをファイルに保存する目的は何ですか? –

6

.xlsxファイルは実際には圧縮アーカイブ(zipファイル)なので、本当に隠しファイルを追加する場合は、.xmlファイルをアーカイブに追加するだけです。そうすれば、Excelはそれがそこにあることさえ知りませんでした。

.xlsxファイルの名前を.zipに変更して抽出し、ファイルを追加してから、.zipファイルの内容を選択して再アーカイブします。 .xlsxに名前を変更すると、その中に隠された.xmlファイルがあります。 (注:最上位のフォルダを圧縮しないでください、内容だけ)

あなたはSharpZipLibのようなジップライブラリを使用してC#でこれを行うことができます: http://www.sharpdevelop.net/OpenSource/SharpZipLib/

UPDATE:この「隠し」ファイル意志ユーザーがExcel内からファイルを保存すると保存されません。私がそのシナリオで考え出すことができる最良のアイデアは、シートに埋め込まれたVBAマクロの一部としてコードを呼び出すことです。

このリンクをクリックすると、Officeのパッケージの一部を操作に関する有用な情報が含まれています。http://msdn.microsoft.com/en-us/library/aa982683.aspx

core.xmlとapp.xml(docPropsフォルダ内の)文書のプロパティが含まれ、追加保存するには良い場所かもしれません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です。 (コード内のコメントにすべての必要な説明があります)。上記で使用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); 
} 

using Excel = Microsoft.Office.Interop.Excel; 

Excel.Workbook XlWorkbook = (Excel.Workbook) 
    (Excel.Application)Marshal.GetActiveObject("Excel.Application")).ActiveWorkbook; 
関連する問題