VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > c#编程 >
  • C#教程之C#实现将PPT转换成HTML的方法

本文是一个C#的小程序,主要实现将ppt转换成html的功能,方法很多,此处与大家分享一下,希望能对大家的项目开发起到一定的借鉴作用。

主要功能代码如下:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
using System;
 using System.Collections.Generic;
 using System.Text;
 using System.IO;
 using PPT = Microsoft.Office.Interop.PowerPoint;
 using System.Reflection;
 
namespace WritePptDemo
 {
   class Program
   {
     static void Main(string[] args)
     {
       string  path;     //文件路径变量
 
       PPT.Application pptApp;   //Excel应用程序变量
        PPT.Presentation pptDoc;   //Excel文档变量
 
       PPT.Presentation pptDoctmp;
 
      path  = @"C:\MyPPT.ppt";   //路径
       pptApp =  new PPT.ApplicationClass();  //初始化
 
      //如果已存在,则删除
       if  (File.Exists((string)path))
       {
          File.Delete((string)path);
       }
 
      //由于使用的是COM库,因此有许多变量需要用Nothing代替
       Object  Nothing = Missing.Value;
       pptDoc =  pptApp.Presentations.Add(Microsoft.Office.Core.MsoTriState.msoFalse);
        pptDoc.Slides.Add(1,  Microsoft.Office.Interop.PowerPoint.PpSlideLayout.ppLayoutText);
 
       string text = "示例文本";
 
      foreach  (PPT.Slide slide in pptDoc.Slides)
       {
          foreach (PPT.Shape shape in slide.Shapes)
          {
            shape.TextFrame.TextRange.InsertAfter(text);
          }
       }
 
        //WdSaveFormat为Excel文档的保存格式
        PPT.PpSaveAsFileType format = 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();
 
 
       string  pathHtml = @"c:\MyPPT.html";
 
       PPT.Application pa = new PPT.ApplicationClass();
 
       pptDoctmp = pa.Presentations.Open(path,  Microsoft.Office.Core.MsoTriState.msoTrue,  Microsoft.Office.Core.MsoTriState.msoFalse,  Microsoft.Office.Core.MsoTriState.msoFalse);
        PPT.PpSaveAsFileType formatTmp = 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 组件中选择 microsoft powerpoint 11.0 object   library ,而如果你的电脑没有安装 office 2003 是不会有这个的,而如果安装的是office 2007 则是microsoft powerpoint 12.0 object   library。而且即使你引用成功后,还是会编译不通过,是因为少安装了 office   PIA  ,在安装office 时,如果你是选择的典型安装是不会安装这个的,因为这个只针对开发人员才会用到。可以到网上下载一个 office PIA 安装下就ok了
 
Office文件转换成Html格式功能代码如下:  

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
using  Microsoft.Office.Core;
 using Microsoft.Office.Interop.PowerPoint;
 
using System;
 using System.Collections.Generic;
 using System.Linq;
 using System.Text;
 using System.Web;
 using System.IO;
 using System.Text.RegularExpressions;
 using Nd.Webs;
 using Aspose.Cells;
 using Aspose.Words;
 using ND.CommonHelper;
 using Microsoft.Office.Interop.PowerPoint;
 using Microsoft.Office.Core;
 
namespace Api.Note.Base
 {
   #region Office文件转换成Html格式
   class OfficeHtmlBo
   {
     #region InsertHeadHtml
     /// <summary>
     /// InsertHeadHtml
     /// </summary>
     /// <param  name="WordFilePath">InsertHeadHtml</param>
     private string  InsertHeadHtml(string strHtml, string realPath)
     {
       int index  = strHtml.IndexOf("<body");
       strHtml =  strHtml.Insert(index, "<div  style='height:60px;font-size:14px;margin:0px 0px  12px 0px;padding:14px 4px 12px 12px;line-height:24px;height:1%;'>以下是该文档的HTML预览效果。<br/><span>由于是网页提取显示word中的内容,有可能部分显示与源文档中有差异,如想查看更准确的信息,</span>您可以点击 <a  style='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>");
 
      Regex  reg = new  Regex(@"(?<start><img[^>]+?src="")(?<src>[^""]+?)(?<end>""[^>]+?>)");
       strHtml =  reg.Replace(strHtml, delegate(Match m)
       {
          return string.Format("{0}{1}{2}{3}",
            m.Groups["start"].Value,
            realPath,
            m.Groups["src"].Value,
            m.Groups["end"].Value
            );
       });
 
       return strHtml;
     }
     #endregion
 
    #region GetLeftStr
     /// <summary>
     /// 截取字符串左边指定长度
     /// </summary>
     /// <param  name="str"></param>
     /// <param  name="length"></param>
     ///  <returns></returns>
     public string GetLeftStr(string  str, int length)
     {
       length =  length * 2;
       string  tempStr = "";
       int i = 0;
       foreach  (char c in str)
       {
          tempStr += c.ToString();
          if (((int)c >= 33) && ((int)c <= 126))
          {
            //字母和符号原样保留
            i += 1;
          }
          else
          {
            i += 2;
          }
          if (i >= length)
          {
            return tempStr;
          }
       }
       return  str;
     }
 
     #endregion
 
    #region 将Word文档转换成HTML格式
     /// <summary>
     /// 将Word文档转换成HTML格式
     /// </summary>
     /// <param  name="WordFilePath">Word文档格式</param>
     private void WordToHtmlFile(string  WordFilePath)
     {
       try
       {
          // 指定原文件和目标文件
          string realPath = WordFilePath.Substring(0,  WordFilePath.LastIndexOf("/") + 1);
          WordFilePath = System.Web.HttpContext.Current.Server.MapPath(WordFilePath);
          object target = WordFilePath.Substring(0,  WordFilePath.LastIndexOf(".")) + ".html";
          //string realPath = WordFilePath.Substring(0,  WordFilePath.LastIndexOf(".")) + ".html";
 
         if (!File.Exists(target.ToString()))
          {
            Document doc = new Document(WordFilePath);
            doc.Save(target.ToString(), SaveFormat.Html);
          }
         StreamReader sr = new StreamReader(target.ToString(), Encoding.Default);
          string strHtml = sr.ReadToEnd();
         strHtml = InsertHeadHtml(strHtml, realPath);
          HttpContext.Current.Response.Write(strHtml);
         sr.Close();
       }
       catch  (Exception ex)
       {
          //记录异常
          LogEntry logEntry = new LogEntry();
          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;
          LogPosition logPosition = LogPosition.FileLog;
          string positionParameter =  SysConfig.ToString(SysConfig.GetAppSetting("LogPath"));
          SysLogger.Write(logEntry, logPosition, positionParameter);
       }
     }
     #endregion
 
    #region 将Excel文件转换成HTML格式
     /// <summary>
     /// 将Excel文件转换成HTML格式
     /// </summary>
     /// <param  name="ExcelFilePath">Excel文件路径</param>
     private void  ExcelToHtmlFile(string ExcelFilePath)
     {
       try
       {
          string realPath = ExcelFilePath.Substring(0,  ExcelFilePath.LastIndexOf("/") + 1);
          int index = ExcelFilePath.LastIndexOf("/");
          string fileName;
          if (ExcelFilePath.IndexOf(":") != -1)
          {
            fileName = ExcelFilePath.Split(new char[] { ':' })[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文件路径
          object target = ExcelFilePath.Substring(0,  ExcelFilePath.LastIndexOf(".")) + ".html";
         string target2 = ExcelFilePath.Substring(0,  ExcelFilePath.LastIndexOf("\\")) + "\\" + fileName +  "_files\\sheet001.htm";
          if (!File.Exists(target.ToString()))
          {
            //为了保险,只读方式打开
            //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);
 
           Workbook wBook = new Workbook();
            wBook.Open(ExcelFilePath);
            wBook.Save(target.ToString(), FileFormatType.Html);
          }
 
         StreamReader sr = new StreamReader(target2.ToString(), Encoding.Default);
          string strHtml = 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  (Exception ex)
       {
          //记录异常
          LogEntry logEntry = new LogEntry();
          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;
          LogPosition logPosition = LogPosition.FileLog;
          string positionParameter =  SysConfig.ToString(SysConfig.GetAppSetting("LogPath"));
          SysLogger.Write(logEntry, logPosition, positionParameter);
       }
     }
     #endregion
 
    #region 将PPT文件转换成HTML格式
     /// <summary>
     /// 将PPT文件转换成HTML格式
     /// </summary>
     /// <param  name="PptFilePath">PPT文件路径</param>
     private void PptToHtmlFile(string  PptFilePath)
     {
        ApplicationClass ac = new ApplicationClass();
        Presentation pptFile = null;
       try
       {
          string realPath = PptFilePath.Substring(0,  PptFilePath.LastIndexOf(".")) + ".html";
          PptFilePath = System.Web.HttpContext.Current.Server.MapPath(PptFilePath);
          //获得html文件名
          object target = 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);
            }
            else if (PptFilePath.Contains(".ppt"))
            {
              pptFile = ac.Presentations.Open(PptFilePath, MsoTriState.msoCTrue,  MsoTriState.msoCTrue, MsoTriState.msoFalse);
              pptFile.SaveAs(target.ToString(), PpSaveAsFileType.ppSaveAsHTML,  MsoTriState.msoCTrue);
            }
          }
          //StreamReader sr = new StreamReader(target.ToString(), Encoding.Default);
          //string strHtml = sr.ReadToEnd();
          //Response.Write(strHtml);
          HttpContext.Current.Response.Redirect(realPath);
       }
       finally
       {
          if (pptFile != null)
          {
            pptFile.Close();
          }
          ac.Quit();
          GC.Collect();
       }
     }
     #endregion
   }
   #endregion
}


相关教程