2010-10-07 64 views
0

將數據導出到PowerPoint時,我已經使用this例如:ASP.NET到PowerPoint:文件被損壞添加圖像

我已經修改了GenerateSlidesFromDB()方法:

public void GenerateSlidesFromDB() 
    { 
     string slideName = @"C:\Users\x\Desktop\output.pptx"; 
     File.Copy(@"C:\Users\x\Desktop\Test.pptx", slideName, true); 

     using (PresentationDocument presentationDocument = PresentationDocument.Open(slideName, true)) 
     { 
      PresentationPart presentationPart = presentationDocument.PresentationPart; 
      SlidePart slideTemplate = (SlidePart)presentationPart.GetPartById("rId2"); 
      string firstName = "Test User"; 
      SlidePart newSlide = CloneSlidePart(presentationPart, slideTemplate); 
      InsertContent(newSlide, firstName); 
      newSlide.Slide.Save(); 
      DeleteTemplateSlide(presentationPart, slideTemplate); 
      presentationPart.Presentation.Save(); 
     } 
    } 

正如你所看到的我用「測試用戶」來覆蓋佔位符,它就像一個魅力。 我需要爲此pptx文件添加一個圖像(作爲佔位符)。

當我這樣做(並再次運行代碼)我得到一個損壞的pptx文件? 錯誤消息:在output.pptx

PowerPoint中除去不可讀內容 。您應該查看 此演示文稿以確定是否 任何內容意外更改 或刪除。

編輯:如果我嘗試的原代碼(這是略作修改,因爲我沒有了Adventureworks),我得到一些其他類型的錯誤信息:

此文件可能已損壞的以下原因: 第三方XML編輯器有時會創建與Microsoft Office XML規範不兼容的文件。 該文件被故意損壞,意圖損害您的計算機或您的數據。 從未知來源打開文件時要格外小心。 PowerPoint可以嘗試從文件中恢復數據,但某些演示文稿數據(如形狀,文本和格式)可能會丟失。 執行以下操作之一: 如果要從文件恢復數據,請單擊是。 如果您不想從文件中恢復數據,請單擊否。

+0

好,你找到了解決辦法!您可以使用旁邊的空心複選標記接受您自己的答案。 – 2010-10-08 14:20:35

回答

0

好的,對於此無用的帖子感到抱歉。我的錯。

解決方案:

string imgId = "rIdImg" + i; 
       ImagePart imagePart = newSlide.AddImagePart(ImagePartType.Jpeg, imgId); 
       MemoryStream stream3 = new MemoryStream(); 
       using (FileStream file = File.Open(@"C:\Users\x\Desktop\Test.jpg", FileMode.Open)) 
       { 
        byte[] buffer = new byte[file.Length]; 
        file.Read(buffer, 0, (int)file.Length); 
        stream3.Write(buffer, 0, buffer.Length); 
        imagePart.FeedData(new MemoryStream(buffer)); 
       } 
       SwapPhoto(newSlide, imgId);