zoukankan      html  css  js  c++  java
  • C#.NET实现Word或Excel文件转为HTML文件

    Word文件转html,返回相对路径

    复制代码
     1 private string GetPathByDocToHTML(string strFile)
     2     {
     3         if (string.IsNullOrEmpty(strFile))
     4         {
     5             return "0";//没有文件
     6         }
     7 
     8         Microsoft.Office.Interop.Word.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass();
     9         Type wordType = word.GetType();
    10         Microsoft.Office.Interop.Word.Documents docs = word.Documents;
    11 
    12         // 打开文件  
    13         Type docsType = docs.GetType();
    14 
    15         object fileName = strFile;
    16 
    17         Microsoft.Office.Interop.Word.Document doc = (Microsoft.Office.Interop.Word.Document)docsType.InvokeMember("Open",
    18         System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { fileName, true, true });
    19 
    20         // 转换格式,另存为html  
    21         Type docType = doc.GetType();
    22         //给文件重新起名
    23         string filename = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() +
    24         System.DateTime.Now.Hour.ToString() + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Second.ToString();
    25 
    26         string strFileFolder = "../html/";
    27         DateTime dt = DateTime.Now;
    28         //以yyyymmdd形式生成子文件夹名
    29         string strFileSubFolder = dt.Year.ToString();
    30         strFileSubFolder += (dt.Month < 10) ? ("0" + dt.Month.ToString()) : dt.Month.ToString();
    31         strFileSubFolder += (dt.Day < 10) ? ("0" + dt.Day.ToString()) : dt.Day.ToString();
    32         string strFilePath = strFileFolder + strFileSubFolder + "/";
    33         // 判断指定目录下是否存在文件夹,如果不存在,则创建 
    34         if (!Directory.Exists(Server.MapPath(strFilePath)))
    35         {
    36             // 创建up文件夹 
    37             Directory.CreateDirectory(Server.MapPath(strFilePath));
    38         }
    39 
    40         //被转换的html文档保存的位置 
    41         // HttpContext.Current.Server.MapPath("html" + strFileSubFolder + filename + ".html")
    42         string ConfigPath = Server.MapPath(strFilePath + filename + ".html");
    43         object saveFileName = ConfigPath;
    44 
    45         /*下面是Microsoft Word 9 Object Library的写法,如果是10,可能写成: 
    46           * docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, 
    47           * null, doc, new object[]{saveFileName, Word.WdSaveFormat.wdFormatFilteredHTML}); 
    48           * 其它格式: 
    49           * wdFormatHTML 
    50           * wdFormatDocument 
    51           * wdFormatDOSText 
    52           * wdFormatDOSTextLineBreaks 
    53           * wdFormatEncodedText 
    54           * wdFormatRTF 
    55           * wdFormatTemplate 
    56           * wdFormatText 
    57           * wdFormatTextLineBreaks 
    58           * wdFormatUnicodeText 
    59         */
    60         docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod,
    61         null, doc, new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatFilteredHTML });
    62 
    63         //docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod,
    64         //  null, doc, new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatFilteredHTML }); 
    65 
    66         //关闭文档  
    67         docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod,
    68         null, doc, new object[] { null, null, null });
    69 
    70         // 退出 Word  
    71         wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
    72         //转到新生成的页面  
    73         //return ("/" + filename + ".html");
    74 
    75         //转化HTML页面统一编码格式
    76         TransHTMLEncoding(ConfigPath);
    77 
    78         return (strFilePath + filename + ".html");
    79     }
    复制代码

    Excel文件转HTML,返回相对路径

    复制代码
     1 private string GetPathByXlsToHTML(string strFile)
     2     {
     3         if (string.IsNullOrEmpty(strFile))
     4         {
     5             return "0";//没有文件
     6         }
     7 
     8         //实例化Excel  
     9         Microsoft.Office.Interop.Excel.Application repExcel = new Microsoft.Office.Interop.Excel.Application();
    10         Microsoft.Office.Interop.Excel.Workbook workbook = null;
    11         Microsoft.Office.Interop.Excel.Worksheet worksheet = null;
    12 
    13         //打开文件,n.FullPath是文件路径  
    14         workbook = repExcel.Application.Workbooks.Open(strFile, 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);
    15         worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1];
    16 
    17         //给文件重新起名
    18         string filename = System.DateTime.Now.Year.ToString() + System.DateTime.Now.Month.ToString() + System.DateTime.Now.Day.ToString() +
    19         System.DateTime.Now.Hour.ToString() + System.DateTime.Now.Minute.ToString() + System.DateTime.Now.Second.ToString();
    20 
    21         string strFileFolder = "../html/";
    22         DateTime dt = DateTime.Now;
    23         //以yyyymmdd形式生成子文件夹名
    24         string strFileSubFolder = dt.Year.ToString();
    25         strFileSubFolder += (dt.Month < 10) ? ("0" + dt.Month.ToString()) : dt.Month.ToString();
    26         strFileSubFolder += (dt.Day < 10) ? ("0" + dt.Day.ToString()) : dt.Day.ToString();
    27         string strFilePath = strFileFolder + strFileSubFolder + "/";
    28         // 判断指定目录下是否存在文件夹,如果不存在,则创建 
    29         if (!Directory.Exists(Server.MapPath(strFilePath)))
    30         {
    31             // 创建up文件夹 
    32             Directory.CreateDirectory(Server.MapPath(strFilePath));
    33         }
    34         string ConfigPath = Server.MapPath(strFilePath + filename + ".html");
    35         object savefilename = (object)ConfigPath;
    36 
    37         object ofmt = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;
    38         //进行另存为操作    
    39         workbook.SaveAs(savefilename, ofmt, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Microsoft.Office.Interop.Excel.XlSaveAsAccessMode.xlNoChange, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing);
    40         object osave = false;
    41         //逐步关闭所有使用的对象  
    42         workbook.Close(osave, Type.Missing, Type.Missing);
    43         repExcel.Quit();
    44         System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet);
    45         worksheet = null;
    46         //垃圾回收  
    47         GC.Collect();
    48         System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook);
    49         workbook = null;
    50         GC.Collect();
    51         System.Runtime.InteropServices.Marshal.ReleaseComObject(repExcel.Application.Workbooks);
    52         GC.Collect();
    53         System.Runtime.InteropServices.Marshal.ReleaseComObject(repExcel);
    54         repExcel = null;
    55         GC.Collect();
    56         //依据时间杀灭进程  
    57         System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("EXCEL");
    58         foreach (System.Diagnostics.Process p in process)
    59         {
    60             if (DateTime.Now.Second - p.StartTime.Second > 0 && DateTime.Now.Second - p.StartTime.Second < 5)
    61             {
    62                 p.Kill();
    63             }
    64         }
    65 
    66         return (strFilePath + filename + ".html");
    67     }
    复制代码

    这里可能会遇到一个问题,由于转化为HTML文件的页面编码可能使得浏览器无法正确解读,所以需要转码,转换代码如下:

    复制代码
     1     private void TransHTMLEncoding(string strFilePath)
     2     {
     3         try
     4         {
     5             System.IO.StreamReader sr = new System.IO.StreamReader(strFilePath, Encoding.GetEncoding(0));
     6             string html = sr.ReadToEnd();
     7             sr.Close();
     8             html = System.Text.RegularExpressions.Regex.Replace(html, @"<meta[^>]*>", "<meta http-equiv=Content-Type content='text/html; charset=gb2312'>", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
     9             System.IO.StreamWriter sw = new System.IO.StreamWriter(strFilePath, false, Encoding.Default);
    10 
    11             sw.Write(html);
    12             sw.Close();
    13         }
    14         catch (Exception ex)
    15         {
    16             Page.RegisterStartupScript("alt", "<script>alert('" + ex.Message + "')</script>");
    17         }
    18     }
    复制代码

    这样就可以正常在页面上正常显示了

  • 相关阅读:
    v-cloak 的用法
    vuejs开发流程
    java核心技术卷一
    删除数组重复项
    看懂oracle执行计划
    sheet制作返回按钮
    sql-server安装
    openpyxl 实现excel字母列号与数字列号之间的转换
    实战:第七章:微信H5支付时用户有微信分身停留5秒后未选择哪个微信分身,也未支付就被动回调到商户支付是否完成的页面...
    微信H5支付时用户有微信分身停留5秒后未选择哪个微信分身,也未支付就被动回调到商户支付是否完成的页面
  • 原文地址:https://www.cnblogs.com/lishuyi/p/4270209.html
Copyright © 2011-2022 走看看