使用 Open XML SDK 读取上传的 pptx 文件

Read uploaded pptx file with Open XML SDK

我正在尝试建立一个可以上传 .pptx 文件的网站,并且会检查一些方面(例如幻灯片计数)。我有 Open XML SDK 2.5 并且添加了对它的引用。然而,当我尝试使用 SDK 中的命令时,它们不可用。

(另外,我真的需要内存流来处理文件吗?我不想存储文件,只是从中提取一些细节。)

我的代码在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 均未被识别。我在这里错过了什么?

非常感谢!

上传的文件以流的形式出现,直到您实际将其写入某个位置。您不会在问题提供的代码中这样做。您可以将 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 关于检索幻灯片计数。

我们有疑问,但是, 您是否添加了导入部分?

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

您是使用 gac 中的引用还是将 OpenXml dll 存储为文件?