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. #pragma编译指令

    #pragma alignment#pragma anon_struct#pragma argsused#pragma checkoption#pragma codeseg#pragma commen ...

  2. React Router 按需加载+服务器渲染的闪屏问题

    伴随着React协议的『妥协』(v16采用MIT),React为项目的主体,这个在短期内是不会改变的了,在平时使用过程中发现了如下这个问题: 在服务器渲染的时候,刷新页面会出现闪屏的现象(白屏一闪而过 ...

  3. Linux脚本入门(1)

    1. Linux 脚本编写基础1.1 语法基本介绍1.1.1 开头程序必须以下面的行开始(必须方在文件的第一行): #!/bin/sh 符号#!用来告诉系统它后面的参数是用来执行该文件的程序.在这个例 ...

  4. 126邮箱发送邮件python实现

    126邮箱发送邮件python实现 from email.mime.text import MIMEText from email.utils import formataddr import smt ...

  5. HDU2874 LCA Tarjan

    不知道为什么_add2不能只用单方向呢...........调试了好多次,待我解决这个狗血问题 #include <iostream> #include <vector> #i ...

  6. Uploadify 3.2上传文件,限制类型,大小,传递参数等

    <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="upload.aspx.cs ...

  7. JAVA提高四:反射基本应用

    在前面一节<http://www.cnblogs.com/pony1223/p/7659210.html>,我们学习了JAVA的反射的相关知识,那么本节我们对前面所学习的知识做一个应用相关 ...

  8. 【转载】使用CSS将图片转换成黑白(灰色、置灰)

    文章转载自 张鑫旭-鑫空间-鑫生活 http://www.zhangxinxu.com/ 原文链接:http://www.zhangxinxu.com/wordpress/?p=2547原文摘要: . ...

  9. MyServer

    //一.设置一个8089端口的本地IP服务器 1 package myserver; import java.io.IOException; import java.net.ServerSocket; ...

  10. 《SQL必知必会》学习笔记二)

    <SQL必知必会>学习笔记(二) 咱们接着上一篇的内容继续.这一篇主要回顾子查询,联合查询,复制表这三类内容. 上一部分基本上都是简单的Select查询,即从单个数据库表中检索数据的单条语 ...