我的任务是使用C#在服务器上生成PowerPoint文件。我基本上从一个模板开始,并以编程方式用数据库中的实时数据替换一些文本。过去一天我一直在研究这个领域,这就是我发现的:
PowerPoint内置了这种东西,这意味着它可以连接到外部数据源并提取数据。我发现,大多数这样的例子都使用在服务器上完成的PowerPoint自动化(我被建议不要这样做)或假设一个SQL Server后端。我们公司使用Oracle来满足RDMS的需求。 Oracle有一个名为Oracle BI的解决方案,但它需要一个全新的Web服务器设置来运行各种Java EE组件,而不需要。我没有看价格,但知道甲骨文并不便宜。它还需要在最终用户的机器上安装新软件,我们确实希望避免这种情况。
可以动态生成PowerPoint文件。对于这个问题基本上是最有帮助的公司(每个帮助论坛都指向他们,他们得到了所有好评如潮)是Aspose。它们具有.NET组件,可以处理您能想到的任何Office格式。问题是,它们天文数字昂贵。只有PowerPoint组件(最多10个开发人员的站点许可证)将花费3,995美元。
第三种可能性是在内部生成解决方案。毕竟,PPTX文件只是xml,对吧?好吧,仔细观察,PPTX似乎是一个gzip存档。它包含许多文件夹,每个文件夹包含许多XML文件。如果我错了,修改PPTX文件会纠正我,需要将文件解压缩到临时目录,读取XML文件并修改内容,然后再次打包所有内容并将文件写入响应流。也许有些库可以在不提取所有内容的情况下动态使用gzip流。
我的问题:是否有更简单的方法可以使用.NET来处理不需要使用压缩XML文件或购买非常昂贵的软件的PPTX文件?基本上,我们需要修改 PowerPoint文件,更改一些文本,并允许用户从Web服务器下载生成的文件。
答案 0 :(得分:4)
不要在Web服务器上使用Office Interop。这是一个全面的坏主意。
如果您仅替换不会更改的文件的文本占位符,那么在gzip存档中的xml文件中找到占位符的本地解决方案应该是可行的。 .Net已经有一段时间的zip支持,如果你能够使用.Net 4.5,它会得到很大的改进,所以你根本不需要将存档提取到一个临时位置。
PowerPoint也应该支持直接连接到Oracle,就像它支持连接到Sql Server一样(只需使用连接选项),而不需要特殊的Oracle BI内容。但是,我仍然更喜欢本土解决方案,因为只有当powerpoint文件能够直接访问您的数据库时才能使用,这通常只能在您的本地LAN环境或活动VPN中使用。
如果你想要更简单的文字替代品,可能会寻找Aspose的竞争对手。
答案 1 :(得分:4)
OpenXML是Microsoft的.Net库,可让您操作Office文档。它允许您打开PPTX文件并提供包装XML内容的对象模型。
以下是指向OpenXML SDK和MSDN documentation的链接。
我使用OpenXML让ASP.Net页面从数据库中动态生成Word文档。