.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)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
记一次.NET代码重构(上)
上一篇 2025年12月17日 06:10:37
.NET多线程编程—并发集合
下一篇 2025年12月17日 06:10:54

相关推荐

  • excel如何设置打印时不打印错误值_excel打印时隐藏错误值设置方法

    1、通过页面设置将错误值打印为空白;2、用IFERROR函数替换错误值为无内容;3、利用条件格式将错误值字体设为白色,实现打印隐藏。 如果您在使用Excel打印报表时,发现某些单元格中的错误值(如#N/A、#DIV/0!等)影响了打印效果,可以通过设置让这些错误值在打印时不显示。以下是解决此问题的步…

    2026年9月23日
    400
  • KNIME的AI混合工具怎么用?创建数据工作流的详细操作步骤

    KNIME的AI混合工具是将数据处理、机器学习与深度学习通过可视化拖拽整合的平台,核心在于融合KNIME节点、Python/R脚本及外部框架,实现端到端工作流的构建与优化。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ KNIME的AI混合…

    2026年9月23日
    300
  • Excel打印区域设置_Excel打印范围调整操作指南

    首先选中需打印区域,点击“页面布局”→“打印区域”→“设置打印区域”,可指定打印范围;若需修改,可选择“清除打印区域”后重新设置;按住Ctrl键可选多个不连续区域并设置打印,各区域将分页输出;打印前建议通过“文件”→“打印”预览,调整页边距或缩放以优化效果。 在使用Excel处理报表或数据时,经常需…

    2026年9月23日
    500
  • ChatExcel一键生成报表_ChatExcel自动化报表生成与导出方法

    1、通过内置模板绑定数据源可一键生成报表;2、利用脚本命令实现定时或手动批量导出;3、调用API接口与外部系统集成,自动化传输报表;4、设置智能触发规则,在数据更新或指定时间自动执行生成与分发任务。 如果您在使用ChatExcel处理大量数据时,希望快速生成并导出报表,但手动操作耗时且容易出错,可以…

    2026年9月23日
    100
  • Excel表格怎么自定义单元格格式_Excel自定义格式设置方法

    自定义单元格格式可灵活显示数据而不改变实际内容。通过右键“设置单元格格式”或快捷键Ctrl+1打开窗口,选择“自定义”输入格式代码。格式代码最多四部分,分号隔开,依次对应正数、负数、零值和文本。例如0.00;[红色]-0.00;””;”@”表示正数两位…

    2026年9月22日
    100
  • Excel随机数函数怎么用_Excel随机数函数使用技巧分享

    答案:Excel中可通过RAND生成0到1的随机小数,RANDBETWEEN生成指定范围整数,结合运算扩展RAND区间,或用RAND加排序实现不重复随机序列。 如果您需要在Excel中生成随机数值以用于模拟、抽样或测试数据填充,可以使用内置的随机数函数。这些函数能够快速生成不同范围和类型的随机数。以…

    2026年9月22日
    100
  • ChatExcel进行数据分类_ChatExcel数据自动分类与标签管理

    答案:通过内置规则、AI智能打标、多维度交叉分类及手动修正四步实现ChatExcel自动分类与标签管理。首先设定字段匹配规则自动归类数据;其次启用智能打标功能分析文本生成语义标签;再通过组合多个属性构建交叉分类矩阵实现精细化管理;最后支持人工干预修正异常项并同步更新数据库,提升分类准确性与管理效率。…

    2026年9月22日
    000
  • win10无法弹出U盘怎么办_win10U盘无法弹出解决方法

    若U盘无法安全移除,首先关闭相关程序,检查任务管理器结束占用进程,清空剪贴板,重启Windows资源管理器,使用handle.exe命令行工具查找并终止占用进程,最后可修改U盘策略为快速删除模式以避免后续问题。 如果您尝试从Windows 10系统中安全移除U盘,但系统提示“设备正在使用”或无法完成…

    2026年9月22日
    100
  • ChatExcel进行趋势预测_ChatExcel数据趋势分析与预测建模

    可使用ChatExcel通过趋势拟合、移动平均或季节性分解实现数据预测。首先导入时间序列数据并选择“趋势预测”功能,系统将自动拟合线性或指数模型并输出R²值与未来5期预测;对于含噪声数据,可先计算3期或5期移动平均平滑序列,再基于平滑值进行外推预测;若数据具周期性(如周期7、12),则启用“季节性分…

    2026年9月22日
    000
  • 石墨文档如何创建在线表格并排序_石墨文档表格处理的高效技巧

    首先创建在线表格并进行排序,提升团队协作效率。打开石墨文档点击“新建”选择“表格”,支持从Excel导入数据、多页管理及多人协同编辑;选中数据区域后通过“数据”菜单进行单列或多条件排序,注意避免合并单元格影响范围,配合筛选功能更高效;利用快捷键跳转、自动调整列宽、冻结行列、使用模板、设置格式、添加评…

    2026年9月22日
    200
  • 如何使用mysql设计客户信息管理项目

    答案:设计客户信息管理系统需先明确功能需求,再合理规划数据库结构。1. 根据客户需求划分模块,包括客户基本信息、分类、状态、跟进记录等;2. 创建核心表如customers、company_info、follow_ups和users,确保字段完整且符合业务逻辑;3. 在关键字段上建立索引以提升查询效…

    2026年9月21日
    400
  • Excel引用函数怎么用_Excel引用函数功能使用教程

    答案:Excel中常用INDIRECT、OFFSET、INDEX和CHOOSE函数实现动态引用与跨表查询。首先,INDIRECT函数通过文本字符串创建间接引用,支持跨工作表动态获取数据;其次,OFFSET函数基于偏移量返回区域引用,常用于构建动态求和范围,但属易失性函数需注意性能影响;接着,INDE…

    2026年9月21日
    000
  • 115网盘资源查找入口_115网盘资源快速链接通道

    115网盘资源查找入口为http://www.115.com/,支持多平台访问、高效媒体管理及安全存储,提供网页端与客户端多种使用方式。 115网盘资源查找入口在哪里?这是不少网友都关注的,接下来由PHP小编为大家带来115网盘资源快速链接通道,感兴趣的网友一起随小编来瞧瞧吧! http://www…

    2026年9月21日
    000
  • mysql数据库和表的关系是怎样

    数据库是表的集合,一个MySQL数据库可包含多个表,表依赖数据库存在,需先创建数据库才能建表,如CREATE DATABASE school;USE school;CREATE TABLE students;数据库实现数据隔离与管理,不同项目使用不同数据库,便于组织与权限控制。 MySQL数据库和表…

    2026年9月21日
    000
  • 抖音小程序订单:如何快速找到?

    作为一位抖音小程序的商家,您可能时常面临订单管理方面的困扰。本文将从多个维度为您详细介绍如何高效查找抖音小程序中的订单信息。 第一步:登录抖音小程序管理后台 首先,请进入您的抖音小程序管理后台并完成登录。成功登录后,在左侧的导航菜单中点击“订单管理”选项,即可查看平台内全部的订单数据。 第二步:使用…

    2026年9月21日
    100
  • Linux怎么监控特定进程的运行状态

    Linux怎么监控特定进程的运行状态Linux怎么监控特定进程的运行状态Linux怎么监控特定进程的运行状态Linux怎么监控特定进程的运行状态

    监控Linux进程需综合使用ps、top、htop、pgrep和systemctl等工具,结合资源占用、进程状态、日志输出和进程数量判断是否异常,并通过systemd的Restart机制或看门狗脚本实现自动重启,同时利用journalctl、sar、atop及Prometheus+Grafana等方…

    2026年9月21日 用户投稿
    100
  • 腾讯元宝AI便捷体验入口 腾讯元宝网页版在线入口

    腾讯元宝AI便捷体验入口为https://yuanbao.tencent.com,支持网页版、手机APP及微信小程序访问,提供智能问答、文档解析、内容生成等多功能服务。 ☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 免费无限量使用 DeepSeek R1 模型☜☜☜ 腾讯元宝AI便捷体验入口…

    2026年9月20日
    000
  • Excel数据筛选怎么操作_Excel数据筛选实用操作指南

    掌握Excel数据筛选功能可显著提升工作效率。1. 基础筛选:通过点击“筛选”按钮,在列标题下拉菜单中选择特定条件,如仅显示“销售部”员工,实现快速查找目标数据。2. 高级筛选:适用于复杂条件,需设置条件区域(如“部门=销售部”且“工资>5000”),在高级筛选对话框中指定列表区域和条件区域,…

    2026年9月12日
    000
  • ChatExcel常见问题解答_ChatExcel高频问题与解决方案汇总

    首先检查文件是否成功上传并确认网络连接正常,依次验证浏览器兼容性、清除缓存、使用Chrome或Edge无痕模式;接着确保API密钥有效且调用配额未耗尽,避免输入敏感内容以防止安全拦截。 如果您在使用ChatExcel时遇到功能无法正常使用或数据交互失败的情况,很可能是由于网络连接、文件权限或API调…

    2026年9月12日
    100
  • Excel数据替换怎么批量处理_Excel数据替换实用功能操作指南

    答案:Excel中可通过四种方法批量替换数据。一、使用“查找和替换”功能:打开文件后按Ctrl+H,在对话框中输入原内容和新内容,点击“全部替换”完成操作。二、通过公式实现条件性替换:在空白列使用IF函数如=IF(A1=”旧值”,”新值”,A1),填充…

    2026年9月12日
    000

发表回复

登录后才能评论
关注微信