使用 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 存储为文件?
我正在尝试建立一个可以上传 .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 存储为文件?