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 ...
随机推荐
- 一文为你详细讲解对象映射库【AutoMapper】所支持场景
前言 在AutoMapper未出世前,对象与对象之间的映射,我们只能通过手动为每个属性一一赋值,时间长了不仅是我们而且老外也觉得映射代码很无聊啊.这个时候老外的所写的强大映射库AutoMapper横空 ...
- [原创]KVM虚拟化管理平台的实现
KVM虚拟化管理平台的实现 源码链接:https://github.com/wsjhk/IaaS_admin.git 根据KVM虚拟化管理的要求,设计并实现网页操作管理KVM虚拟机.设计原理架构如下图 ...
- SpringMVC框架(四)文件的上传下载,上下文路径
文件目录: SpringMVC配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...
- 改变ListBoxItem选中的颜色
改变ListBoxItem主要是改变的style 下面直接看代码吧!!! <Style TargetType="{x:Type ListBoxItem}"> <S ...
- scala配置intellij IDEA15.0.3环境及hello world!
1. Intellij IDEA Scala开发环境搭建 Intellij IDEA 15.0.3 默认配置里面没有Scala插件,需要手动安装,在Intellij IDEA 15.0.3 第一次运行 ...
- 接口自动化测试方案PHP + mysql
接口测试在测试工作中是很常见的工作,但是在以往的接口测试工作中借助的一般是第三方插件.python开发的发送请求脚本.LR脚本.Jmeter脚本,之前也使用python开发了一套接口自动化测试系统,但 ...
- win10 uwp 通知Toast
win10通知使用Toast 可以使用win10 模板添加通知 var t = Windows.UI.Notifications.ToastTemplateType.ToastText02; 使用Ge ...
- win10 uwp App-to-app communication 应用通信
这篇文章都是乱说的,如果觉得有不好的,可以发我邮箱 应用之间需要相互的发送信息,就是我们经常用的分享 有个人看到一个网页很好,于是就希望把这个网页发送到邮件,那么这样的话就是使用应用通信. 因为每个应 ...
- win10 & Ubuntu16 双系统安装
忽然心血来潮吧,本机在已经安装了win10的背景下,想要再加一个linux系统学习学习,几经波折,终于成功. 博主笔记本里有两块固态,一个250G的装了win10,装的时间不久,镜像是在msdn上下载 ...
- redis3.2新功能--GEO地理位置命令介绍
概述 redis3.2发布rc版本已经有一段时间了,估计RedisConf 2016左右,3.2版本就能release了.3.2版本中增加的最大功能就是对GEO(地理位置)的支持.说起redis的GE ...