文檔管理系統 之一 doc、xls、ppt文檔轉換成html及System.Runtime.InteropServices.COMException (0x80004005): 360的問題

公司最近需要一套文檔管理系統,其實功能很簡單,能上傳、顯示文檔,根據權限能否下載、複製、查看

 

網上也有很多,試用了一下感覺功能都太花哨,都是着重協同辦公功能

 

因爲功能不多,所以自己寫一個也不費勁,思路如下:

1.先解決文檔上傳、轉換的功能

2.權限管理功能

 

文檔上傳轉換,將上傳的doc、xls、ppt文檔轉換成html格式,顯示時通過js腳本禁止複製

 

昨天上傳轉換功能寫完後,在本機測試正常,今天發佈到服務器後是各種問題,在服務器打開網頁都不行,解決到最後可服務器服務器運行了,到客戶端上“轉換”又報錯

 

具體碰到的問題會在以後的文章中慢慢貼出來,但是今天最大的收穫就是“360瀏覽器 不支持office操作”

 

文件上傳成功後,在轉換時出現“System.Runtime.InteropServices.COMException (0x80004005): Error HRESULT E_FAIL has been returned from a call to a COM component. at Microsoft.Office.Interop.PowerPoint.PresentationClass.SaveAs(String FileName, PpSaveAsFileType FileFormat, MsoTriState EmbedTrueTypeFonts) at FileHtml.PPTToHtlm(FileUpload FileUpload1錯誤,但是用ie,就可以上傳並轉換

 

這個問題很糾結,在本機編譯成功運行,360瀏覽器可以轉換,不報錯,但是在本機一旦訪問服務器,就報錯,網上沒有貌似很好的解決方案,我的解決方案就是,別用360~~~

 

附帶doc、xls、ppt轉換html代碼

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;

 
using System.IO;
using Microsoft.Office.Interop.Excel;
using System.Diagnostics;
using Microsoft.Office.Interop.PowerPoint;
using Microsoft.Office;

using System.Reflection;

/// <summary>
/// FileHtml 的摘要說明
/// </summary>
public class FileHtml
{
    //public static string FileToHtml(string filePath)
    public static string FileToHtml(FileUpload FileUpload1)
    {
        string fileExtension = System.IO.Path.GetExtension(FileUpload1.FileName).ToLower();
        string strss = "|doc|docx|";
        string strss2 = "|xls|xlsx|";
        string strss3 = "|ppt|pptx|";
        if (strss.IndexOf("|" + fileExtension.Substring(1) + "|") > -1)
        {
            return wordToHtml(FileUpload1);
        }
        else if (strss2.IndexOf("|" + fileExtension.Substring(1) + "|") > -1)
        {
            return ExcelToHtml(FileUpload1);
        }
        else if (strss3.IndexOf("|" + fileExtension.Substring(1) + "|") > -1)
        {
            return PPTToHtlm(FileUpload1);
        }
        else
        { return ""; }

    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="filePath">上傳後文件的路徑</param>
    /// <returns></returns>
    public static string wordToHtml(FileUpload FileUpload1)
    {

       try
        {
            Microsoft.Office.Interop.Word.ApplicationClass word = new Microsoft.Office.Interop.Word.ApplicationClass();
            Type wordType = word.GetType();
            Microsoft.Office.Interop.Word.Documents docs = word.Documents;
            Type docsType = docs.GetType();

            FilesOperate fo = new FilesOperate();
            //定義服務器doc存儲地址
            string wordPath = System.Web.HttpContext.Current.Server.MapPath(fo.GetOriginalFullName(System.IO.Path.GetExtension(FileUpload1.FileName).ToLower().Substring(1)));
            //保存至服務器
            FileUpload1.SaveAs(wordPath);

            object fileName1 = wordPath;
            Microsoft.Office.Interop.Word.Document doc = (Microsoft.Office.Interop.Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { fileName1, true, true });

            // 轉換格式,另存爲html
            Type docType = doc.GetType();
            string filename = fo.GetNewFileName() + ".html";
            string fpath = fo.GetConvertDirectory();
            string path = (System.Web.HttpContext.Current.Server.MapPath(fpath));
            Directory.CreateDirectory(path);
            //被轉換的html文檔保存的位置
            object saveFileName = path + filename;
            docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatFilteredHTML });
            // 退出 Word
            wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
            //返回文件名
            return (fpath + filename);
        }
        catch (Exception ex)
        {
            return ex.ToString();
        }       

    }

    /// <summary>
    /// 
    /// </summary>
    /// <param name="filePath">上傳後文件的路徑</param>
    /// <returns></returns>
    public static string PPTToHtlm(FileUpload FileUpload1)
    {
        try
        {
            FilesOperate fo = new FilesOperate();
            //定義服務器doc存儲地址
            string wordPath = System.Web.HttpContext.Current.Server.MapPath(fo.GetOriginalFullName(System.IO.Path.GetExtension(FileUpload1.FileName).ToLower().Substring(1)));
            //保存至服務器
            FileUpload1.SaveAs(wordPath);

            Microsoft.Office.Interop.PowerPoint.Application ppApp = new Microsoft.Office.Interop.PowerPoint.Application();


            string filename = fo.GetNewFileName() + ".html";
            string fpath = fo.GetConvertDirectory();
            string path = (System.Web.HttpContext.Current.Server.MapPath(fpath));
            Directory.CreateDirectory(path);

            string saveFileName = path + filename;

            Microsoft.Office.Interop.PowerPoint.Presentation prsPres = ppApp.Presentations.Open(wordPath, Microsoft.Office.Core.MsoTriState.msoTrue, Microsoft.Office.Core.MsoTriState.msoFalse, Microsoft.Office.Core.MsoTriState.msoFalse);

            //被轉換的html文檔保存的位置
            prsPres.SaveAs(saveFileName, Microsoft.Office.Interop.PowerPoint.PpSaveAsFileType.ppSaveAsHTML, Microsoft.Office.Core.MsoTriState.msoTrue);
            prsPres.Close();
            ppApp.Quit();

            return (fpath + filename);
        }
        catch (Exception ex)
        {
            return ex.ToString();
        }  
    }
    /// <summary>
    /// 
    /// </summary>
    /// <param name="filePath">上傳後文件的路徑</param>
    /// <returns></returns>
    public static string ExcelToHtml(FileUpload FileUpload1)
    {
        try
        {
            FilesOperate fo = new FilesOperate();
            //定義服務器doc存儲地址
            string wordPath = System.Web.HttpContext.Current.Server.MapPath(fo.GetOriginalFullName(System.IO.Path.GetExtension(FileUpload1.FileName).ToLower().Substring(1)));
            //保存至服務器
            FileUpload1.SaveAs(wordPath);


            string filename = fo.GetNewFileName() + ".html";
            string fpath = fo.GetConvertDirectory();
            string path = (System.Web.HttpContext.Current.Server.MapPath(fpath));
            Directory.CreateDirectory(path);



            Directory.CreateDirectory(path);

            //被轉換的html文檔保存的位置

            object saveFileName = path + filename.Replace(":", "-");

            Microsoft.Office.Interop.Excel.Application app = new Microsoft.Office.Interop.Excel.Application();
            app.Visible = false;
            object o = System.Reflection.Missing.Value;

            _Workbook xls = app.Workbooks.Open(wordPath, o, true, o, o, o, o, o, o, o, o, o, o, o, o);
            object fileName = saveFileName;
            object format = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;//Html


            xls.SaveAs(fileName, format, o, o, o, o, XlSaveAsAccessMode.xlExclusive, o, o, o, o, o);
            app.Quit();

            return fpath + filename.Replace(":", "-");
        }
        catch (Exception ex)
        {
            return ex.ToString();
        }

    }

}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章