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. Delphi中 StrToIntDef函数的用法

    Delphi中 StrToIntDef函数的用法:比如我要判断一个文本框里输入的字符串能不能转换为integer类型,如果能,则返回转换后的整型数据,如果不能,则返回整数0,那么我就可以用strtoi ...

  2. .h(头文件) .lib(库文件) .dll(动态链接库文件) 之间的关系和作用的区分

    .h头文件是编译时必须的,lib是链接时需要的,dll是运行时需要的.附加依赖项的是.lib不是.dll,若生成了DLL,则肯定也生成 LIB文件.如果要完成源代码的编译和链接,有头文件和lib就够了 ...

  3. 移动端效果之Swiper

    写在前面 最近在做移动端方面运用到了饿了么的vue前端组件库,因为不想单纯用组件而使用它,故想深入了解一下实现原理.后续将会继续研究一下其他的组件实现原理,有兴趣的可以关注下. 代码在这里:戳我 1. ...

  4. RobotFramework自动化测试框架-移动手机自动化测试Click Element关键字的使用

    Click Element关键字用来模拟点击APP界面上的一个元素,该关键字接收一个参数[ locator ] ,这里的locator指的是界面元素的定位方式. 示例1:使用Click Element ...

  5. php基础运算符语句

    /* 多行注释 *///常用数据类型//int string double/float bool//变量的定义$a = 123;$b = "123";$c = '456';//$d ...

  6. 悟透JavaScript (一)

    首先说明,这是别人写的一篇文章,写得很好,对理解JavaScript很有好处,所以转帖过来. 引子    编程世界里只存在两种基本元素,一个是数据,一个是代码.编程世界就是在数据和代码千丝万缕的纠缠中 ...

  7. canvas图表详解系列(1):柱状图

    本章建议学习时间4小时 学习方式:详细阅读,并手动实现相关代码(如果没有canvas基础,需要先学习前面的canvas基础笔记) 学习目标:此教程将教会大家如何使用canvas绘制各种图表,详细分解步 ...

  8. Pyhton编程(一)之第一个Pyhton程序

    一:Python的第一个程序 Python在Windows系统和Linux系统下都可以安装,这里不过多说明安装过程,linux系统默认情况已经安装了Python2x的版本.注:目前使用的Python均 ...

  9. Hyper-v 虚拟机安装win7

    Hyper-v 是微软自带的虚拟机 一般安装win10都有 对小娜说:Hyper就会出现 进入Hyper-v 如果虚拟机不可用 启动服务 新建虚拟机 一般设置可以自己随意 虚拟机第一代才可以使用win ...

  10. maven的java web项目启动找不到Spring ContextLoaderListener的解决办法

    用maven搭建的java web项目,上传到git仓库后,当同事clone下来项目,部署到tomcat运行时,就报了如下错误,即启动web项目时,加载web.xml文件,找不到spring的监听器, ...