2015-06-08 38 views
1

我試圖構建一個網站,您可以在其中上傳.pptx文件,並檢查一些方面(例如,幻燈片計數)。我有Open XML SDK 2.5,並添加了對它的引用。但是,當我嘗試使用SDK中的命令時,它們不可用。使用Open XML SDK讀取已上傳的pptx文件

(另外,我真的需要一個內存流處理文件?我不想來存儲文件,只是從中提取了一些細節。)

我的代碼是在VB,但我可以閱讀C#太:

Partial Class uploadpresentation 
Inherits System.Web.UI.Page 

Protected Sub Upload_Click(sender As Object, e As EventArgs) Handles Upload.Click 
    If PptxUpload.HasFile AndAlso PptxUpload.FileName.EndsWith(".pptx") Then 
     ProcessFile(PptxUpload.PostedFile) 
    End If 
End Sub 

Sub ProcessFile(ByVal pptxFile As HttpPostedFile) 

    using (MemoryStream memoryStream = new MemoryStream()) 

    Using doc As PresentationDocument = PresentationDocument.Open(fileName, False) 

    outputMessage = "Number of slides: " & argh 

End Sub 
End Class 

我的web.config有這樣的:

<assemblies> 
    <add assembly="DocumentFormat.OpenXml, Version=2.5.5631.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    <add assembly="WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/> 
    </assemblies> 

所以,無論是MemoryStream的,也不PresentationDocument是公認的。我在這裏錯過了什麼?

非常感謝!

回答

1

Wered問題,但是, 您是否添加了導入部分?

using DocumentFormat.OpenXml.Packaging; 
using DocumentFormat.OpenXml.Presentation; 
using DocumentFormat.OpenXml; 

您是否使用引用形式的gac或將OpenXml dll存儲爲文件?

+0

就是這樣。我已經添加了參考資料,但完全忘記了導入部分。在過去的2年裏,我一直在使用VBA進行「編程」,並且它傷害了我的大腦。這就像我必須重新學習重新編程。謝謝您的幫助。我覺得自己像個白癡。 – vacip

+0

另外,我正在使用dll-s。使用gac有什麼優勢嗎?這將是一個非常基本的登陸網站,有一個aspx頁面,一些javascript,就是這樣。 – vacip

+0

通常使用dll比較好,否則你將不得不在服務器上安裝OpenXml –

2

上傳的文件以流的形式出現,直到您實際將其寫入某個位置。你不會在問題提供的代碼中這樣做。您只需將HttpPostedFile的流屬性傳遞給Open方法即可。

這裏是你如何能夠得到滑數(C#):

public void ProcessFile(HttpPostedFile pptxFile) 
{ 
    int slideCount = 0; 

    using (var doc = PresentationDocument.Open(pptxFile.InputStream, false)) 
    { 
     PresentationPart presentationPart = doc.PresentationPart; 
     slideCount = presentationPart.SlideParts.Count(); 
    } 
} 

欲瞭解更多信息,請參見the documentation有關檢索滑數。

+0

謝謝你的幫助。我的問題更基本:當我添加對Open XML SDK的引用時,它應該在智能感知代碼建議中變得可用。但對我而言,事實並非如此。我開始輸入'presentationdocument',但沒有任何反應,所以我認爲它不被識別。任何想法我做錯了什麼? – vacip