C#实现将PPT转换成HTML的方法
本文是一个C#的小程序,主要实现将ppt转换成html的功能,方法很多,此处与大家分享一下,希望能对大家的项目开发起到一定的借鉴作用。
主要功能代码如下:
usingSystem; usingSystem.Collections.Generic; usingSystem.Text; usingSystem.IO; usingPPT=Microsoft.Office.Interop.PowerPoint; usingSystem.Reflection; namespaceWritePptDemo { classProgram { staticvoidMain(string[]args) { stringpath;//文件路径变量 PPT.ApplicationpptApp;//Excel应用程序变量 PPT.PresentationpptDoc;//Excel文档变量 PPT.PresentationpptDoctmp; path=@"C:\MyPPT.ppt";//路径 pptApp=newPPT.ApplicationClass();//初始化 //如果已存在,则删除 if(File.Exists((string)path)) { File.Delete((string)path); } //由于使用的是COM库,因此有许多变量需要用Nothing代替 ObjectNothing=Missing.Value; pptDoc=pptApp.Presentations.Add(Microsoft.Office.Core.MsoTriState.msoFalse); pptDoc.Slides.Add(1,Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutText); stringtext="示例文本"; foreach(PPT.SlideslideinpptDoc.Slides) { foreach(PPT.Shapeshapeinslide.Shapes) { shape.TextFrame.TextRange.InsertAfter(text); } } //WdSaveFormat为Excel文档的保存格式 PPT.PpSaveAsFileTypeformat=PPT.PpSaveAsFileType.ppSaveAsDefault; //将excelDoc文档对象的内容保存为XLSX文档 pptDoc.SaveAs(path,format,Microsoft.Office.Core.MsoTriState.msoFalse); //关闭excelDoc文档对象 pptDoc.Close(); //关闭excelApp组件对象 pptApp.Quit(); Console.WriteLine(path+"创建完毕!"); Console.ReadLine(); stringpathHtml=@"c:\MyPPT.html"; PPT.Applicationpa=newPPT.ApplicationClass(); pptDoctmp=pa.Presentations.Open(path,Microsoft.Office.Core.MsoTriState.msoTrue,Microsoft.Office.Core.MsoTriState.msoFalse,Microsoft.Office.Core.MsoTriState.msoFalse); PPT.PpSaveAsFileTypeformatTmp=PPT.PpSaveAsFileType.ppSaveAsHTML; pptDoctmp.SaveAs(pathHtml,formatTmp,Microsoft.Office.Core.MsoTriState.msoFalse); pptDoctmp.Close(); pa.Quit(); Console.WriteLine(pathHtml+"创建完毕!"); } } }
以上程序是使用C#先创建一个ppt文件并向里面写入了文字,然后再把此ppt转换成html ,对于上面程序需要说明的其实就是
引用dll的问题,在项目中添加引用,在com组件中选择microsoftpowerpoint11.0object library,而如果你的电脑没有安装office2003是不会有这个的,而如果安装的是office2007则是microsoftpowerpoint12.0object library。而且即使你引用成功后,还是会编译不通过,是因为少安装了office PIA ,在安装office时,如果你是选择的典型安装是不会安装这个的,因为这个只针对开发人员才会用到。可以到网上下载一个officePIA安装下就ok了
Office文件转换成Html格式功能代码如下:
usingMicrosoft.Office.Core; usingMicrosoft.Office.Interop.PowerPoint; usingSystem; usingSystem.Collections.Generic; usingSystem.Linq; usingSystem.Text; usingSystem.Web; usingSystem.IO; usingSystem.Text.RegularExpressions; usingNd.Webs; usingAspose.Cells; usingAspose.Words; usingND.CommonHelper; usingMicrosoft.Office.Interop.PowerPoint; usingMicrosoft.Office.Core; namespaceApi.Note.Base { #regionOffice文件转换成Html格式 classOfficeHtmlBo { #regionInsertHeadHtml ///<summary> ///InsertHeadHtml ///</summary> ///<paramname="WordFilePath">InsertHeadHtml</param> privatestringInsertHeadHtml(stringstrHtml,stringrealPath) { intindex=strHtml.IndexOf("<body"); strHtml=strHtml.Insert(index,"<divstyle='height:60px;font-size:14px;margin:0px0px12px0px;padding:14px4px12px12px;line-height:24px;height:1%;'>以下是该文档的HTML预览效果。<br/><span>由于是网页提取显示word中的内容,有可能部分显示与源文档中有差异,如想查看更准确的信息,</span>您可以点击 <astyle='color:6699FF;text-decoration:underline;'href='/Lib/UdControls/Download.aspx?action=Download&appFormCode="+HttpContext.Current.Request.QueryString["appFormCode"].ToString()+"&path="+HttpContext.Current.Request.QueryString["path"].ToString()+"&encrypt="+HttpContext.Current.Request.QueryString["encrypt"].ToString()+"'><b>下载原始附件</b></a></div>"); Regexreg=newRegex(@"(?<start><img[^>]+?src="")(?<src>[^""]+?)(?<end>""[^>]+?>)"); strHtml=reg.Replace(strHtml,delegate(Matchm) { returnstring.Format("{0}{1}{2}{3}", m.Groups["start"].Value, realPath, m.Groups["src"].Value, m.Groups["end"].Value ); }); returnstrHtml; } #endregion #regionGetLeftStr ///<summary> ///截取字符串左边指定长度 ///</summary> ///<paramname="str"></param> ///<paramname="length"></param> ///<returns></returns> publicstringGetLeftStr(stringstr,intlength) { length=length*2; stringtempStr=""; inti=0; foreach(charcinstr) { tempStr+=c.ToString(); if(((int)c>=33)&&((int)c<=126)) { //字母和符号原样保留 i+=1; } else { i+=2; } if(i>=length) { returntempStr; } } returnstr; } #endregion #region将Word文档转换成HTML格式 ///<summary> ///将Word文档转换成HTML格式 ///</summary> ///<paramname="WordFilePath">Word文档格式</param> privatevoidWordToHtmlFile(stringWordFilePath) { try { //指定原文件和目标文件 stringrealPath=WordFilePath.Substring(0,WordFilePath.LastIndexOf("/")+1); WordFilePath=System.Web.HttpContext.Current.Server.MapPath(WordFilePath); objecttarget=WordFilePath.Substring(0,WordFilePath.LastIndexOf("."))+".html"; //stringrealPath=WordFilePath.Substring(0,WordFilePath.LastIndexOf("."))+".html"; if(!File.Exists(target.ToString())) { Documentdoc=newDocument(WordFilePath); doc.Save(target.ToString(),SaveFormat.Html); } StreamReadersr=newStreamReader(target.ToString(),Encoding.Default); stringstrHtml=sr.ReadToEnd(); strHtml=InsertHeadHtml(strHtml,realPath); HttpContext.Current.Response.Write(strHtml); sr.Close(); } catch(Exceptionex) { //记录异常 LogEntrylogEntry=newLogEntry(); logEntry.Message=ex.Message; logEntry.Title="---->将Word文档转换成HTML格式异常[WordToHtmlFile]"; logEntry.TimeStamp=DateTime.Now; logEntry.LogEntryType=LogEntryType.Error; logEntry.LogCatalog=LogCatalog.ExceptionLog; logEntry.StackTrace=ex.StackTrace; LogPositionlogPosition=LogPosition.FileLog; stringpositionParameter=SysConfig.ToString(SysConfig.GetAppSetting("LogPath")); SysLogger.Write(logEntry,logPosition,positionParameter); } } #endregion #region将Excel文件转换成HTML格式 ///<summary> ///将Excel文件转换成HTML格式 ///</summary> ///<paramname="ExcelFilePath">Excel文件路径</param> privatevoidExcelToHtmlFile(stringExcelFilePath) { try { stringrealPath=ExcelFilePath.Substring(0,ExcelFilePath.LastIndexOf("/")+1); intindex=ExcelFilePath.LastIndexOf("/"); stringfileName; if(ExcelFilePath.IndexOf(":")!=-1) { fileName=ExcelFilePath.Split(newchar[]{':'})[0].ToString(); fileName=GetLeftStr(fileName.Substring(0,fileName.LastIndexOf(".")),10)+fileName.Substring(fileName.LastIndexOf(".")); fileName=HttpUtility.UrlEncode(fileName,Encoding.UTF8); } else { fileName=ExcelFilePath.Substring(index+1,ExcelFilePath.Length-index-1); fileName=GetLeftStr(fileName.Substring(0,fileName.LastIndexOf(".")),10)+fileName.Substring(fileName.LastIndexOf(".")); //编码 fileName=HttpUtility.UrlEncode(fileName,Encoding.UTF8); } fileName=fileName.Substring(0,fileName.LastIndexOf(".")); ExcelFilePath=System.Web.HttpContext.Current.Server.MapPath(ExcelFilePath); //目标html文件路径 objecttarget=ExcelFilePath.Substring(0,ExcelFilePath.LastIndexOf("."))+".html"; stringtarget2=ExcelFilePath.Substring(0,ExcelFilePath.LastIndexOf("\\"))+"\\"+fileName+"_files\\sheet001.htm"; if(!File.Exists(target.ToString())) { //为了保险,只读方式打开 //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); WorkbookwBook=newWorkbook(); wBook.Open(ExcelFilePath); wBook.Save(target.ToString(),FileFormatType.Html); } StreamReadersr=newStreamReader(target2.ToString(),Encoding.Default); stringstrHtml=sr.ReadToEnd(); strHtml=InsertHeadHtml(strHtml,realPath); strHtml=strHtml.Replace("window.location.replace",""); strHtml=strHtml.Replace("filelist.xml",realPath+"/"+fileName+"_files/filelist.xml"); strHtml=strHtml.Replace("stylesheet.css",realPath+"/"+fileName+"_files/stylesheet.css"); HttpContext.Current.Response.Write(strHtml); sr.Close(); } catch(Exceptionex) { //记录异常 LogEntrylogEntry=newLogEntry(); logEntry.Message=ex.Message; logEntry.Title="---->将Excel文件转换成HTML格式[ExcelToHtmlFile]"; logEntry.TimeStamp=DateTime.Now; logEntry.LogEntryType=LogEntryType.Error; logEntry.LogCatalog=LogCatalog.ExceptionLog; logEntry.StackTrace=ex.StackTrace; LogPositionlogPosition=LogPosition.FileLog; stringpositionParameter=SysConfig.ToString(SysConfig.GetAppSetting("LogPath")); SysLogger.Write(logEntry,logPosition,positionParameter); } } #endregion #region将PPT文件转换成HTML格式 ///<summary> ///将PPT文件转换成HTML格式 ///</summary> ///<paramname="PptFilePath">PPT文件路径</param> privatevoidPptToHtmlFile(stringPptFilePath) { ApplicationClassac=newApplicationClass(); PresentationpptFile=null; try { stringrealPath=PptFilePath.Substring(0,PptFilePath.LastIndexOf("."))+".html"; PptFilePath=System.Web.HttpContext.Current.Server.MapPath(PptFilePath); //获得html文件名 objecttarget=PptFilePath.Substring(0,PptFilePath.LastIndexOf("."))+".html"; if(!File.Exists(target.ToString())) { if(PptFilePath.Contains(".pptx")) { pptFile=ac.Presentations.Open2007(PptFilePath,MsoTriState.msoCTrue,MsoTriState.msoCTrue,MsoTriState.msoFalse,MsoTriState.msoFalse); pptFile.SaveAs(target.ToString(),PpSaveAsFileType.ppSaveAsHTML,MsoTriState.msoCTrue); } elseif(PptFilePath.Contains(".ppt")) { pptFile=ac.Presentations.Open(PptFilePath,MsoTriState.msoCTrue,MsoTriState.msoCTrue,MsoTriState.msoFalse); pptFile.SaveAs(target.ToString(),PpSaveAsFileType.ppSaveAsHTML,MsoTriState.msoCTrue); } } //StreamReadersr=newStreamReader(target.ToString(),Encoding.Default); //stringstrHtml=sr.ReadToEnd(); //Response.Write(strHtml); HttpContext.Current.Response.Redirect(realPath); } finally { if(pptFile!=null) { pptFile.Close(); } ac.Quit(); GC.Collect(); } } #endregion } #endregion }