使用Microsoft Office Interop转换文档为HTML

在开发过程中,开发者经常需要将Word文档或Excel表格转换为HTML格式,以便在Web页面上显示。本文将介绍如何使用Microsoft Office Interop API来实现这一转换过程。

Microsoft Office Interop库的引用

在开始之前,请确保系统中已安装Microsoft Office,因为Interop API需要依赖Office组件。如果尚未安装,请先进行安装。

安装完成后,需要在项目中添加所需的Microsoft Office Interop库引用。这包括:

要添加这些引用,请在解决方案资源管理器中右键单击“引用”文件夹,选择“添加引用”,然后在COM选项卡中选择相应的库。

使用代码

在构建代码之前,需要确保已安装MS Office,并配置好ckEditor。因为本文使用ckEditor来显示从文档或Excel表格生成的HTML内容。

<controls> <add tagPrefix="CKEditor" assembly="CKEditor.NET" namespace="CKEditor.NET" /> </controls>

接下来,将实现一个类来将Word文档转换为HTML字符串。

public class DocToHtml { public string 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(); } }

同样,也需要一个类来将Excel表格转换为HTML字符串。

public class XlsToHtml { public string 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(); } }

为了根据文件扩展名调用实际的转换器,需要一个转换器定位器,它可以返回实际的转换器服务。

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,并在浏览器屏幕上呈现结果。

private void ConvertAndLoadDocumentInEditor() { string randamName = DateTime.Now.ToFileTime().ToString(); string relativePath = Server.MapPath("~/_Temp/"); string FilePath = relativePath + randamName + flDocument.FileName; string GeneratedName = randamName + flDocument.FileName.Split('.')[flDocument.FileName.Split('.').Length - 2] + ".html"; flDocument.SaveAs(FilePath); string FileToSave = HttpContext.Current.Server.MapPath("~/_Temp/") + GeneratedName; IConverter doc = ConverterLocator.Converter(FilePath, FileToSave); editor.Text = doc.Convert().ToString().Replace("", ""); }
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485