2013-03-13 89 views
1

我試圖創建一個2007+ Excel文檔(.xlsx),除了使用.net 4.0內置類。 所以我不能使用任何第三方庫[Content_Types] .xml <Override>元素缺失

實際上它的大部分完成,我現在面對的唯一問題是,我創建的包似乎無法在創建[CONTENT_TYPES] .XML文件的,我的意思是它缺乏所有的<替代>元素,只有<默認>元素被創建。

我敢肯定,問題出在哪裏創建包之間的關係的觀點,但我只是不知道如何使它工作,文檔和示例上包裝ZipPackage類驚人地稀少。

也許我錯過了另一個步驟......是否有人有任何線索?請

這是一個類似代碼excactly產生相同的問題

public void CreatePackage() 
     { 
      string Dir = @"F:\Proyectos\Excel_StackOverflow\WindowsFormsApplication1\WindowsFormsApplication1\Resources"; 

     Uri File1_abs = new Uri(String.Format(@"{0}\1.xml", Dir), UriKind.Absolute); 
       Uri File1_rel = new Uri(@"/OddContent/File1.xml", UriKind.Relative); 

       using (ZipPackage exPkg = (ZipPackage)Package.Open(String.Format(@"{0}\Temp.zip", Dir), FileMode.Create)) 
       { 
        ZipPackagePart File1Part = (ZipPackagePart)exPkg.CreatePart(File1_rel, System.Net.Mime.MediaTypeNames.Text.Xml); 
        using (FileStream fs1 = new FileStream(File1_abs.LocalPath, FileMode.Open, FileAccess.Read)) 
        { 
         Form1.CopyStream(fs1, File1Part.GetStream()); 
        } 
        exPkg.CreateRelationship(File1_rel, TargetMode.Internal, "SomeType"); 
        exPkg.Flush(); 
        exPkg.Close(); 
        } 
      } 

     private static void CopyStream(Stream source, Stream target) 
     { 
      const int bufSize = 0x1000; 
      byte[] buf = new byte[bufSize]; 
      int bytesRead = 0; 
      while ((bytesRead = source.Read(buf, 0, bufSize)) > 0) 
       target.Write(buf, 0, bytesRead); 
     } 

和[CONTENT_TYPES] .xml文件它生成對於給定的代碼是:

<?xml version="1.0" encoding="UTF-8"?> 
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> 
<Default ContentType="text/xml" Extension="xml"/> 
</Types> 

但實際上I」 m期待類似這樣的[Content_Types] .xml文件內容:

<?xml version="1.0" encoding="UTF-8"?> 
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> 
<Default ContentType="text/xml" Extension="xml"/> 
<Override PartName="...................."/> 
</Types> 

回答

1

「Overri de「元素將被放入類型列表中,一旦有一部分以默認擴展名存儲但是具有不同的內容類型。

這裏有一個更新的版本將爲File1Part打造的「覆蓋」元素:

 Uri File1_rel = new Uri(@"/OddContent/File1.xml", UriKind.Relative); 
     Uri File2_rel = new Uri(@"/OddContent/File2.xml", UriKind.Relative); 

     using (ZipPackage exPkg = (ZipPackage)Package.Open(String.Format(@"{0}\Temp.zip", Dir), FileMode.Create)) 
     { 
      ZipPackagePart p2 = (ZipPackagePart)exPkg.CreatePart(File2_rel, System.Net.Mime.MediaTypeNames.Text.Xml); 
      ZipPackagePart File1Part = (ZipPackagePart)exPkg.CreatePart(File1_rel, "application/vnd.openxmlformats-officedocument.wordprocessingml.documents.main+xml"); 

注:I型,複製了越南盾的MIME類型...從圖像,它可能有錯別字,隨時修復。

創建的[CONTENT_TYPES] .XML看起來是這樣的:

<?xml version="1.0" encoding="utf-8"?> 
<Types xmlns="http://schemas.openxmlformats.org/package/2006/content-types"> 
<Default Extension="xml" ContentType="text/xml" /> 
<Default Extension="rels" ContentType="application/vnd.openxmlformats-package.relationships+xml" /> 
<Override PartName="/OddContent/File1.xml" ContentType="application/vnd.openxmlformats-officedocument.wordprocessingml.documents.main+xml" /> 
</Types> 
+0

感謝羅馬,你的回答非常好,救了我的一天,太棒了! – Overlord 2013-03-13 05:20:40