使用 Microsoft Interop API 将 .doc、.docx、.dot、.dotx 和 .xls、.xlsx、.rtf 转换为 HTML





5.00/5 (11投票s)
使用 Microsoft Office Interop API 将 Word 文档和 Excel 工作表转换为 HTML 文件,并将结果渲染回客户端浏览器。
目录
- 引言。
- Microsoft Office Interop 库
- 添加 Microsoft Interop 库的引用。
- 使用代码
- 访问转换器功能
- 摘要
- 免责声明
引言
本文档介绍了如何使用 Microsoft Office Interop API 将 Word 文档、Excel 工作表和文档模板转换为 HTML 文件,并在客户端浏览器上渲染。有时开发者发现将 Excel 工作表和文档转换为等效的 HTML 格式很困难,这时 Office Interop API 是一个非常方便的解决方案。
Microsoft Office Interop 库
在使用 Microsoft Office Interop API 之前,您必须在系统中安装 Microsoft Office。没有 MS Office 就无法运行 Microsoft Office Interop API。如果您尚未安装 MS Office,请先安装。
添加 Microsoft Interop 库的引用
如果您已安装 MS Office,请添加所需的 Microsoft Office Interop 库的引用。
- Microsoft Office Excel 库。
- Microsoft Office Word 库
- Microsoft Office 对象库
添加库引用的步骤
- 在解决方案的 References 文件夹上右键单击
- 点击“添加引用”
- 点击“COM”选项卡
- 选择 Microsoft Office 8.0 或 14.0 对象库,按住 Control 键,然后选择 Microsoft Office Excel 库和 Microsoft Office Word 库
- 点击“确定”按钮。
注意:程序集名称可能有所不同,这取决于您计算机上安装的 Office 版本。
使用代码
在实际构建代码之前,您必须在您的 Office 中安装 MS Office,还需要配置 ckEditor。因为我使用 ckEditor 来显示从文档或 Excel 工作表中生成的 HTML 内容。请将以下配置添加到您的 `web.config` 文件中的页面设置中。
<controls>
<add tagPrefix="CKEditor" assembly="CKEditor.NET" namespace="CKEditor.NET"/>
</controls>
DocToHtml 类
Word 文档到 HTML 的转换已在下面的类中实现,这是转换 doc 文件到 HTML 字符串的实际代码片段。
public StringBuilder Convert()
{
Application objWord = new Application();
if (File.Exists(FileToSave))
{
File.Delete(FileToSave);
}
try
{
objWord.Documents.Open(FileName: FullFilePath);
objWord.Visible = false;
if (objWord.Documents.Count > 0)
{
Microsoft.Office.Interop.Word.Document oDoc = objWord.ActiveDocument;
oDoc.SaveAs(FileName: FileToSave, FileFormat: 10);
oDoc.Close(SaveChanges: false);
}
}
finally
{
objWord.Application.Quit(SaveChanges: false);
}
return base.ReadConvertedFile();
}
XlsToHtml 类
Excel 工作表到 HTML 的转换已在下面的类中实现,这是转换 Excel 文件到 HTML 字符串的实际代码片段。
public StringBuilder Convert()
{
Application excel = new Application();
if (File.Exists(FileToSave))
{
File.Delete(FileToSave);
}
try
{
excel.Workbooks.Open(Filename: FullFilePath);
excel.Visible = false;
if (excel.Workbooks.Count > 0)
{
IEnumerator wsEnumerator = excel.ActiveWorkbook.Worksheets.GetEnumerator();
object format = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;
int i = 1;
while (wsEnumerator.MoveNext())
{
Microsoft.Office.Interop.Excel.Worksheet wsCurrent = (Microsoft.Office.Interop.Excel.Worksheet)wsEnumerator.Current;
String outputFile = "excelFile" + "." + i.ToString() + ".html";
wsCurrent.SaveAs(Filename: FileToSave, FileFormat: format);
++i;
break;
}
excel.Workbooks.Close();
}
}
finally
{
excel.Application.Quit();
}
return base.ReadConvertedFile();
}
ConverterLocator 类
为了根据文件扩展名调用实际的转换器,我们需要一个转换器定位器来返回实际的转换器服务。
例如,如果我上传 xls 文件,ConverterLocator 必须返回 XlsToHtml
类的实例;否则,如果上传的是文档文件,则 ConverterLocator
返回 DocToHtml
类的实例。
XlsToHtml
和 DocToHtml
类都实现了 IConverter
接口,该接口声明了 Convert
方法。
public static IConverter Converter(string fullFilePath, string fileToSave)
{
IConverter converter = null;
string ext = fullFilePath.Split('.').Last().ToLower();
switch (ext)
{
case "doc": converter = new DocToHtml { FileToSave = fileToSave, FullFilePath = fullFilePath };
break;
case "docx": converter = new DocToHtml { FileToSave = fileToSave, FullFilePath = fullFilePath };
break;
case "dot": converter = new DocToHtml { FileToSave = fileToSave, FullFilePath = fullFilePath };
break;
case "dotx": converter = new DocToHtml { FileToSave = fileToSave, FullFilePath = fullFilePath };
break;
case "rtf": converter = new DocToHtml { FileToSave = fileToSave, FullFilePath = fullFilePath };
break;
case "xls": converter = new XlsToHtml { FileToSave = fileToSave, FullFilePath = fullFilePath };
break;
case "xlsx": converter = new XlsToHtml { FileToSave = fileToSave, FullFilePath = fullFilePath };
break;
}
return converter;
}
访问转换器功能
我们已经准备好了一切,现在我们需要调用功能来将文档和 Excel 转换为 HTML,并将结果渲染到浏览器屏幕上。
下面是调用 IConverter
服务的代码片段。
private void ConvertAndLoadDocumentInEditor()
{
//To save every file with different name
string randamName = DateTime.Now.ToFileTime().ToString();
string relativePath = Server.MapPath("~") + "/_Temp/";
//Complete path of the file.
string FilePath = relativePath + randamName + flDocument.FileName;
string GeneratedName = randamName +
flDocument.FileName.Split('.')[flDocument.FileName.Split('.').Count() - 2] + ".html";
flDocument.SaveAs(FilePath);
//Converter functionality needs the file name to save as.
string FileToSave =
HttpContext.Current.Server.MapPath("~") + "_Temp\\" + GeneratedName;
//Get the instance of IConverter interface
IConverter doc = ConverterLocator.Converter(FilePath, FileToSave);
//Call the Converter class and set th test of editor to converted excel.
editor.Text = doc.Convert().ToString().Replace("�", "");
}
为了演示,我创建了一个 Word 文档,并使用 Microsoft Word Interop 将其转换为 HTML 文件。
这是我为演示创建的 Word 文档文件。
这是转换后的 HTML,我正在 FCKeditor 中显示转换后的 HTML。
摘要
通过以上介绍,您已经了解了如何将 Microsoft Word 文档转换为 HTML 文档并在浏览器中显示结果。通过使用 Interop API,您可以执行各种类型的工作,例如在运行时使用代码生成文档、Excel 工作表。此演示仅介绍了 Microsoft Interop API,您可以执行更复杂的操作。
免责声明
该项目完全基于我个人的学习、知识和研究,不参考任何其他项目。我使用 Microsoft Office Interop API 来撰写本文。我想告诉您,在 Web 服务器上运行 Microsoft Office 并不是最佳方法,因为它不被 Microsoft 推荐。相反,他们推荐使用 Open XML 在 Web 服务器上执行与 Microsoft Office 相关的操作。使用 OpenXML,您可以完成与 MS Word 或 MS Excel 几乎相同的所有工作。