当前位置: 代码迷 >> .NET相关 >> word跟excel在网页上显示,文件流,虚拟目录,文件上传
  详细解决方案

word跟excel在网页上显示,文件流,虚拟目录,文件上传

热度:527   发布时间:2016-04-24 02:58:03.0
word和excel在网页上显示,文件流,虚拟目录,文件上传

1.如何在网页上显示word和excel

  a.可以使用aspose将word 和excel 转换为pdf 然后在网页上打开pdf,但是效果不是很好.比如说excel 多个工作薄不是按exce 格式显示出来,宽度大小,不好控制(?).

  b.可以使用aspose将文档转换为html,但是转换为html 会产生额外的XML和CSS和图片文件.在文件流中不好读取(文件在本地里面).

  c.可以使用其他转换,比如http://www.cutepdf.com/(?),或者用文件流读取再转换(没试过),或者是word和Excel相关组件,比如说在word里面直接保存为html后缀.

  d.最好将文件转换为Mhtml格式的,这是因为Mhtml是个单个网页文件.

     Mhtml称为聚合html文档web文档或单一文件网页应用于(asscss,word,excel)是单个网页 文件可将网站所有元素(包括声音,图片)保存到单个mhtml文件中.

2.对于项目而言如何上传文件,文件上传到哪儿,如何保存这些上传文件

  a.可以将文件上传到asp.net项目当中,但是据说项目越来越大影响后期运行效率,不利于维护,没有验证过.

  b.可以将文件用数据流读取保存到数据库当中,没有实践过(?).

  b.可以将文件上传到服务器本地磁盘当中,便于对文件的操作和管理.

      A.如果上传到服务器读取转换的网页文件没问题

  B.上传到数据库转换成网页文件(没试过)(?)

  C.上传到本地里面文件夹里面,好像微软在asp.net上面出于安全考虑并不支持直接访问站点外的文件(?)其他开发上面不清楚,

       http://zhidao.baidu.com/link?url=AvlZUEusXh7C

    1)可以使用添加虚拟目录,就是在服务器上添加虚拟目录路径,映射到绝对路径目录上就是指向你要访问的图片路径,在Vs开发中新建上传文件夹,只是在发布文件后的ISS上,做改动,将原有文件夹变为虚拟路径       文件,不过还是按照Server.MapPath(@"~/new_ams/file/" + fileName)获取路径,(?)具体还没实践过.

    2)可以将用文件流读取本地文件,映射路径,参考代码http://www.cnblogs.com/insus/archive/2013/02/05/2892678.html,

     但是有一点文件流好像只可以读取单个文件(?),不可以读取同时读取html +外部CSS+图片,所以运用前面的方法将文件转换为Mhtml格式的

       结尾: 很多地方研究不太清楚,当转化为来的Mhtml用文件流读取时web页面显示的是Hmtl的乱码内容,原因是解码问题,具体参考 

   参考链接 http://www.cnblogs.com/SanMaoSpace/archive/2013/03/02/2941078.htm

            

3.利用office 自带的组件将office转换为Html

  a.引用office组件,如果office 没有激活,最好激活和添加开发模式的(?),在vs添加引用里面程序集,如果引用失败,右击程序集属性,嵌入互操类改为False,为什么改为false(?).         using Word = Microsoft.Office.Interop.Word; using Excel = Microsoft.Office.Interop.Excel;

  b.如何将office 转变为单一网页文件Mhtml,当时这个问题搞了一天结果是应该选择wdFormatWebArchive ,Web 档案格式,他是不带Mhtml的单次,说明中也没提示。

      参考链接http://i.cnblogs.com/EditPosts.aspx?postid=4244197

       

       /// <summary>       /// WinWord文件生成HTML并保存       /// </summary>       /// <param name="FilePath">需要生成的word文件的路径</param>       /// <param name="saveFilePath">生成以后保存HTML文件的路径</param>       /// <returns>是否生成成功,成功为true,反之为false</returns>           private bool GenerationWordHTML(string FilePath, string saveFilePath)        {            try            {                FilePath = @"D:\a\请假审批表.doc";                saveFilePath = @"D:\a\请假审批表.html";                Word.ApplicationClass word = new Word.ApplicationClass();                Type wordType = word.GetType();                Word.Documents docs = word.Documents;                /// 打开文件                    Type docsType = docs.GetType();                Word.Document doc = (Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { FilePath, true, true });                /// 转换格式,另存为 HTML                    Type docType = doc.GetType();                /*下面是Microsoft Word 9 Object Library的写法: */                /*docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFilePath, Word.WdSaveFormat.wdFormatHTML });*/                /*下面是Microsoft Word 10 Object Library的写法: */                docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod,                null, doc, new object[] { saveFilePath, Word.WdSaveFormat.wdFormatFilteredHTML });                /// 退出 Word                   wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);                return true;            }            catch            {                return false;            }            finally            {                //最后关闭打开的winword 进程                   Process[] myProcesses = Process.GetProcessesByName("WINWORD");                foreach (Process myProcess in myProcesses)                {                    myProcess.Kill();                }            }        }        /// <summary>           /// Ecxel文件生成HTML并保存           /// </summary>           /// <param name="FilePath">需要生成的ecxel文件的路径</param>           /// <param name="saveFilePath">生成以后保存HTML文件的路径</param>           /// <returns>是否生成成功,成功为true,反之为false</returns>           protected bool GenerationExcelHTML(string FilePath, string saveFilePath)        {            try            {                FilePath = @"D:\a\申购单.xlsx";                saveFilePath = @"D:\a\申购单.html";                Excel.Application app = new Excel.Application();                app.Visible = false;                Object o = Missing.Value;                ///打开文件                   /*下面是Microsoft Excel 9 Object Library的写法: */                /*_Workbook xls = app.Workbooks.Open(FilePath, o, o, o, o, o, o, o, o, o, o, o, o);*/                /*下面是Microsoft Excel 10 Object Library的写法: */               Excel._Workbook xls = app.Workbooks.Open(FilePath, o, o, o, o, o, o, o, o, o, o, o, o, o, o);                ///转换格式,另存为 HTML                   /*下面是Microsoft Excel 9 Object Library的写法: */                /*xls.SaveAs(saveFilePath, Excel.XlFileFormat.xlHtml, o, o, o, o, XlSaveAsAccessMode.xlExclusive, o, o, o, o);*/                /*下面是Microsoft Excel 10 Object Library的写法: */               xls.SaveAs(saveFilePath, Excel.XlFileFormat.xlHtml, o, o, o, o, Excel.XlSaveAsAccessMode.xlExclusive, o, o, o, o, o);                ///退出 Excel                   app.Quit();                return true;            }            catch            {                return false;            }            finally            {                //最后关闭打开的excel 进程                   Process[] myProcesses = Process.GetProcessesByName("EXCEL");                foreach (Process myProcess in myProcesses)                {                    myProcess.Kill();                }            }        }
officeCom,用office组件将Office转换为Html

 

  

 

2楼小明同学
面瘫
1楼eyye的眼睛
请问你知道百度文库是用哪一种方案吗,我觉得百度在word、excel文档显示方面已经做到了完美,但就是不知道他们是怎么弄的
Re: oldBird.Net
@eyye的眼睛,我也是新手,没有做过深入了解
  相关解决方案