1、使用NPOI,可以在没有安装office的设备上读wiod、office。
2、本文只能读取.docx后缀的文档。
3、MVC架构中,上传文件只能使用form表单提交,转到控制器后要依次实现文件上传、打开文件、读取文件内容。
4、当读取文档中的表格时,逐行、逐单元格读取。

XCHTML:

  1. <form id="form1" method="post" action="@Url.Action("Add","MeetRecord")" enctype="multipart/form-data">
  2.     <input type="file" name="files" id="files" onchange="ReadeWordTable(this)" />
  3.     <input type="submit" value="提交" />
  4. </form>

● Url.Action("Add","MeetRecord")表单提交到MeetRecordControl控制器里面的Add方法。
● type为file的input框里面一定要有name属性,后台在接受文件时,是通过这个name字段接收的,如果不定义name属性,或者name的值与控制器中接收的参数名不一致,会出现问题。
● 因为使用form表单提交,后台只能返回一个页面,因此我在type为file的input框里添加了一个onchange事件,用来验证所选择的文件,是否符合要求。
● 下面的方法就是用来验证文件是否符合要求。

  1. <script>
  2. function ReadeWordTable(target) {
  3. var fileSize = 0;
  4. var filetypes = [".docx"];
  5. var filepath = target.value;
  6. var filemaxsize = 1024 * 2;//2M
  7. if (filepath) {
  8. var isnext = false;
  9. var fileend = filepath.substring(filepath.lastIndexOf("."));
  10. if (filetypes[0] == fileend) {
  11. isnext = true;
  12. }
  13. if (!isnext) {
  14. alert("只能上传.docx类型文件!");
  15. target.value = "";
  16. return false;
  17. }
  18. } else {
  19. return false;
  20. }
  21. if (isIE && !target.files) {
  22. var filePath = target.value;
  23. var fileSystem = new ActiveXObject("Scripting.FileSystemObject");
  24. if (!fileSystem.FileExists(filePath)) {
  25. alert("附件不存在,请重新输入!");
  26. return false;
  27. }
  28. var file = fileSystem.GetFile(filePath);
  29. fileSize = file.Size;
  30. } else {
  31. fileSize = target.files[0].size;
  32. }
  33. var size = fileSize / 1024;
  34. if (size > filemaxsize) {
  35. alert("附件大小不能大于" + filemaxsize / 1024 + "M!");
  36. target.value = "";
  37. return false;
  38. }
  39. if (size <= 0) {
  40. alert("附件大小不能为0M!");
  41. target.value = "";
  42. return false;
  43. }
  44. }
  45. </script>

c#后台实现:

  1. using System;
  2. using System.Data;
  3. using System.IO;
  4. using System.Text;
  5. using System.Web;
  6. using System.Web.Mvc;
  7. using NPOI.XWPF.UserModel;
  8.  
  9. [HttpPost]
  10. public ActionResult Add(HttpPostedFileWrapper files)
  11. {
  12. HttpServerUtility server = System.Web.HttpContext.Current.Server;
  13. string save_Path = server.MapPath("..\\Word\\");
  14. string fileName = files.FileName;
  15. files.SaveAs(save_Path + fileName);
  16. ViewBag.fileName = ReadWordText(fileName);
  17. return View();
  18. }
  19. ////读取文档里面的表格
  20. public string ReadWordText(string fileName)
  21. {
  22. string filePath = "..\\Word\\" + fileName;
  23. HttpServerUtility server = System.Web.HttpContext.Current.Server;
  24. string endPath = server.MapPath(filePath);
  25. string fileText = string.Empty;
  26. StringBuilder sbFileText = new StringBuilder();
  27. #region 打开文档
  28. XWPFDocument document = null;
  29. using (FileStream file = new FileStream(endPath, FileMode.Open))
  30. {
  31. document = new XWPFDocument(file);
  32.  
  33. }
  34. #endregion
  35. #region 表格
  36. foreach (XWPFTable table in document.Tables)
  37. {
  38. foreach(XWPFTableRow row in table.Rows)
  39. {
  40. foreach (XWPFTableCell cell in row.GetTableCells())
  41. {
  42. sbFileText.Append(cell.GetText()+"|");
  43. }
  44. }
  45.  
  46. }
  47. #endregion
  48. return sbFileText.ToString();
  49. }

● 在后台接收文件时,一定要添加[HttpPost],否则会报错。
● 在Add方法中类型要ActionResult ,传的参数类型应该为HttpPostedFileWrapper 文件名应该与type为file的input的name属性值相同。
● 因为我需要获得文档表格里面的内容,在页面上显示出来,为了方便在前台读取每个表格里面的内容,用‘|’字符将表格里面的内容相互分割开。
● 在页面上使用Razor,进行接受,在对其进行处理,代码如下所示:

  1. @{string fileName = ViewBag.fileName;
  2. string[] FileNameArr = null;
  3. if (fileName != "" && fileName != null)
  4. {
  5. FileNameArr = fileName.Split('|');
  6. }
  7. }

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. 一文为你详细讲解对象映射库【AutoMapper】所支持场景

    前言 在AutoMapper未出世前,对象与对象之间的映射,我们只能通过手动为每个属性一一赋值,时间长了不仅是我们而且老外也觉得映射代码很无聊啊.这个时候老外的所写的强大映射库AutoMapper横空 ...

  2. [原创]KVM虚拟化管理平台的实现

    KVM虚拟化管理平台的实现 源码链接:https://github.com/wsjhk/IaaS_admin.git 根据KVM虚拟化管理的要求,设计并实现网页操作管理KVM虚拟机.设计原理架构如下图 ...

  3. SpringMVC框架(四)文件的上传下载,上下文路径

    文件目录: SpringMVC配置文件: <?xml version="1.0" encoding="UTF-8"?> <beans xmln ...

  4. 改变ListBoxItem选中的颜色

    改变ListBoxItem主要是改变的style 下面直接看代码吧!!! <Style TargetType="{x:Type ListBoxItem}"> <S ...

  5. scala配置intellij IDEA15.0.3环境及hello world!

    1. Intellij IDEA Scala开发环境搭建 Intellij IDEA 15.0.3 默认配置里面没有Scala插件,需要手动安装,在Intellij IDEA 15.0.3 第一次运行 ...

  6. 接口自动化测试方案PHP + mysql

    接口测试在测试工作中是很常见的工作,但是在以往的接口测试工作中借助的一般是第三方插件.python开发的发送请求脚本.LR脚本.Jmeter脚本,之前也使用python开发了一套接口自动化测试系统,但 ...

  7. win10 uwp 通知Toast

    win10通知使用Toast 可以使用win10 模板添加通知 var t = Windows.UI.Notifications.ToastTemplateType.ToastText02; 使用Ge ...

  8. win10 uwp App-to-app communication 应用通信

    这篇文章都是乱说的,如果觉得有不好的,可以发我邮箱 应用之间需要相互的发送信息,就是我们经常用的分享 有个人看到一个网页很好,于是就希望把这个网页发送到邮件,那么这样的话就是使用应用通信. 因为每个应 ...

  9. win10 & Ubuntu16 双系统安装

    忽然心血来潮吧,本机在已经安装了win10的背景下,想要再加一个linux系统学习学习,几经波折,终于成功. 博主笔记本里有两块固态,一个250G的装了win10,装的时间不久,镜像是在msdn上下载 ...

  10. redis3.2新功能--GEO地理位置命令介绍

    概述 redis3.2发布rc版本已经有一段时间了,估计RedisConf 2016左右,3.2版本就能release了.3.2版本中增加的最大功能就是对GEO(地理位置)的支持.说起redis的GE ...