C#将.doc文件转换为.htm文件

4

我正在尝试将.doc文件转换为.htm格式,以便在ASP.NET MVC页面中查看。

我正在使用以下C#代码:

using Microsoft.Office.Core;
using Microsoft.Office.Interop.Word;

....

Microsoft.Office.Interop.Word.Application objWord = new Microsoft.Office.Interop.Word.Application();

            object source = @"C:\Users\XYZ\Desktop\ScreenShot.doc";
            object target = @"C:\Users\XYZ\Desktop\ScreenShot.html";
            object unknown = Type.Missing;
            objWord.Documents.Open(ref source, ref unknown,
                 ref unknown, ref unknown, ref unknown,
                 ref unknown, ref unknown, ref unknown,
                 ref unknown, ref unknown, ref unknown,
                 ref unknown, ref unknown, ref unknown, ref unknown);

            object format = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatRTF;
            objWord.ActiveDocument.SaveAs(ref target, ref format,
                    ref unknown, ref unknown, ref unknown,
                    ref unknown, ref unknown, ref unknown,
                    ref unknown, ref unknown, ref unknown,
                    ref unknown, ref unknown, ref unknown,
                    ref unknown, ref unknown);

我试图搜索将.doc (甚至是.ppt)转换为.htm格式的方法,但总是找到与上述类似的代码。

但我一直遇到这个异常:

检索具有CLSID {000209FF-0000-0000-C000-000000000046}的组件的COM类工厂失败,原因是以下错误:80040154类未注册(来自HRESULT的异常:0x80040154(REGDB_E_CLASSNOTREG))。

在此行:

Microsoft.Office.Interop.Word.Application objWord = new Microsoft.Office.Interop.Word.Application();

这是由于我安装了Word Starter 2010而不是完整的Office 2010引起的,还是有其他解决方案?


5
不要在服务器上自动化办公室。 - SLaks
@SLaks:你能否解释一下...谢谢。 - Jake
2
http://support.microsoft.com/kb/257757 - SLaks
@SLacks:我甚至在一个简单的C#控制台应用程序上尝试了这段代码,但仍然出现异常。 - Jake
有些相关:https://dev59.com/KlHTa4cB1Zd3GeqPPz5B - robi-y
@SLacks:我正在开发的项目只允许使用.NET功能,有其他解决方案吗? 确定这个问题与安装在计算机上的Microsoft Office版本无关吗? - Jake
2个回答

2

在服务器端使用MS Office的COM对象不是一个好主意。第一个问题是技术问题,有几个进程陷阱(即有时调用Quit()后,Excel/Word未能退出)。这不容易,但可以解决。

但是第二个问题是许可证问题。你需要为每个将使用MS Office的用户购买许可证。因此,如果你想在网络上使用它,你将面临严重的财务问题。

有几个库可以打开(保存、转换等)MS Office格式,而无需安装MS Office。我曾经使用过Aspose库,但还有其他几个库。


1

您遇到了此异常,因为COM对象未配置允许启动和访问权限给aspnet用户标识。

最好将应用程序池身份用户更改为“Network Service”,该用户具有足够的权限来执行COM+组件。

有关更多详细信息请查看此处


请问您能否解释一下如何更改应用程序池的身份标识? - Jake
从运行-->输入inetmgr,这将打开IIS管理器,选择附加到您的网站的应用程序池,然后从“操作”菜单中选择“高级设置”,然后使用“身份”选项更改用户。 - Ahmed Atia

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接