MVC架构下,使用NPOI读取.DOCX文档中表格的内容
1、使用NPOI,可以在没有安装office的设备上读wiod、office。
2、本文只能读取.docx后缀的文档。
3、MVC架构中,上传文件只能使用form表单提交,转到控制器后要依次实现文件上传、打开文件、读取文件内容。
4、当读取文档中的表格时,逐行、逐单元格读取。
XCHTML:
<form id="form1" method="post" action="@Url.Action("Add","MeetRecord")" enctype="multipart/form-data"> <input type="file" name="files" id="files" onchange="ReadeWordTable(this)" /> <input type="submit" value="提交" /> </form>
● Url.Action("Add","MeetRecord")表单提交到MeetRecordControl控制器里面的Add方法。
● type为file的input框里面一定要有name属性,后台在接受文件时,是通过这个name字段接收的,如果不定义name属性,或者name的值与控制器中接收的参数名不一致,会出现问题。
● 因为使用form表单提交,后台只能返回一个页面,因此我在type为file的input框里添加了一个onchange事件,用来验证所选择的文件,是否符合要求。
● 下面的方法就是用来验证文件是否符合要求。
<script> function ReadeWordTable(target) { var fileSize = 0; var filetypes = [".docx"]; var filepath = target.value; var filemaxsize = 1024 * 2;//2M if (filepath) { var isnext = false; var fileend = filepath.substring(filepath.lastIndexOf(".")); if (filetypes[0] == fileend) { isnext = true; } if (!isnext) { alert("只能上传.docx类型文件!"); target.value = ""; return false; } } else { return false; } if (isIE && !target.files) { var filePath = target.value; var fileSystem = new ActiveXObject("Scripting.FileSystemObject"); if (!fileSystem.FileExists(filePath)) { alert("附件不存在,请重新输入!"); return false; } var file = fileSystem.GetFile(filePath); fileSize = file.Size; } else { fileSize = target.files[0].size; } var size = fileSize / 1024; if (size > filemaxsize) { alert("附件大小不能大于" + filemaxsize / 1024 + "M!"); target.value = ""; return false; } if (size <= 0) { alert("附件大小不能为0M!"); target.value = ""; return false; } } </script>
c#后台实现:
using System; using System.Data; using System.IO; using System.Text; using System.Web; using System.Web.Mvc; using NPOI.XWPF.UserModel; [HttpPost] public ActionResult Add(HttpPostedFileWrapper files) { HttpServerUtility server = System.Web.HttpContext.Current.Server; string save_Path = server.MapPath("..\\Word\\"); string fileName = files.FileName; files.SaveAs(save_Path + fileName); ViewBag.fileName = ReadWordText(fileName); return View(); } ////读取文档里面的表格 public string ReadWordText(string fileName) { string filePath = "..\\Word\\" + fileName; HttpServerUtility server = System.Web.HttpContext.Current.Server; string endPath = server.MapPath(filePath); string fileText = string.Empty; StringBuilder sbFileText = new StringBuilder(); #region 打开文档 XWPFDocument document = null; using (FileStream file = new FileStream(endPath, FileMode.Open)) { document = new XWPFDocument(file); } #endregion #region 表格 foreach (XWPFTable table in document.Tables) { foreach(XWPFTableRow row in table.Rows) { foreach (XWPFTableCell cell in row.GetTableCells()) { sbFileText.Append(cell.GetText()+"|"); } } } #endregion return sbFileText.ToString(); }
● 在后台接收文件时,一定要添加[HttpPost],否则会报错。
● 在Add方法中类型要ActionResult ,传的参数类型应该为HttpPostedFileWrapper 文件名应该与type为file的input的name属性值相同。
● 因为我需要获得文档表格里面的内容,在页面上显示出来,为了方便在前台读取每个表格里面的内容,用‘|’字符将表格里面的内容相互分割开。
● 在页面上使用Razor,进行接受,在对其进行处理,代码如下所示:
@{string fileName = ViewBag.fileName; string[] FileNameArr = null; if (fileName != "" && fileName != null) { FileNameArr = fileName.Split('|'); } }
MVC架构下,使用NPOI读取.DOCX文档中表格的内容的更多相关文章
- 利用java从docx文档中提取文本内容
利用java从docx文档中提取文本内容 使用Apache的第三方jar包,地址为https://poi.apache.org/ docx文档内容如图: 目录结构: 每个文件夹的名称为日期加上来源,例 ...
- 【转】ExcelHelper类,用npoi读取Excel文档
//------------------------------------------------------------------------------------- // All Right ...
- 使用NPOI读取Word文档内容并进行修改
前言 网上使用NPOI读取Word文件的例子现在也不少,本文就是参考网上大神们的例子进行修改以适应自己需求的. 参考博文 http://www.cnblogs.com/mahongbiao/p/376 ...
- 2018-10-04 [日常]用Python读取word文档中的表格并比较
最近想对某些word文档(docx)的表格内容作比较, 于是找了一下相关工具. 参考Automate the Boring Stuff with Python中的word部分, 试用了python-d ...
- Python实现读取Excel文档中的配置并下载软件包
问题:现在遇到这样一个问题,服务器存储了很多软件包,这些包输入不同的产品,每个产品都有自己的配置,互相交叉,那么到底某一产品所有配置的软件包下载后,占用多大空间呢? 分析:从这个问题入手,了解到:软件 ...
- 读取XML文档结构并写入内容
1.在项目中新建XML文档结构.xsd文件,在其中添加相应的节点. 2.读取文档结构并写入内容 string initFileName = @"D:\Config.xml"; Da ...
- 在几份docx文档中里查找某个值
import docx, os def readDocx(fileName): doc = docx.Document(fileName) content = '\n'.join([para.text ...
- [daily][troubleshoot][archlinux][wps][font] wps文档中的图内容无法显示中文
序 用linux作为工作生产环境的几个需要解决的问题之一是:文档协作,即如何兼容Micro$oft Office格式的文档. 我一般的工作方式是:在linux下创建一个win7的虚拟机,安装常用的wi ...
- NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式
下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...
随机推荐
- Vue状态管理vuex
前面的话 由于多个状态分散的跨越在许多组件和交互间各个角落,大型应用复杂度也经常逐渐增长.为了解决这个问题,Vue提供了vuex.本文将详细介绍Vue状态管理vuex 引入 当访问数据对象时,一个 V ...
- jQuery点击按钮实现div的隐藏和显示切换效果
<script type="text/javascript"> $(function(){ $('#click_event').click(function(){ i ...
- webpack2使用ch9-处理模板文件 .html .ejs .tpl模板使用
1 目录展示 安装依赖 "ejs-loader": "^0.3.0","html-loader": "^0.4.5", ...
- WebApi接口返回json,xml,text纯文本等
[Route("api/Message/MessageList/")] [HttpGet] public HttpResponseMessage MessageList() { R ...
- Echarts数据可视化series-scatter散点图,开发全解+完美注释
全栈工程师开发手册 (作者:栾鹏) Echarts数据可视化开发代码注释全解 Echarts数据可视化开发参数配置全解 6大公共组件详解(点击进入): title详解. tooltip详解.toolb ...
- jQuery Mobile事件,开发全解+完美注释
全栈工程师开发手册 (作者:栾鹏) jQuery Mobile事件全解 jQuery Mobile 所有class选项 jQuery Mobile 所有data-*选项 jQuery Mobile事件 ...
- Android View, Window,Activity概念区分(2)
(1)View:最基本的UI组件,表示屏幕上的一个矩形区域. (2)Window: 表示一个窗口,不一定有屏幕那么大,可以很大也可以很小:它包含一个View tree和窗口的layout 参数.Vie ...
- mysql在cmd命令下执行数据库操作
windows+r 运行cmd命令,执行以下操作! 当mysql 数据库文件相对于来说比较大的时候,这个时候你可能在正常环境下的mysql中是导入不进去的,因为mysql数据库本身就有默认的导入文件大 ...
- canvas绘制太阳系
原文地址:http://jeffzhong.space/2017/10/26/solar/ 学习canvas有一段时间了,顺便写个小项目练手,该项目用到的知识点包括: ES6面向对象 基本的三角函数 ...
- php开发微信公众号获取信息LBS
1.一般的公众号都可以在微信公众平台里面设置自定义菜单和自动回复消息,如果需要获取用户位置,则必须开启 服务器配置,当次功能开启后,微信公众平台的自定义菜单和自动回复则失效. 需要通过接口开发来实现微 ...