日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

java如何利用poi解析doc和docx中的數據

瀏覽:26日期:2022-08-14 16:37:35

前言

這個功能是工作中遇到的一個需求,需要把上傳的word中的內容解析出來,其中包含段落字符串解析,和表格中的數據解析出來,需要支持doc和docx格式的數據

Apache POI是Apache軟件基金會的開源項目,POI提供API給Java程序對Microsoft Office格式檔案讀和寫的功能。 .NET的開發人員則可以利用NPOI (POI for .NET) 來存取 Microsoft Office文檔的功能。

方法如下:

1、增加maven中的包

<dependency><groupId>org.apache.poi</groupId><artifactId>poi-scratchpad</artifactId><version>3.17</version></dependency><!--POI包 --><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>3.17</version></dependency>

2、解析doc中的數據

獲取文件,把MultipartFile對象的數據轉成本地file

File file = new File(FileUtils.getUserDirectoryPath() + '/' + multipartFile.getOriginalFilename());FileUtils.copyInputStreamToFile(multipartFile.getInputStream(), file);

String fileName = file.getName().toLowerCase();FileInputStream in = new FileInputStream(file);if (fileName.endsWith('.doc')) { // 處理doc格式 即office2003版本 handlerDoc(in);}if (fileName.endsWith('.docx')) { handlerDocx(in);}

解析doc格式中的段落和第一個表格數據

/** * doc 格式解析 * * @param in * @throws IOException */ private void handlerDoc(FileInputStream in) throws IOException {POIFSFileSystem pfs = new POIFSFileSystem(in);HWPFDocument hwpf = new HWPFDocument(pfs);//得到文檔的讀取范圍Range range = hwpf.getRange();for (int i = 0; i < range.numParagraphs(); i++) { //段落 Paragraph p = range.getParagraph(i); //段落文本 String paragraphText = p.text().replace('r', ''); log.info('paragraphText = {}', paragraphText ); if (paragraphText.contains(VALUE_YLYC)) {analyze = false; }}TableIterator it = new TableIterator(range);// 迭代文檔中的表格// 如果有多個表格只讀取需要的一個 set是設置需要讀取的第幾個表格,total是文件中表格的總數int set = 1, total = 1;int num = set;for (int i = 0; i < set - 1; i++) { it.hasNext(); it.next();}while (it.hasNext()) { Map<String, List<String>> tabelText = DocUtils.getTabelDocText((Table) it.next()); log.info('tabelText = {}', tabelText);}// 過濾多余的表格while (num < total) { it.hasNext(); it.next(); num += 1;} }

3、解析docx中數據

解析docx格式中的段落和第一個表格數據

/** * docx 格式解析 * * @param in * @throws IOException */ private void handlerDocx(FileInputStream in) throws IOException {XWPFDocument xwpf = new XWPFDocument(in);// 獲取word中的所有段落與表格List<IBodyElement> elements = xwpf.getBodyElements();// 解析表格后續不解析for (IBodyElement element : elements) { // 段落 if (element instanceof XWPFParagraph) {String paragraphText = DocUtils.getParagraphText((XWPFParagraph) element);log.info('paragraphText = {}', paragraphText); } else if (element instanceof XWPFTable) {// 表格 Map<String, List<String>> tabelText = DocUtils.getTabelText((XWPFTable) element);log.info('tabelText = {}', tabelText); } else {log.info('其他內容'); }} }

工具類

package com.hundsun.fais.innerreport.utils;import org.apache.poi.hwpf.usermodel.Paragraph;import org.apache.poi.hwpf.usermodel.Table;import org.apache.poi.hwpf.usermodel.TableCell;import org.apache.poi.hwpf.usermodel.TableRow;import org.apache.poi.xwpf.usermodel.*;import java.util.*;/** * @author lvbaolin * @date 2021/4/2 10:39 */public class DocUtils { /** * docx 格式獲取表格內容 * * @param table */ public static Map<String, List<String>> getTabelText(XWPFTable table) {Map<String, List<String>> result = new LinkedHashMap<>();List<XWPFTableRow> rows = table.getRows();for (XWPFTableRow row : rows) { String key = null; List<String> list = new ArrayList<>(16); int i = 0; List<XWPFTableCell> cells = row.getTableCells(); for (XWPFTableCell cell : cells) {// 簡單獲取內容(簡單方式是不能獲取字體對齊方式的)StringBuffer sb = new StringBuffer();// 一個單元格可以理解為一個word文檔,單元格里也可以加段落與表格List<XWPFParagraph> paragraphs = cell.getParagraphs();for (XWPFParagraph paragraph : paragraphs) { sb.append(DocUtils.getParagraphText(paragraph));}if (i == 0) { key = sb.toString();} else { String value = sb.toString(); list.add(value == null || Objects.deepEquals(value, '') ? null : value.replace(',', ''));}i++; } result.put(key, list);}return result; } /** * docx 獲取段落字符串 * 獲取段落內容 * * @param paragraph */ public static String getParagraphText(XWPFParagraph paragraph) {StringBuffer runText = new StringBuffer();// 獲取段落中所有內容List<XWPFRun> runs = paragraph.getRuns();if (runs.size() == 0) { return runText.toString();}for (XWPFRun run : runs) { runText.append(run.text());}return runText.toString(); } /** * doc 格式的字段解析表格 * @param tb * @return */ public static Map<String, List<String>> getTabelDocText(Table tb) {Map<String, List<String>> result = new HashMap<>(16);//迭代行,默認從0開始,可以依據需要設置i的值,改變起始行數,也可設置讀取到那行,只需修改循環的判斷條件即可for (int i = 0; i < tb.numRows(); i++) { List<String> list = new ArrayList<>(16); int x = 0; TableRow tr = tb.getRow(i); String key = null; //迭代列,默認從0開始 for (int j = 0; j < tr.numCells(); j++) {//取得單元格TableCell td = tr.getCell(j);StringBuffer sb = new StringBuffer();//取得單元格的內容for (int k = 0; k < td.numParagraphs(); k++) { Paragraph paragraph = td.getParagraph(k); String s = paragraph.text(); //去除后面的特殊符號 if (null != s && !''.equals(s)) {s = s.substring(0, s.length() - 1); } sb.append(s);}if (x == 0) { key = sb.toString();} else { String value = sb.toString(); list.add(value == null || Objects.deepEquals(value, '') ? null : value.replace(',', ''));}x++; } result.put(key, list);}return result; }}

總結

到此這篇關于java如何利用poi解析doc和docx中數據的文章就介紹到這了,更多相關java poi解析doc數據內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
精品久久99| 国产精品一区二区精品| 国产精品久久久久久久久久久久久久久 | 国产亚洲毛片在线| 精品国产第一福利网站| 国产高清精品二区| 麻豆成人av在线| 国产白浆在线免费观看| 亚洲精选成人| 蜜桃视频一区二区三区 | 久久99高清| 免费污视频在线一区| 免费久久精品| 婷婷综合福利| 精品网站aaa| 99成人超碰| 免费视频一区二区| 国产欧美一区二区精品久久久| 国产欧美69| 国产精品地址| 亚洲网站视频| 日本中文字幕视频一区| 免费亚洲婷婷| 久久高清免费| 日韩欧美久久| 日韩欧美少妇| 久久精品99国产国产精| 麻豆成全视频免费观看在线看| 成人久久一区| 欧洲激情综合| 国产精品亚洲片在线播放| 日韩欧美三级| 国产欧美日韩影院| 亚洲特色特黄| 老牛国内精品亚洲成av人片| 欧美日韩激情| 91亚洲国产成人久久精品| 中文一区一区三区免费在线观 | 播放一区二区| 天堂va蜜桃一区二区三区| 国产欧美成人| 美女国产一区| 日韩在线观看| 国产精品亚洲产品| 亚洲欧洲专区| 男女男精品网站| 中文一区一区三区高中清不卡免费| 蜜桃av一区二区| 激情丁香综合| 精品丝袜久久| 国产精品三p一区二区| 综合色一区二区| 久久最新视频| 欧美日韩国产高清| 日本久久成人网| 国模大尺度视频一区二区| 国产乱人伦丫前精品视频| 青青伊人久久| 国产精品一线天粉嫩av| 国产香蕉精品| 久久精品国产久精国产| 日本不卡一区二区| 婷婷视频一区二区三区| 国产精品多人| 国产91在线播放精品| 国产va免费精品观看精品视频| 激情久久99| 偷拍精品精品一区二区三区| 97se综合| 亚洲一区二区三区中文字幕在线观看| 蜜桃伊人久久| 欧美日韩在线精品一区二区三区激情综合 | 婷婷精品在线观看| 欧美日韩中出| 国产情侣一区在线| 欧美一区自拍| 美日韩一区二区三区| 国产精品久一| 欧美一级鲁丝片| 在线综合亚洲| 国产日韩欧美在线播放不卡| 精品日韩一区| 欧美日韩一二三四| 日韩黄色av| 日韩综合精品| 亚洲精品大片| 国产一区二区三区不卡视频网站 | 四虎成人av| 国产精品日本| 欧美激情日韩| 欧洲毛片在线视频免费观看| 日韩精品久久久久久| 日韩免费看片| 国产日韩一区二区三免费高清| 桃色一区二区| 亚洲三级av| 成人免费电影网址| 国产色噜噜噜91在线精品| 蜜臀av免费一区二区三区| 国产极品嫩模在线观看91精品| 影视先锋久久| 久久中文字幕一区二区三区| 国产精品日韩| 91精品亚洲| 久久99精品久久久久久园产越南| 不卡在线一区| www在线观看黄色| 奇米亚洲欧美| 蜜芽一区二区三区| 欧美一级精品| 国产91欧美| 国产激情欧美| 69堂精品视频在线播放| 久久大逼视频| 99亚洲精品| 欧美日韩精品免费观看视欧美高清免费大片| 日韩精品五月天| 日韩欧美美女在线观看| 免费久久精品视频| 久久视频国产| 国产中文一区| 国产一区日韩一区| 欧美aa国产视频| 久久高清免费| 91久久久久| 美女网站一区| 亚洲精品网址| 国产精品嫩草99av在线| 爽好多水快深点欧美视频| 最新亚洲激情| 中文字幕亚洲影视| 天堂精品久久久久| 久久狠狠久久| 日本久久黄色| 91精品精品| 国产精品美女久久久| 免费成人在线影院| 日韩av午夜在线观看| 国产精品久久久久久久久久白浆| 国产精品欧美三级在线观看 | 午夜欧美精品久久久久久久| 999在线观看精品免费不卡网站| 亚洲神马久久| 亚欧成人精品| 激情久久一区二区| 九九综合九九| 日本国产欧美| 色婷婷综合网| 视频一区欧美精品| 欧美性www| 免费毛片在线不卡| 日韩精品五月天| 成人综合一区| 免费在线欧美视频| 国产精品调教| 欧美日韩国产探花| 国产手机视频一区二区| 日韩精品视频中文字幕| 91精品1区| 国产亚洲观看| 91精品1区| 久久影院资源站| 亚洲欧美日韩在线观看a三区 | 国产精品成人3p一区二区三区| 久久精品欧美一区| 欧美日韩一区二区三区不卡视频| 日韩啪啪电影网| 免费久久99精品国产| 日本一区二区免费高清| 日日夜夜免费精品视频| 亚洲小说欧美另类婷婷| 蜜桃传媒麻豆第一区在线观看| 国产精选在线| 国产欧美日韩精品一区二区免费| 影院欧美亚洲| 999国产精品| 日韩免费av| 国产精品国产一区| 国产日韩在线观看视频| 视频精品一区二区| 99视频精品全部免费在线视频| 久久天堂影院| 亚洲精品国产精品粉嫩| 99国产精品久久久久久久| 在线视频观看日韩| 欧美精选视频一区二区| 国产网站在线| 中文字幕在线视频久| av日韩中文| 91精品国产成人观看| 亚洲国产综合在线看不卡| 影视先锋久久| 91久久久精品国产| 午夜电影亚洲| 乱人伦精品视频在线观看| 免费人成在线不卡| 日韩国产高清在线| 亚洲不卡视频| 国产精品一卡| 欧美国产一级|