• word、excel、ppt转换成html itprobie


    将word、excel、ppt转换成html,调用office的API;转换后的html样式会丢失

      1 using System;
      2 using System.Collections.Generic;
      3 
      4 using System.IO;
      5 using System.Threading;
      6 using System.Collections;
      7 using Excel = Microsoft.Office.Interop.Excel;
      8 using Word = Microsoft.Office.Interop.Word;
      9 
     10 /// <summary>
     11 /// Summary description for Class1
     12 /// </summary>
     13 public class Office2Html
     14 {
     15     public Office2Html()
     16     {
     17     }
     18 
     19     public static void WordToHtml(string filePath)
     20     {
     21         Word.Application word = new Word.Application();
     22         Type wordType = word.GetType();
     23         Word.Documents docs = word.Documents;
     24         Type docsType = docs.GetType();
     25         Word.Document doc = (Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { (object)filePath, true, true });
     26         Type docType = doc.GetType();
     27         string strSaveFileName = filePath.ToLower().Replace(Path.GetExtension(filePath).ToLower(), ".html");
     28         object saveFileName = (object)strSaveFileName;
     29         docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Word.WdSaveFormat.wdFormatFilteredHTML });
     30         docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, doc, null);
     31         wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
     32         Thread.Sleep(3000);//为了使退出完全,这里阻塞3秒
     33     }
     34 
     35 
     36     public static void WordToHtml(string filePath, string htmlFilePaht)
     37     {
     38         Word.Application word = new Word.Application();
     39         Type wordType = word.GetType();
     40         Word.Documents docs = word.Documents;
     41         Type docsType = docs.GetType();
     42         Word.Document doc = (Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { (object)filePath, true, true });
     43         Type docType = doc.GetType();
     44         string strSaveFileName = htmlFilePaht;
     45         object saveFileName = (object)strSaveFileName;
     46         docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Word.WdSaveFormat.wdFormatFilteredHTML });
     47         docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, doc, null);
     48         wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
     49         Thread.Sleep(3000);//为了使退出完全,这里阻塞3秒
     50     }
     51 
     52 
     53 
     54     public static void ExcelToHtml(string filePath)
     55     {
     56         string str = string.Empty;
     57         Excel.Application oApp = new Excel.Application();
     58         Excel.Workbook oBook = null;
     59         Excel.Worksheet oSheet = null;
     60         Excel.Workbooks oBooks = null;
     61 
     62         oBooks = oApp.Application.Workbooks;
     63         oBook = oBooks.Open(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
     64         oSheet = (Excel.Worksheet)oBook.Worksheets[1];
     65         object htmlFile = filePath.ToLower().Replace(Path.GetExtension(filePath).ToLower(), ".html");
     66         object ofmt = Excel.XlFileFormat.xlHtml;
     67         oBook.SaveAs(htmlFile, ofmt, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
     68 
     69         NAR(oSheet);
     70         GC.Collect();
     71         object osave = false;
     72         oBook.Close(osave, Type.Missing, Type.Missing);
     73         GC.Collect();
     74         NAR(oBook);
     75         GC.Collect();
     76         NAR(oBooks);
     77         GC.Collect();
     78         oApp.Quit();
     79         NAR(oApp);
     80         GC.Collect();
     81         KillProcess("EXCEL");
     82         Thread.Sleep(3000);//保证完全关闭
     83     }
     84 
     85 
     86 
     87     public static void ExcelToHtml(string filePath, string htmlFilePaht)
     88     {
     89         string str = string.Empty;
     90         Excel.Application oApp = new Excel.Application();
     91         Excel.Workbook oBook = null;
     92         Excel.Worksheet oSheet = null;
     93         Excel.Workbooks oBooks = null;
     94 
     95         oBooks = oApp.Application.Workbooks;
     96         oBook = oBooks.Open(filePath, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
     97         oSheet = (Excel.Worksheet)oBook.Worksheets[1];
     98         object htmlFile = htmlFilePaht;
     99         object ofmt = Excel.XlFileFormat.xlHtml;
    100         oBook.SaveAs(htmlFile, ofmt, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    101 
    102         NAR(oSheet);
    103         GC.Collect();
    104         object osave = false;
    105         oBook.Close(osave, Type.Missing, Type.Missing);
    106         NAR(oBook);
    107         GC.Collect();
    108         NAR(oBooks);
    109         GC.Collect();
    110         oApp.Quit();
    111         NAR(oApp);
    112         GC.Collect();
    113         KillProcess("EXCEL");
    114         Thread.Sleep(3000);//保证完全关闭
    115 
    116     }
    117 
    118     //依据时间杀灭进程
    119     private static void KillProcess(string processName)
    120     {
    121         System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName(processName);
    122         foreach (System.Diagnostics.Process p in process)
    123         {
    124             if (DateTime.Now.Second - p.StartTime.Second > 0 && DateTime.Now.Second - p.StartTime.Second < 5)
    125             {
    126                 p.Kill();
    127             }
    128         }
    129     }
    130 
    131     //关闭对象
    132     private static void NAR(object o)
    133     {
    134         try
    135         {
    136             while (System.Runtime.InteropServices.Marshal.ReleaseComObject(o) > 0) ;
    137         }
    138         catch { }
    139         finally
    140         {
    141             o = null;
    142         }
    143     }
    144 }

         注意:请设置web.config的system.web加点中添加一下配置,操作excel或word需要管理员的权限,否则报错“否则会提示检索 COM 类工厂中 CLSID 为 {000209FF-0000-0000-C000-000000000046} 的组件时失败,原因是出现以下错误: 80070005。”

    方案一:

    <identity impersonate="true" userName="服务器管理员用户名" password="服务器管理员"/>

    方案二:

    1:在服务器上安装office的Excel软件.
    2:在"开始"->"运行"中输入dcomcnfg.exe启动"组件服务"
    3:依次双击"组件服务"->"计算机"->"我的电脑"->"DCOM配置"
    4:在"DCOM配置"中找到"Microsoft Excel 应用程序",在它上面点击右键,然后点击"属性",弹出"Microsoft Excel 应
    用程序属性"对话框
    5:点击"标识"标签,选择"交互式用户"
    6:点击"安全"标签,在"启动和激活权限"上点击"自定义",然后点击对应的"编辑"按钮,在弹出的"安全性"对话框中填加
    一个"NETWORK SERVICE"用户(注意要选择本计算机名),并给它赋予"本地启动"和"本地激活"权限.
    7:依然是"安全"标签,在"访问权限"上点击"自定义",然后点击"编辑",在弹出的"安全性"对话框中也填加一个"NETWORK
    SERVICE"用户,然后赋予"本地访问"权限.
    这样,我们便配置好了相应的Excel的DCOM权限.

          在项目引用中右击选择添加引用,选择COM里面选择Microft Office 12.0 object Library和Microft Excel 12.0 object Library分别点确定即可!同样如果要引用World选Microft World 12.0 object Library!  2003/2007共通处理方式 分别为11或12版本  添加.net中Microsoft.Office.Interop.excel;  添加.net中Office 

    程序员的基础教程:菜鸟程序员

  • 相关阅读:
    thinkphp 事物回滚
    文字超出部分以省略号隐藏
    js倒计时
    js 日期转为时间戳
    jquery 获取url地址参数
    spreadjs 自定义菜单事件
    spreadjs 点击事件
    spreadjs 自定义上传文件单元格
    spreadjs 小记
    Json数组排序
  • 原文地址:https://www.cnblogs.com/guohu/p/2960822.html
Copyright © 2020-2023  润新知