【问题标题】:Read uploaded pptx file with Open XML SDK使用 Open XML SDK 读取上传的 pptx 文件
【发布时间】:2015-06-08 20:18:24
【问题描述】:

我正在尝试建立一个可以上传 .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 均未被识别。我在这里错过了什么?

非常感谢!

【问题讨论】:

    标签: c# asp.net vb.net visual-studio-2013 openxml-sdk


    【解决方案1】:

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

    【讨论】:

    • 感谢您的帮助。我的问题更为基本:当我添加对 Open XML SDK 的引用时,它应该在智能感知代码建议中可用。但对我来说,它没有。我开始输入presentationdocument,但没有任何反应,所以我认为它没有被识别。任何想法我做错了什么?
    【解决方案2】:

    问了一个问题,但是, 是否添加了导入部分?

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

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

    【讨论】:

    • 就是这样。我已经添加了参考,但完全忘记了导入部分。在过去的 2 年里,我一直在 VBA 中“编程”,它毁了我的大脑。就像我必须重新学习编程一样。谢谢您的帮助。我觉得自己像个白痴。
    • 另外,我正在使用 dll-s。使用gac有优势吗?这将是一个非常基本的登陆站点,只有一个 aspx 页面,一些 javascript,仅此而已。
    • 通常使用dll更好,否则你必须在服务器上安装OpenXml
    • 我会坚持使用 dll。再次感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    • 2016-03-19
    • 1970-01-01
    • 2013-02-16
    相关资源
    最近更新 更多