MVC架构下,使用NPOI读取.DOCX文档中表格的内容
                                                            生活随笔
收集整理的這篇文章主要介紹了
                                MVC架构下,使用NPOI读取.DOCX文档中表格的内容
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.                        
                                1、使用NPOI,可以在沒有安裝office的設(shè)備上讀wiod、office。
2、本文只能讀取.docx后綴的文檔。
3、MVC架構(gòu)中,上傳文件只能使用form表單提交,轉(zhuǎn)到控制器后要依次實(shí)現(xiàn)文件上傳、打開文件、讀取文件內(nèi)容。
4、當(dāng)讀取文檔中的表格時(shí),逐行、逐單元格讀取。
XCHTML:
<form id="form1" method="post" action="@Url.Action("Add","MeetRecord")" enctype="multipart/form-data"><input type="file" name="files" id="files" οnchange="ReadeWordTable(this)" /><input type="submit" value="提交" /> </form> ● Url.Action("Add","MeetRecord")表單提交到MeetRecordControl控制器里面的Add方法。● type為file的input框里面一定要有name屬性,后臺(tái)在接受文件時(shí),是通過這個(gè)name字段接收的,如果不定義name屬性,或者name的值與控制器中接收的參數(shù)名不一致,會(huì)出現(xiàn)問題。
● 因?yàn)槭褂胒orm表單提交,后臺(tái)只能返回一個(gè)頁面,因此我在type為file的input框里添加了一個(gè)onchange事件,用來驗(yàn)證所選擇的文件,是否符合要求。
● 下面的方法就是用來驗(yàn)證文件是否符合要求。
<script> function ReadeWordTable(target) { var isIE = /msie/i.test(navigator.userAgent) && !window.opera; var fileSize = 0;var filetypes = [".docx"];var filepath = target.value;var filemaxsize = 1024 * 2;//2Mif (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("附件不存在,請(qǐng)重新輸入!");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#后臺(tái)實(shí)現(xiàn): 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()+"|");}}}#endregionreturn sbFileText.ToString();}- 在后臺(tái)接收文件時(shí),一定要添加[HttpPost],否則會(huì)報(bào)錯(cuò)。
- 在Add方法中類型要ActionResult ,傳的參數(shù)類型應(yīng)該為HttpPostedFileWrapper 文件名應(yīng)該與type為file的input的name屬性值相同。
- 因?yàn)槲倚枰@得文檔表格里面的內(nèi)容,在頁面上顯示出來,為了方便在前臺(tái)讀取每個(gè)表格里面的內(nèi)容,用‘|’字符將表格里面的內(nèi)容相互分割開。
- 在頁面上使用Razor,進(jìn)行接受,在對(duì)其進(jìn)行處理,代碼如下所示:        string fileName = ViewBag.fileName;string[] FileNameArr = null;if (fileName != "" && fileName != null){FileNameArr = fileName.Split('|');}
總結(jié)
以上是生活随笔為你收集整理的MVC架构下,使用NPOI读取.DOCX文档中表格的内容的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: linux全局启动tomcat,linu
- 下一篇: mms list
