MVC架构下,使用NPOI读取.DOCX文档中表格的内容

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

XCHTML:

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

● 下面的方法就是用来验证文件是否符合要求。

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,.net,c#)