在开发企业级Web服务器解决方案时,意外地遇到了开发者可能犯下的最大的错误之一:办公自动化。在发现上述Excel自动化的疯狂之前,读了Scott Berkun的“#46 - 为什么软件糟糕”的文章,决定将糟糕推向极致,编写一个严重依赖Office自动化的ASP.NETWeb服务器应用程序。想通过自动化测试来给这个Web应用程序施压,以确定这是多么糟糕的一个主意。
顺便说一下,这里是讨论为什么不要做这个的链接:。当然,遇到了上述链接中描述的几乎所有问题。多年没有使用Office自动化,对大多数Office应用程序支持的“另存为Web”功能印象深刻。
大约在这个项目进行一个小时后,不顾一切(以及适当的OOP实践),最终得到了一个转换器类(OfficeHTMLConverter),它能够将Excel、PowerPoint、Visio和Word文件转换为HTML网页。OfficeToHTMLWeb项目是这个类的宿主,并使用一个母版页,它处理文档上传、转换以及其他一些额外的功能,比如页面趋势和每个页面的个人记事本。页面趋势只在主页上显示,个人记事本功能只有在登录后才能工作。然而,每个页面的页脚都有一个上传文档的部分。
与其费心使用数据库,选择使用本地XML数据集来跟踪数据。这些数据集是通过BusinessObjectFramework DLL管理的,已经将其包含在解决方案中。对不起,不能发布这个框架的源代码。然而,可以在自己的项目中使用这个DLL。已经包含了一个SampleBusinessObject项目来演示它的使用,尽管Web应用程序只使用了BusinessObjectFramework的帮助函数。
解决方案和项目结构
Visual Studio 2012解决方案和项目结构如下所示,还有一些有趣的点。
Office文档上传和HTML转换
任何基于母版页的Web页面都会在页面的页脚渲染一个上传文档的部分。可以上传任何Microsoft Office PowerPoint、Excel、Visio或Word文档。上传后,Office文档通过OfficeHTMLConverter.Converter类转换为HTML。简单地上传一个PowerPoint、Excel、Visio或Word文档,就会在提交它的页面上创建一个链接。
所有上传的文档链接都具有JavaScript预览窗口……而且,点击后,链接本身会在单独的页面中打开……
有趣的点
与其用技术细节让感到厌烦,将这个完全功能性的、免费的解决方案留给来研究。大部分繁重的工作发生在Site.Master.cs中。BusinessObjectFramework.DLL提供了XML数据集的读写功能。