由于项目需要,需要一个在线预览office的功能,小编一开始使用的是微软提供的方法,简单快捷,但是不符合小编开发需求,

就另外用了:将文件转换成html文件然后预览html文件的方法。对微软提供的方法感兴趣的小伙伴可以去看一下,够简单直接:word+excle+pdf表格在线浏览

我们来说一下小编使用的方法,这种预览方式基于开源的NPOI+Office COM组件,使用是需要引入这几个动态链接库,总体如下:


C#在线预览文档(word,excel,pdf,txt,png)

  1. 预览方式:将文件转换成html文件然后预览html文件
  2. 预览word文件:需要引入Interop.Microsoft.Office.Interop.Word.dll(Office COM+组件)
  3. 预览Excel文件:需要引入Interop.Microsoft.Office.Interop.Excel.dll(Office COM+组件)
  4. PDF文件直接嵌入到浏览器中进行查看,无需转换(需安装pdf阅读器)(直接使用文件的路径访问即可)
  5. 文本文件直接嵌入到浏览器进行查看,无需转换(直接使用文件的路径访问即可)
  6. 图片文件直接嵌入到浏览器进行查看,无需转换(直接使用文件的路径访问即可)

下面小编就预览word文件和预览excel文件进行学习一下。

准备工作:

1、创建MVC项目,引入NPOI和office Com组件动态链接库,小编使用的是VS2017,

  直接在NuGet里面引入(只演示NPOI的引入,Interop.Microsoft.Office.Interop.Word和Interop.Microsoft.Office.Interop.Excel的引入一样的操作)

2、在Content文件加下面建立一个excel文件和word文件,里面的内容可以自定义


 代码编写:

  后端代码:

  我们准备完成后就开始编写代码进行调试,代码如下,我直接整个控制器粘贴出来。

  1. using Microsoft.Office.Interop.Excel;
  2. using NPOI.SS.UserModel;
  3. using NPOI.XSSF.UserModel;
  4. using System;
  5. using System.Collections.Generic;
  6. using System.Diagnostics;
  7. using System.IO;
  8. using System.Linq;
  9. using System.Web;
  10. using System.Web.Mvc;
  11.  
  12. namespace WebOnlineWord.Controllers
  13. {
  14. public class HomeController : Controller
  15. {
  16. public ActionResult Index()
  17. {
  18. return View();
  19. }
  20.  
  21. //C#在线预览文档(word,excel,pdf,txt,png)
  22. //1、预览方式:将文件转换成html文件然后预览html文件
  23. //2、预览word文件:需要引入Interop.Microsoft.Office.Interop.Word.dll(Office COM组件)
  24. //3、预览Excel文件:需要引入Interop.Microsoft.Office.Interop.Excel.dll(Office COM组件)
  25. //4、PDF文件直接嵌入到浏览器中进行查看,无需转换(需安装pdf阅读器)
  26. //5、文本文件直接嵌入到浏览器进行查看,无需转换
  27. //6、图片文件直接嵌入到浏览器进行查看,无需转换
  28.  
  29. #region Excel预览方法
  30.  
  31. /// <summary>
  32. /// excel 转换为html
  33. /// </summary>
  34. /// <param name="path">要转换的文档的路径</param>
  35. /// <param name="savePath">转换成的html的保存路径</param>
  36. /// <param name="wordFileName">转换后html文件的名字</param>
  37. public JsonResult ExcelToHtml()
  38. {
  39. ResultJson result = new ResultJson();
  40. string path = Server.MapPath("/Content/excel.xlsx");
  41. string savePath = Server.MapPath("/Content/");
  42. string wordFileName = "ExcelToHtml";
  43. string str = string.Empty;
  44. Microsoft.Office.Interop.Excel.Application repExcel = new Microsoft.Office.Interop.Excel.Application();
  45. Microsoft.Office.Interop.Excel.Workbook workbook = null;
  46. Microsoft.Office.Interop.Excel.Worksheet worksheet = null;
  47. 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);
  48. worksheet = (Microsoft.Office.Interop.Excel.Worksheet)workbook.Worksheets[];
  49. object htmlFile = savePath + wordFileName + ".html";
  50. string resultUrl = htmlFile.ToString();
  51. object ofmt = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;
  52. 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);
  53. object osave = false;
  54. workbook.Close(osave, Type.Missing, Type.Missing);
  55. repExcel.Quit();
  56. result.str = "/Content/" + wordFileName + ".html"; ;
  57. return Json(result, JsonRequestBehavior.AllowGet);
  58.  
  59. }
  60.  
  61. #endregion
  62.  
  63. #region Excel预览方法
  64.  
  65. /// <summary>
  66. /// word 转换为html
  67. /// </summary>
  68. /// <param name="path">要转换的文档的路径</param>
  69. /// <param name="savePath">转换成的html的保存路径</param>
  70. /// <param name="wordFileName">转换后html文件的名字</param>
  71. public JsonResult WordToHtml()
  72. {
  73. ResultJson result = new ResultJson();
  74. string path = Server.MapPath("/Content/word.docx");
  75. string savePath = Server.MapPath("/Content/");
  76. string wordFileName = "WordToHtml";
  77. Microsoft.Office.Interop.Word.Application word = new Microsoft.Office.Interop.Word.Application();
  78. Type wordType = word.GetType();
  79. Microsoft.Office.Interop.Word.Documents docs = word.Documents;
  80. Type docsType = docs.GetType();
  81. Microsoft.Office.Interop.Word.Document doc = (Microsoft.Office.Interop.Word.Document)docsType.InvokeMember("Open", System.Reflection.BindingFlags.InvokeMethod, null, docs, new Object[] { (object)path, true, true });
  82. Type docType = doc.GetType();
  83. string strSaveFileName = savePath + wordFileName + ".html";
  84. object saveFileName = (object)strSaveFileName;
  85. docType.InvokeMember("SaveAs", System.Reflection.BindingFlags.InvokeMethod, null, doc, new object[] { saveFileName, Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatFilteredHTML });
  86. docType.InvokeMember("Close", System.Reflection.BindingFlags.InvokeMethod, null, doc, null);
  87. wordType.InvokeMember("Quit", System.Reflection.BindingFlags.InvokeMethod, null, word, null);
  88. result.str = "/Content/" + wordFileName + ".html"; ;
  89. return Json(result, JsonRequestBehavior.AllowGet);
  90.  
  91. }
  92.  
  93. #endregion
  94.  
  95. public class ResultJson
  96. {
  97. public bool res { get; set; }
  98. public string info { get; set; }
  99. public string str { get; set; }
  100. }
  101. }
  102. }

 前端代码:

  代码如下,我直接整个页面粘贴出来。

  1. @{
  2. ViewBag.Title = "Home Page";
  3. }
  4.  
  5. <script src="~/Scripts/jquery-3.3.1.min.js"></script>
  6. <script type="text/javascript">
  7.  
  8. //预览excel
  9. function ExcelToHtml() {
  10. $.ajax({
  11. url: "/Home/ExcelToHtml",
  12. data: "",
  13. type: "POST",
  14. async: false,
  15. dataType: "json",
  16. success: function (data) {
  17. //获得窗口的垂直位置
  18. var iWidth = ;
  19. var iHeight = ;
  20. var iTop = (window.screen.availHeight - - iHeight) / ;
  21. //获得窗口的水平位置
  22. var iLeft = (window.screen.availWidth - - iWidth) / ;
  23. window.open(data.str, '_blank', 'height=' + iHeight + ',innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft + ',status=no,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=0,titlebar=no');
  24.  
  25. }
  26. });
  27. }
  28.  
  29. //预览word
  30. function WordToHtml() {
  31. $.ajax({
  32. url: "/Home/WordToHtml",
  33. data: "",
  34. type: "POST",
  35. async: false,
  36. dataType: "json",
  37. success: function (data) {
  38. //获得窗口的垂直位置
  39. var iWidth = ;
  40. var iHeight = ;
  41. var iTop = (window.screen.availHeight - - iHeight) / ;
  42. //获得窗口的水平位置
  43. var iLeft = (window.screen.availWidth - - iWidth) / ;
  44. window.open(data.str, '_blank', 'height=' + iHeight + ',innerHeight=' + iHeight + ',width=' + iWidth + ',innerWidth=' + iWidth + ',top=' + iTop + ',left=' + iLeft + ',status=no,toolbar=no,menubar=no,location=no,resizable=no,scrollbars=0,titlebar=no');
  45.  
  46. }
  47. });
  48. }
  49.  
  50. </script>
  51.  
  52. <div style="margin-top:20px;height:800px">
  53. <input type="button" onclick="ExcelToHtml()" value="预览excel" />
  54. <input type="button" onclick="WordToHtml()" value="预览word" />
  55. </div>

 效果查看:

  在线预览excel:

    如下,很显然读取到了我们事先准备好的excel。

  在线预览excel:

    如下,很显然读取到了我们事先准备好的word。


 总结:

到这里一个简单的在线预览office就完成了,这是一个初始手稿,需要优化后续功能。

感兴趣的朋友可以关注一波,我们下次学习怎么在线编辑,实时保存(每改一下保存一下)和一键保存(编辑完成后点击保存)

原文地址:https://www.cnblogs.com/xiongze520/p/11358585.html

转载请注明出处,谢谢!

C# 基于NPOI+Office COM组件 实现20行代码在线预览文档(word,excel,pdf,txt,png)的更多相关文章

  1. Java 如何实现在线预览文档及修改(Office文件)

    测试地址: https://sms.idxkj.cn 用户名:aa 密码:123456

  2. 基于ASP.NET MVC 利用(Aspose+Pdfobject.js) 实现在线预览Word、Excel、PPT、PDF文件

    #region VS2010版本以及以上版本源码下载地址:http://download.csdn.net/download/u012949335/10231812 VS2012版本以及以上版本源码下 ...

  3. Office在线预览及PDF在线预览的实现方式史上最全大集合

    Office在线预览及PDF在线预览的实现方式大集合 一.服务器先转换为PDF,再转换为SWF,最后通过网页加载Flash预览 微软方:利用Office2007以上版本的一个PDF插件SaveAsPD ...

  4. web office apps 在线预览实践

    摘要 在一些项目中需要在线预览office文档,包括word,excel,ppt等.达到预览文档的目的有很多方法,可以看我之前总结,在线预览的n种方案: [Asp.net]常见word,excel,p ...

  5. 如何利用Python实现Office在线预览

    目前,市场对于Office在线预览功能的需求是很大的.对于我们用户本身来说,下载Office文件后再实现预览是极其不方便的,何况还有一些不能打开的专业文档.压缩文件等.此时,能提供在线预览服务的软件就 ...

  6. 基于开源方案构建统一的文件在线预览与office协同编辑平台的架构与实现历程

    大家好,又见面了. 在构建业务系统的时候,经常会涉及到对附件的支持,继而又会引申出对附件在线预览.在线编辑.多人协同编辑等种种能力的诉求. 对于人力不是特别充裕.或者项目投入预期规划不是特别大的公司或 ...

  7. Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (3)

    接上篇 Blazor组件自做九: 用20行代码实现文件上传,浏览目录功能 (2) 7. 使用配置文件指定监听地址 打开 appsettings.json 文件,加入一行 "UseUrls&q ...

  8. Java实现word文档在线预览,读取office文件

    想要实现word或者其他office文件的在线预览,大部分都是用的两种方式,一种是使用openoffice转换之后再通过其他插件预览,还有一种方式就是通过POI读取内容然后预览. 一.使用openof ...

  9. 最好用的js前端框架、组件、文档在线预览插件

    这里收集的都是个人认为比较好的js框架.组件 js前端ui框架 此处列举出个人认为最好的几个框架(排序即排名),现在好点的框架商用都需要付费,以下几个也不例外,但是由于组件丰富,都可以作为企业应用的完 ...

随机推荐

  1. Asp.Net url参数加密存在特殊符号处理方法

    Url出现了有+,空格,/,?,%,#,&,=等特殊符号的时候,服务器端无法获得正确的参数值,解决办法. 使用System.Web.HttpUtility.UrlEncode()方法将这些字符 ...

  2. 剑指offer第二版-3.数组中重复的数

    面试题3:数组中重复的数 题目要求: 在一个长度为n的数组中,所有数字的取值范围都在[0,n-1],但不知道有几个数字重复或重复几次,找出其中任意一个重复的数字. 解法比较: /** * Copyri ...

  3. 【题解】长度为素数的路径个数-C++

    Description 对于正整数n (3≤n<20),可以画出n阶的回形矩阵.下面画出的分别是3阶的,4阶的和7阶的回形矩阵: 对于n阶回形矩阵,从左上角出发,每步可以向右或向下走一格,走2* ...

  4. [leetcode] 290. Word Pattern (easy)

    原题 思路: 建立两个哈希表,分别保存: 1 模式 :单词 2 单词 :是否出现过 水题 /** * @param {string} pattern * @param {string} str * @ ...

  5. 在C#中ParameterizedThreadStart和ThreadStart区别

    不需要传递参数,也不需要返回参数 我们知道启动一个线程最直观的办法是使用Thread类,具体步骤如下: ThreadStart threadStart=new ThreadStart(Calculat ...

  6. Java程序员注意——审查Java代码的六种常见错误

    代码审查是消灭Bug最重要的方法之一,这些审查在大多数时候都特别奏效.由于代码审查本身所针对的对象,就是俯瞰整个代码在测试过程中的问题和Bug.并且,代码审查对消除一些特别细节的错误大有裨益,尤其是那 ...

  7. TP框架基础(四)----添加数据

    [数据添加] add() 该方法返回被添加的新记录的主键id值 两种方式实现数据添加 1. 数组方式数据添加 $goods = D(“Goods”); $arr = array(‘goods_name ...

  8. PyQt4 在Windows下安装

    快来加入群[python爬虫交流群](群号570070796),发现精彩内容.     首先在网上下载sip文件下载完之后解压, 在Windows的开始菜单栏中进入sip的解压目录下:   在目录下面 ...

  9. 【Mac】Mac 使用 zsh 后, mvn 命令无效

    如题-- 解决方法: 将 maven 的环境变量配置放到 .zshrc 文件中. 参考链接: http://ruby-china.org/topics/23158 https://yq.aliyun. ...

  10. jumpserver1.4.1 安装过程

    # 修改字符集 localedef -c -f UTF-8 -i zh_CN zh_CN.UTF-8 export LC_ALL=zh_CN.UTF-8 echo 'LANG="zh_CN. ...