.NET實(shí)現(xiàn)Word或Excel文件轉(zhuǎn)為HTML文件
Word文件轉(zhuǎn)html,返回相對(duì)路徑
private string GetPathByDocToHTML(string strFile) { if (string.IsNullOrEmpty(strFile)) { return "0";//沒(méi)有文件 } Microsoft.Office.Interop.Word.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass(); Type wordType = word.GetType(); Microsoft.Office.Interop.Word.Documents docs = word.Documents; // 打開(kāi)文件 Type docsType = docs.GetType(); object fileName = strFile; Microsoft.Office.Interop.Word.Document doc = (Microsoft.Office.Interop.Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { fileName, true, true }); // 轉(zhuǎn)換格式,另存為html Type docType = doc.GetType(); //給文件重新起名 string filename = System.DateTime.Now.Year.ToString() System.DateTime.Now.Month.ToString() System.DateTime.Now.Day.ToString() System.DateTime.Now.Hour.ToString() System.DateTime.Now.Minute.ToString() System.DateTime.Now.Second.ToString(); string strFileFolder = "../html/"; DateTime dt = DateTime.Now; //以yyyymmdd形式生成子文件夾名 string strFileSubFolder = dt.Year.ToString(); strFileSubFolder = (dt.Month < 10) ? ("0" dt.Month.ToString()) : dt.Month.ToString(); strFileSubFolder = (dt.Day < 10) ? ("0" dt.Day.ToString()) : dt.Day.ToString(); string strFilePath = strFileFolder strFileSubFolder "/"; // 判斷指定目錄下是否存在文件夾,如果不存在,則創(chuàng)建 if (!Directory.Exists(Server.MapPath(strFilePath))) { // 創(chuàng)建up文件夾 Directory.CreateDirectory(Server.MapPath(strFilePath)); } //被轉(zhuǎn)換的html文檔保存的位置 // HttpContext.Current.Server.MapPath("html" strFileSubFolder filename ".html") string ConfigPath = Server.MapPath(strFilePath filename ".html"); object saveFileName = ConfigPath; /*下面是Microsoft Word 9 Object Library的寫(xiě)法,如果是10,可能寫(xiě)成: * docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, * null, doc, new object[]{saveFileName, Word.WdSaveFormat.wdFormatFilteredHTML}); * 其它格式: * wdFormatHTML * wdFormatDocument * wdFormatDOSText * wdFormatDOSTextLineBreaks * wdFormatEncodedText * wdFormatRTF * wdFormatTemplate * wdFormatText * wdFormatTextLineBreaks * wdFormatUnicodeText */ docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatFilteredHTML }); //docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, // null, doc, new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatFilteredHTML }); //關(guān)閉文檔 docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { null, null, null }); // 退出 Word wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null); //轉(zhuǎn)到新生成的頁(yè)面 //return ("/" filename ".html"); //轉(zhuǎn)化HTML頁(yè)面統(tǒng)一編碼格式 TransHTMLEncoding(ConfigPath); return (strFilePath filename ".html"); }
Excel文件轉(zhuǎn)HTML,返回相對(duì)路徑
private string GetPathByXlsToHTML(string strFile) { if (string.IsNullOrEmpty(strFile)) { return "0";//沒(méi)有文件 } //實(shí)例化Excel Microsoft.Office.Interop.Excel.Application repExcel = new Microsoft.Office.Interop.Excel.Application(); Microsoft.Office.Interop.Excel.Workbook workbook = null; Microsoft.Office.Interop.Excel.Worksheet worksheet = null; //打開(kāi)文件,n.FullPath是文件路徑 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); worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[1]; //給文件重新起名 string filename = System.DateTime.Now.Year.ToString() System.DateTime.Now.Month.ToString() System.DateTime.Now.Day.ToString() System.DateTime.Now.Hour.ToString() System.DateTime.Now.Minute.ToString() System.DateTime.Now.Second.ToString(); string strFileFolder = "../html/"; DateTime dt = DateTime.Now; //以yyyymmdd形式生成子文件夾名 string strFileSubFolder = dt.Year.ToString(); strFileSubFolder = (dt.Month < 10) ? ("0" dt.Month.ToString()) : dt.Month.ToString(); strFileSubFolder = (dt.Day < 10) ? ("0" dt.Day.ToString()) : dt.Day.ToString(); string strFilePath = strFileFolder strFileSubFolder "/"; // 判斷指定目錄下是否存在文件夾,如果不存在,則創(chuàng)建 if (!Directory.Exists(Server.MapPath(strFilePath))) { // 創(chuàng)建up文件夾 Directory.CreateDirectory(Server.MapPath(strFilePath)); } string ConfigPath = Server.MapPath(strFilePath filename ".html"); object savefilename = (object)ConfigPath; object ofmt = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml; //進(jìn)行另存為操作 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); object osave = false; //逐步關(guān)閉所有使用的對(duì)象 workbook.Close(osave, Type.Missing, Type.Missing); repExcel.Quit(); System.Runtime.InteropServices.Marshal.ReleaseComObject(worksheet); worksheet = null; //垃圾回收 GC.Collect(); System.Runtime.InteropServices.Marshal.ReleaseComObject(workbook); workbook = null; GC.Collect(); System.Runtime.InteropServices.Marshal.ReleaseComObject(repExcel.Application.Workbooks); GC.Collect(); System.Runtime.InteropServices.Marshal.ReleaseComObject(repExcel); repExcel = null; GC.Collect(); //依據(jù)時(shí)間殺滅進(jìn)程 System.Diagnostics.Process[] process = System.Diagnostics.Process.GetProcessesByName("EXCEL"); foreach (System.Diagnostics.Process p in process) { if (DateTime.Now.Second - p.StartTime.Second > 0 && DateTime.Now.Second - p.StartTime.Second < 5) { p.Kill(); } } return (strFilePath filename ".html"); }
這里可能會(huì)遇到一個(gè)問(wèn)題,由于轉(zhuǎn)化為HTML文件的頁(yè)面編碼可能使得瀏覽器無(wú)法正確解讀,
所以需要轉(zhuǎn)碼,轉(zhuǎn)換代碼如下:
private void TransHTMLEncoding(string strFilePath) { try { System.IO.StreamReader sr = new System.IO.StreamReader(strFilePath, Encoding.GetEncoding(0)); string html = sr.ReadToEnd(); sr.Close(); html = System.Text.RegularExpressions.Regex.Replace(html, @"<meta[^>]*>", "<meta http-equiv=Content-Type content='text/html; charset=gb2312'>", System.Text.RegularExpressions.RegexOptions.IgnoreCase); System.IO.StreamWriter sw = new System.IO.StreamWriter(strFilePath, false, Encoding.Default); sw.Write(html); sw.Close(); } catch (Exception ex) { Page.RegisterStartupScript("alt", "<script>alert('" ex.Message "')</script>"); } }
原文鏈接:.NET實(shí)現(xiàn)Word或Excel文件轉(zhuǎn)為HTML文件