.NET编程中Word/Excel 在线预览

前言

近日项目中做到一个功能,需要上传附件后能够在线预览。之前也没做过这类似的,于是乎就查找了相关资料,.net实现office文件预览大概有这几种方式:

使用Microsoft的Office组件将文件直接转换为html文件(优点:代码实现最简单,工作强度最小。缺点:效果极差)

使用Microsoft的Office组件将文件转换为PDF格式文件,然后再使用pdf2swf转换为swf文件,也就是flash文件在使用FlexPaper展示出来(优点:预览效果能接受,缺点:代码量大)

使用Office online(优点:表现完美,缺点:不适合中小企业应用)

由于开发时间短而且还有其他功能点需要完成,所以暂时先已第一种方式实现了,这里也主要讲第一种方式,效果如下图:

896.jpg

具体实现

这里简单提一下效果图中的遮罩效果和上传实现,有喜欢的朋友也可以参考参考。

遮罩效果就是HTML+CSS+JS来实现的,全部代码如下:

弹出层.black_overlay{ display: none; position: absolute; top: 0%; left: 0%; width: 100%; height: 100%; background-color: black; z-index:1001; -moz-opacity: 0.8; opacity:.80; filter: alpha(opacity=80);}.white_content { display: none; position: absolute; top: 10%; left: 10%; width: 80%; height: 80%; border: 16px solid lightblue; background-color: white; z-index:1002; overflow: auto;}.white_content_small { display: none; position: absolute; top: 20%; left: 30%; width: 40%; height: 50%; border: 16px solid lightblue; background-color: white; z-index:1002; overflow: auto;}//弹出隐藏层function ShowDiv(show_div,bg_div){ document.getElementById(show_div).style.display='block'; document.getElementById(bg_div).style.display='block' ; var bgdiv = document.getElementById(bg_div); bgdiv.style.width = document.body.scrollWidth;  // bgdiv.style.height = $(document).height(); $("#"+bg_div).height($(document).height());};//关闭弹出层function CloseDiv(show_div,bg_div){ document.getElementById(show_div).style.display='none'; document.getElementById(bg_div).style.display='none';};
关闭
目前来说,我还是喜欢这个自己改造的弹出层。自己在项目中也用的是这个。

上传的话,因为文件比较小,所以采用的是保存在服务器,在数据库中存放路径的方式

前台代码

关闭

请上传常见问题附件

上传附件

后台方法

try {                string FullName = FileUpload1.PostedFile.FileName;//获取附件物理地址                FileInfo fi = new FileInfo(FullName);                string name = fi.Name;//获取附件名称                string type = fi.Extension;//获取附件类型                if (type == ".xls" || type == ".xlsx" || type == ".doc" || type == ".docx" || type == ".pdf")                {                    string SavePath = Server.MapPath("~uploadFile");//附件保存到文件夹下                    if (!Directory.Exists(SavePath))                    {                        Directory.CreateDirectory(SavePath);                    }                    this.FileUpload1.PostedFile.SaveAs(SavePath + "" + name);//保存路径                    #region 将附件内容保存到数据库中                    int showsuccess = CMSModelManager.Submitted_questionsDAO.Save_File(name,type,SavePath);                    if (showsuccess == 1)                    {                        this.label1.Text = "上传成功";                    }                    else                    {                        this.label1.Text = "服务器繁忙,请稍后重试";                    }                    #endregion                 }                else                {                    this.label1.Text = "请选择正确的格式附件";                }            }            catch (Exception ex)            {                Response.Write(ex.Message);            }

图中所示的将Word转换成HTML的实现方式:

首先新建一个帮助类

using System;using System.Collections.Generic;using System.Web;//using Microsoft.Office.Core;using Word = Microsoft.Office.Interop.Word;namespace Com.VanruPortal.Admin{    public class Office2HtmlHelper    {        ///         /// Word转成Html        ///         /// 要转换的文档的路径        /// 转换成html的保存路径        /// 转换成html的文件名字        public static void Word2Html(string path, string savePath, string wordFileName)        {            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[] { (object)path, true, true });            Type docType = doc.GetType();            string strSaveFileName = savePath + wordFileName + ".html";            object saveFileName = (object)strSaveFileName;            docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName,             Word.WdSaveFormat.wdFormatFilteredHTML });            docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, doc, null);            wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);        }        ///         /// Excel转成Html        ///         /// 要转换的文档的路径        /// 转换成html的保存路径        /// 转换成html的文件名字        public static void Excel2Html(string path, string savePath, string wordFileName)        {            string str = string.Empty;            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;            workbook = repExcel.Application.Workbooks.Open(path, 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];            object htmlFile = savePath + wordFileName + ".html";            object ofmt = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;            workbook.SaveAs(htmlFile, 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;            workbook.Close(osave, Type.Missing, Type.Missing);            repExcel.Quit();        }    }}

后台调用方法

上传成功后将文件转换string physicalPath = Server.MapPath(Server.UrlDecode("/uploadFile"+""+ name));//读取相对路径string extension = Path.GetExtension(physicalPath);//获取后缀名string[] show_name = name.Split(new string[] { "." }, StringSplitOptions.RemoveEmptyEntries);//此处的name是上面上传附件中的名称分割string show_name_View = show_name[0];//拿到实际nameswitch (extension){      case ".doc":      case ".docx":      Office2HtmlHelper.Word2Html(MapPath("/uploadFile" + "" + name + ""),       MapPath("/Html/"), "" + show_name_View + "");      //调用帮助类中生成WordHtml的方法,并保存起来      Response.Write("window.open('/Html/" + show_name_View + ".html','_blank')");      //跳转并打开保存的相对路径中hmtl文件         break;     case ".xls":     case ".xlsx":     Office2HtmlHelper.Excel2Html(MapPath("/uploadFile" + "" + name + ""),     MapPath("/Html/"), "" + show_name_View + "");     Response.Write("window.open('/Html/" + show_name_View + ".html','_blank')");       break;     default:        break;}

至此,一个简易的上传附件在线浏览已经全部实现

以上就是.NET编程中Word/Excel 在线预览的内容,更多相关内容请关注PHP中文网(www.php.cn)!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1432071.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2025年12月17日 06:10:37
下一篇 2025年12月17日 06:10:54

相关推荐

发表回复

登录后才能评论
关注微信