文档管理系统 之一 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;

/// 
/// FileHtml 的摘要说明
/// 
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 ""; }

    }
    /// 
    /// 
    /// 
    /// 上传后文件的路径
    /// 
    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();
        }       

    }

    /// 
    /// 
    /// 
    /// 上传后文件的路径
    /// 
    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();
        }  
    }
    /// 
    /// 
    /// 
    /// 上传后文件的路径
    /// 
    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();
        }

    }

}



 

还有一个类是获取文件名及路径的,那个很简单,自己搞搞就出来

 

 

你可能感兴趣的:(Web技术)