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文档中表格的内容的更多相关文章

  1. 利用java从docx文档中提取文本内容

    利用java从docx文档中提取文本内容 使用Apache的第三方jar包,地址为https://poi.apache.org/ docx文档内容如图: 目录结构: 每个文件夹的名称为日期加上来源,例 ...

  2. 【转】ExcelHelper类,用npoi读取Excel文档

    //------------------------------------------------------------------------------------- // All Right ...

  3. 使用NPOI读取Word文档内容并进行修改

    前言 网上使用NPOI读取Word文件的例子现在也不少,本文就是参考网上大神们的例子进行修改以适应自己需求的. 参考博文 http://www.cnblogs.com/mahongbiao/p/376 ...

  4. 2018-10-04 [日常]用Python读取word文档中的表格并比较

    最近想对某些word文档(docx)的表格内容作比较, 于是找了一下相关工具. 参考Automate the Boring Stuff with Python中的word部分, 试用了python-d ...

  5. Python实现读取Excel文档中的配置并下载软件包

    问题:现在遇到这样一个问题,服务器存储了很多软件包,这些包输入不同的产品,每个产品都有自己的配置,互相交叉,那么到底某一产品所有配置的软件包下载后,占用多大空间呢? 分析:从这个问题入手,了解到:软件 ...

  6. 读取XML文档结构并写入内容

    1.在项目中新建XML文档结构.xsd文件,在其中添加相应的节点. 2.读取文档结构并写入内容 string initFileName = @"D:\Config.xml"; Da ...

  7. 在几份docx文档中里查找某个值

    import docx, os def readDocx(fileName): doc = docx.Document(fileName) content = '\n'.join([para.text ...

  8. [daily][troubleshoot][archlinux][wps][font] wps文档中的图内容无法显示中文

    序 用linux作为工作生产环境的几个需要解决的问题之一是:文档协作,即如何兼容Micro$oft Office格式的文档. 我一般的工作方式是:在linux下创建一个win7的虚拟机,安装常用的wi ...

  9. NPOI 2.1.1 系列(1) 使用NPOI读取 Excel文档 ;NpoiExcelHelper 导入导出 2003格式 2007格式的 Excel; Npoi 导出 xlsx 格式

    下载地址 http://npoi.codeplex.com/releases 下面放一个 NPOIHelper 助手类吧,也不是我写的- NpoiExcelHelper 可以生成xlsx格式publi ...

随机推荐

  1. Linux入门之常用命令(5)Bash

    bash优点 1.命令编辑能力  记录使用过的命令 ~/.bash_history 记录上次的历史命令 2.补全功能  指令补全两下tab 文件名补全 3.命令别名  alias [别名]=‘’ 4. ...

  2. Docker入门之五数据管理

    在Docker使用过程中,需要对数据进行持久化或需要在多个容器之间进行数据共享,就会涉及容器的数据管理操作.主要有两种方式:1.数据卷 2.数据卷容器. 一.数据卷 数据卷是一个可供容器使用的特殊目录 ...

  3. jQuery中的常用内容总结(二)

    jQuery中的常用内容总结(二) 转载请注明地址: http://www.cnblogs.com/funnyzpc/p/7571993.html 前言 距离上次博客更新已经有二十来天了(●′ω`●) ...

  4. Html事件冒泡

    原以为span不同于input,事件冒泡会被父级标签吞噬,写了个测试事件冒泡的Demo,发现并不是想得那样.另外:event.stopPropagation()以及event.stopImmediat ...

  5. Python自学笔记-with详解

    with的作用: with关键字是一个替你管理实现上下文协议对象的东西,适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的"清理"操作,释放资源,比如文件使用 ...

  6. JavaWeb(七)之详解JavaWeb路径

    前言 在我们的实际开发中,经常要写路径,不管是链接,重定向还是转发,这都是需要路径的.那这一篇我给大家详细的分享一下Web中的各种路径问题. 世界上一切东西都是相对的,对于这点而言,相信大家并不陌生, ...

  7. LinearGradientBrush,RadialGradientBrush的样式说明

    LinearGradientBrush 使用线性渐变绘制区域.线性渐变沿直线定义渐变.该直线的终点由线性渐变的 StartPoint 和 EndPoint 属性定义.LinearGradientBru ...

  8. TensorFlow问题:The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available on your machine and could speed up CPU computations.

    1. 问题描述 The TensorFlow library wasn't compiled to use SSE4.2 instructions, but these are available o ...

  9. win10 uwp 无法附加到CoreCLR

    本文说的是在vs调试无法附加到CoreCLR.拒绝访问.已经如何去解决,可能带有一定的主观性和局限性,说的东西可能不对或者不符合每个人的预期.如果觉得我有讲的不对的,就多多包含,或者直接关掉这篇文章, ...

  10. JAVA提高七:类加载器

    今天我们学习类加载器,关于类加载器其实和JVM有很大关系,在这里这篇文章只是简单的介绍下类加载器,后面学习到JVM的时候还会详细讲到类加载器,本文分为下面几个小节讲解: 一.认识类加载器 1.什么是类 ...