读书人

文档管理系统 之一 doc、xls、ppt文档

发布时间: 2013-01-25 15:55:29 作者: rapoo

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


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

读书人网 >系统运维

热点推荐