`
suizhikuo
  • 浏览: 27277 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

完成类似QQ邮箱中‘HTML方式查看’功能查看Office文件

 
阅读更多

我们在做一些系统的 下载模块 或者 内部邮箱 的时候,有些使用系统的人可能并没有安装office,但是又急需查看附件的内容甚至图片等等,下载安装一个Office又不大现实(时间要求紧?在某个网吧?在朋友家里?),那么如何查看一些常用的附件呢?

其实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>
///<paramname="PptFilePath">PPT文件路径</param>
publicstaticvoidPptToHtmlFile(stringPptFilePath)
{
Microsoft.Office.Interop.PowerPoint.Applicationppt
=newMicrosoft.Office.Interop.PowerPoint.Application();
Microsoft.Office.Interop.PowerPoint.PresentationpptFile
=null;
try
{
//获得html文件名
stringhtmlFileName=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>
///<paramname="ExcelFilePath">Excel文件路径</param>
publicstaticvoidExcelToHtmlFile(stringExcelFilePath)
{
Microsoft.Office.Interop.Excel.ApplicationexcelApp
=newMicrosoft.Office.Interop.Excel.Application();
Microsoft.Office.Interop.Excel.WorkbookoBook
=null;
//缺省参数
objectUnknown=Type.Missing;
try
{
//目标html文件路径
objectTarget=ExcelFilePath.Substring(0,ExcelFilePath.LastIndexOf("."))+".html";
//为了保险,只读方式打开
objectreadOnly=true;
//指定另存为格式(html)
objectformat=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>
///<paramname="WordFilePath">Word文档格式</param>
publicstaticvoidWordToHtmlFile(stringWordFilePath)
{
Microsoft.Office.Interop.Word.ApplicationnewApp
=newMicrosoft.Office.Interop.Word.Application();
Microsoft.Office.Interop.Word.Documentdoc
=null;
//缺省参数
objectUnknown=Type.Missing;
try
{
//指定原文件和目标文件
objectSource=WordFilePath;
objectTarget=WordFilePath.Substring(0,WordFilePath.LastIndexOf("."))+".html";
//为了保险,只读方式打开
objectreadOnly=true;
//指定另存为格式(html)
objectformat=Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatHTML;

//打开doc文件
doc=newApp.Documents.Open(refSource,refUnknown,refreadOnly,
refUnknown,refUnknown,refUnknown,refUnknown,refUnknown,refUnknown,
refUnknown,refUnknown,refUnknown,refUnknown,refUnknown,refUnknown,refUnknown);

//转换格式
doc.SaveAs(refTarget,refformat,
refUnknown,refUnknown,refUnknown,refUnknown,refUnknown,refUnknown,refUnknown,
refUnknown,refUnknown,refUnknown,refUnknown,refUnknown,refUnknown,refUnknown);
}
finally
{
if(doc!=null)
{
//关闭文档和Word程序
doc.Close(refUnknown,refUnknown,refUnknown);
}
newApp.Quit(
refUnknown,refUnknown,refUnknown);
GC.Collect();
}
}

有了这三个方法,我们可以在上传文件时将对应的office文件转成html的文件,跟office文件放在同一个目录中,同时加一个对应的链接“HTML方式查看”即可。

如果是第二期添加这个功能,那可以在获得文件列表的时候,先取得文件的扩展名,然后再查看有没有对应的HTML文件,如果没有,则即时生成一个,很方便,不过如果量很大的话,转换的速度会比较慢,最好是写一个winform的程序遍历整个目录,先把html文件生成一遍,这样再打开就会很快了。

简单的写一个如下:

///<summary>
///生成文件对应的HTML版本(没有考虑HTML文件已经存在的处理)
///</summary>
///<paramname="fileFullName">文件路径</param>
///<returns>如果生成了对应的HTML文件,返回true,如果不需要生成HTML文件,返回flase</returns>
publicstaticboolConvertFileToHtml(stringfileFullName)
{
System.IO.FileInfofile
=newSystem.IO.FileInfo(fileFullName);
if(file.Exists)
{
stringstrExt=file.Extension.Substring(1).ToLower();

switch(strExt)
{
case"doc":
case"docx":
WordToHtmlFile(fileFullName);
returntrue;
case"xls":
case"xlsx":
ExcelToHtmlFile(fileFullName);
returntrue;
case"ppt":
case"pptx":
PptToHtmlFile(fileFullName);
returntrue;
default:
returnfalse;
}
}
returnfalse;
}

这样就OK了

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics