我们在做一些系统的 下载模块 或者 内部邮箱 的时候,有些使用系统的人可能并没有
安装
office,但是又急需查看附件的内容甚至图片等等,下载安装一个Office又不大现实(时间要求紧?在某个网吧?在朋友家里?),那么如何查看一些常用的附件呢?
其实QQ邮箱有个功能很好,它可以以 HTML方式查看 Office文件,例如Word文档、Excel表格已经PowerPoint幻灯片等,这个功能有很多实现的办法,例如使用SPS就是办法之一,但是其实大部分时候,我们用不到SPS,或者由于正版软件太贵了,那如何使用ASP.NET 2.0(C#)来实现这个功能?
注意:以下代码在vs2008,office2007,windowsxp下 测试 通过,项目需要添加Excel 12、Word12、PowerPoint12、Office12 四个com引用
复制代码
有了这三个方法,我们可以在
上传
文件时将对应的office文件转成html的文件,跟office文件放在同一个目录中,同时加一个对应的链接“HTML方式查看”即可。
如果是第二期添加这个功能,那可以在获得文件列表的时候,先取得文件的扩展名,然后再查看有没有对应的HTML文件,如果没有,则即时生成一个,很方便,不过如果量很大的话,转换的速度会比较慢,最好是写一个winform的程序遍历整个目录,先把html文件生成一遍,这样再打开就会很快了。
简单的写一个如下:
复制代码
这样就OK了
其实QQ邮箱有个功能很好,它可以以 HTML方式查看 Office文件,例如Word文档、Excel表格已经PowerPoint幻灯片等,这个功能有很多实现的办法,例如使用SPS就是办法之一,但是其实大部分时候,我们用不到SPS,或者由于正版软件太贵了,那如何使用ASP.NET 2.0(C#)来实现这个功能?
注意:以下代码在vs2008,office2007,windowsxp下 测试 通过,项目需要添加Excel 12、Word12、PowerPoint12、Office12 四个com引用
- /// <summary>
- /// 将PPT文件转换成HTML格式
- /// </summary>
- /// <param name="PptFilePath">PPT文件路径</param>
- public static void PptToHtmlFile(string PptFilePath)
- {
- Microsoft.Office.Interop.PowerPoint.Application ppt = new Microsoft.Office.Interop.PowerPoint.Application();
- Microsoft.Office.Interop.PowerPoint.Presentation pptFile = null;
- try
- {
- //获得html文件名
- string htmlFileName = PptFilePath.Substring(0, PptFilePath.LastIndexOf(".")) + ".html";
- //打开一个ppt文件
- pptFile = ppt.Presentations.Open(PptFilePath, Microsoft.Office.Core.MsoTriState.msoTrue,
- Microsoft.Office.Core.MsoTriState.msoCTrue, Microsoft.Office.Core.MsoTriState.msoFalse);
- //转换成html格式
- pptFile.SaveAs(htmlFileName, Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsHTML,
- Microsoft.Office.Core.MsoTriState.msoCTrue);
- }
- finally
- {
- if (pptFile != null)
- {
- pptFile.Close();
- }
- ppt.Quit();
- GC.Collect();
- }
- }
-
- /// <summary>
- /// 将Excel文件转换成HTML格式
- /// </summary>
- /// <param name="ExcelFilePath">Excel文件路径</param>
- public static void ExcelToHtmlFile(string ExcelFilePath)
- {
- Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
- Microsoft.Office.Interop.Excel.Workbook oBook = null;
- // 缺省参数
- object Unknown = Type.Missing;
- try
- {
- //目标html文件路径
- object Target = ExcelFilePath.Substring(0, ExcelFilePath.LastIndexOf(".")) + ".html";
- //为了保险,只读方式打开
- object readOnly = true;
- // 指定另存为格式(html)
- object format = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;
-
- //打开Excel文件
- oBook = excelApp.Workbooks.Open(ExcelFilePath, Unknown, readOnly,
- Unknown, Unknown, Unknown, Unknown, Unknown, Unknown,
- Unknown, Unknown, Unknown, Unknown, Unknown, Unknown);
-
- // 转换格式
- oBook.SaveAs(Target, format, Unknown, Unknown, Unknown, Unknown,
- Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange,
- Unknown, Unknown, Unknown, Unknown, Unknown);
- }
- finally
- {
- if (oBook != null)
- {
- oBook.Close(false, Unknown, Unknown);
- }
- excelApp.Quit();
- GC.Collect();
- }
- }
-
- /// <summary>
- /// 将Word文档转换成HTML格式
- /// </summary>
- /// <param name="WordFilePath">Word文档格式</param>
- public static void WordToHtmlFile(string WordFilePath)
- {
- Microsoft.Office.Interop.Word.Application newApp = new Microsoft.Office.Interop.Word.Application();
- Microsoft.Office.Interop.Word.Document doc = null;
- // 缺省参数
- object Unknown = Type.Missing;
- try
- {
- // 指定原文件和目标文件
- object Source = WordFilePath;
- object Target = WordFilePath.Substring(0, WordFilePath.LastIndexOf(".")) + ".html";
- //为了保险,只读方式打开
- object readOnly = true;
- // 指定另存为格式(html)
- object format = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatHTML;
-
- // 打开doc文件
- doc = newApp.Documents.Open(ref Source, ref Unknown, ref readOnly,
- 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.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);
- }
- finally
- {
- if (doc != null)
- {
- // 关闭文档和Word程序
- doc.Close(ref Unknown, ref Unknown, ref Unknown);
- }
- newApp.Quit(ref Unknown, ref Unknown, ref Unknown);
- GC.Collect();
- }
- }
如果是第二期添加这个功能,那可以在获得文件列表的时候,先取得文件的扩展名,然后再查看有没有对应的HTML文件,如果没有,则即时生成一个,很方便,不过如果量很大的话,转换的速度会比较慢,最好是写一个winform的程序遍历整个目录,先把html文件生成一遍,这样再打开就会很快了。
简单的写一个如下:
- /// <summary>
- /// 生成文件对应的HTML版本(没有考虑HTML文件已经存在的处理)
- /// </summary>
- /// <param name="fileFullName">文件路径</param>
- /// <returns>如果生成了对应的HTML文件,返回true,如果不需要生成HTML文件,返回flase</returns>
- public static bool ConvertFileToHtml(string fileFullName)
- {
- System.IO.FileInfo file = new System.IO.FileInfo(fileFullName);
- if (file.Exists)
- {
- string strExt = file.Extension.Substring(1).ToLower();
-
- switch (strExt)
- {
- case "doc":
- case "docx":
- WordToHtmlFile(fileFullName);
- return true;
- case "xls":
- case "xlsx":
- ExcelToHtmlFile(fileFullName);
- return true;
- case "ppt":
- case "pptx":
- PptToHtmlFile(fileFullName);
- return true;
- default:
- return false;
- }
- }
- return false;
- }