日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[简单]poi word2007表格按模版样式填充行数据

發(fā)布時間:2025/5/22 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [简单]poi word2007表格按模版样式填充行数据 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

主要實現了按照模版行的樣式填充數據,針對的是動態(tài)數據,靜態(tài)數據可以直接替換變量實現,先說下缺點:1)暫未實現特殊樣式填充(如列合并(跨行合并)),只能用于普通樣式(如段落間距 縮進 字體 對齊)2)數據行插到模版行下面,沒有實現指定位置插入

直接上代碼:

import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Iterator; import java.util.List;import org.apache.poi.xwpf.usermodel.XWPFDocument; import org.apache.poi.xwpf.usermodel.XWPFParagraph; import org.apache.poi.xwpf.usermodel.XWPFRun; import org.apache.poi.xwpf.usermodel.XWPFTable; import org.apache.poi.xwpf.usermodel.XWPFTableCell; import org.apache.poi.xwpf.usermodel.XWPFTableRow; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTFonts; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTInd; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTP; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTPPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTRPr; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTSpacing; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTc; import org.openxmlformats.schemas.wordprocessingml.x2006.main.CTTcPr;public class POI_表格_按模版樣式填充數據_S3_Test {public static void main(String[] args) throws Exception {POI_表格_按模版樣式填充數據_S3_Test t = new POI_表格_按模版樣式填充數據_S3_Test();t.insertDataToTable("f:/saveFile/temp/sys_s3_template.docx", 3, false);}public void insertDataToTable(String filePath, int tableSize,boolean isDelTmpRow) throws Exception {InputStream is = new FileInputStream(filePath);XWPFDocument doc = new XWPFDocument(is);List<List<String>> resultList = generateTestData(4);insertValueToTable(doc, resultList, tableSize, isDelTmpRow);saveDocument(doc, "f:/saveFile/temp/sys_" + System.currentTimeMillis()+ ".docx");}/*** @Description: 按模版行樣式填充數據,暫未實現特殊樣式填充(如列合并),只能用于普通樣式(如段落間距 縮進 字體 對齊)* @param resultList 填充數據* @param tableRowSize 模版表格行數 取第一個行數相等列數相等的表格填充* @param isDelTmpRow 是否刪除模版行*/// TODO 數據行插到模版行下面,沒有實現指定位置插入public void insertValueToTable(XWPFDocument doc,List<List<String>> resultList, int tableRowSize, boolean isDelTmpRow)throws Exception {Iterator<XWPFTable> iterator = doc.getTablesIterator();XWPFTable table = null;List<XWPFTableRow> rows = null;List<XWPFTableCell> cells = null;List<XWPFTableCell> tmpCells = null;// 模版列XWPFTableRow tmpRow = null;// 匹配用XWPFTableCell tmpCell = null;// 匹配用boolean flag = false;// 是否找到表格while (iterator.hasNext()) {table = iterator.next();rows = table.getRows();if (rows.size() == tableRowSize) {tmpRow = rows.get(tableRowSize - 1);cells = tmpRow.getTableCells();if (cells.size() == resultList.get(0).size()) {flag = true;break;}}}if (!flag) {return;}tmpCells = tmpRow.getTableCells();for (int i = 0, len = resultList.size(); i < len; i++) {XWPFTableRow row = table.createRow();row.setHeight(tmpRow.getHeight());List<String> list = resultList.get(i);cells = row.getTableCells();// 插入的行會填充與表格第一行相同的列數for (int k = 0, klen = cells.size(); k < klen; k++) {tmpCell = tmpCells.get(k);XWPFTableCell cell = cells.get(k);setCellText(tmpCell, cell, list.get(k));}// 繼續(xù)寫剩余的列for (int j = cells.size(), jlen = list.size(); j < jlen; j++) {tmpCell = tmpCells.get(j);XWPFTableCell cell = row.addNewTableCell();setCellText(tmpCell, cell, list.get(j));}}// 刪除模版行if (isDelTmpRow) {table.removeRow(tableRowSize - 1);}}public void setCellText(XWPFTableCell tmpCell, XWPFTableCell cell,String text) throws Exception {CTTc cttc2 = tmpCell.getCTTc();CTTcPr ctPr2 = cttc2.getTcPr();CTTc cttc = cell.getCTTc();CTTcPr ctPr = cttc.addNewTcPr();cell.setColor(tmpCell.getColor());cell.setVerticalAlignment(tmpCell.getVerticalAlignment());if (ctPr2.getTcW() != null) {ctPr.addNewTcW().setW(ctPr2.getTcW().getW());}if (ctPr2.getVAlign() != null) {ctPr.addNewVAlign().setVal(ctPr2.getVAlign().getVal());}if (cttc2.getPList().size() > 0) {CTP ctp = cttc2.getPList().get(0);if (ctp.getPPr() != null) {if (ctp.getPPr().getJc() != null) {cttc.getPList().get(0).addNewPPr().addNewJc().setVal(ctp.getPPr().getJc().getVal());}}}if (ctPr2.getTcBorders() != null) {ctPr.setTcBorders(ctPr2.getTcBorders());}XWPFParagraph tmpP = tmpCell.getParagraphs().get(0);XWPFParagraph cellP = cell.getParagraphs().get(0);XWPFRun tmpR = null;if (tmpP.getRuns() != null && tmpP.getRuns().size() > 0) {tmpR = tmpP.getRuns().get(0);}XWPFRun cellR = cellP.createRun();cellR.setText(text);// 復制字體信息if (tmpR != null) {cellR.setBold(tmpR.isBold());cellR.setItalic(tmpR.isItalic());cellR.setStrike(tmpR.isStrike());cellR.setUnderline(tmpR.getUnderline());cellR.setColor(tmpR.getColor());cellR.setTextPosition(tmpR.getTextPosition());if (tmpR.getFontSize() != -1) {cellR.setFontSize(tmpR.getFontSize());}if (tmpR.getFontFamily() != null) {cellR.setFontFamily(tmpR.getFontFamily());}if (tmpR.getCTR() != null) {if (tmpR.getCTR().isSetRPr()) {CTRPr tmpRPr = tmpR.getCTR().getRPr();if (tmpRPr.isSetRFonts()) {CTFonts tmpFonts = tmpRPr.getRFonts();CTRPr cellRPr = cellR.getCTR().isSetRPr() ? cellR.getCTR().getRPr() : cellR.getCTR().addNewRPr();CTFonts cellFonts = cellRPr.isSetRFonts() ? cellRPr.getRFonts() : cellRPr.addNewRFonts();cellFonts.setAscii(tmpFonts.getAscii());cellFonts.setAsciiTheme(tmpFonts.getAsciiTheme());cellFonts.setCs(tmpFonts.getCs());cellFonts.setCstheme(tmpFonts.getCstheme());cellFonts.setEastAsia(tmpFonts.getEastAsia());cellFonts.setEastAsiaTheme(tmpFonts.getEastAsiaTheme());cellFonts.setHAnsi(tmpFonts.getHAnsi());cellFonts.setHAnsiTheme(tmpFonts.getHAnsiTheme());}}}}// 復制段落信息 cellP.setAlignment(tmpP.getAlignment());cellP.setVerticalAlignment(tmpP.getVerticalAlignment());cellP.setBorderBetween(tmpP.getBorderBetween());cellP.setBorderBottom(tmpP.getBorderBottom());cellP.setBorderLeft(tmpP.getBorderLeft());cellP.setBorderRight(tmpP.getBorderRight());cellP.setBorderTop(tmpP.getBorderTop());cellP.setPageBreak(tmpP.isPageBreak());if (tmpP.getCTP() != null) {if (tmpP.getCTP().getPPr() != null) {CTPPr tmpPPr = tmpP.getCTP().getPPr();CTPPr cellPPr = cellP.getCTP().getPPr() != null ? cellP.getCTP().getPPr() : cellP.getCTP().addNewPPr();// 復制段落間距信息CTSpacing tmpSpacing = tmpPPr.getSpacing();if (tmpSpacing != null) {CTSpacing cellSpacing = cellPPr.getSpacing() != null ? cellPPr.getSpacing(): cellPPr.addNewSpacing();if (tmpSpacing.getAfter() != null) {cellSpacing.setAfter(tmpSpacing.getAfter());}if (tmpSpacing.getAfterAutospacing() != null) {cellSpacing.setAfterAutospacing(tmpSpacing.getAfterAutospacing());}if (tmpSpacing.getAfterLines() != null) {cellSpacing.setAfterLines(tmpSpacing.getAfterLines());}if (tmpSpacing.getBefore() != null) {cellSpacing.setBefore(tmpSpacing.getBefore());}if (tmpSpacing.getBeforeAutospacing() != null) {cellSpacing.setBeforeAutospacing(tmpSpacing.getBeforeAutospacing());}if (tmpSpacing.getBeforeLines() != null) {cellSpacing.setBeforeLines(tmpSpacing.getBeforeLines());}if (tmpSpacing.getLine() != null) {cellSpacing.setLine(tmpSpacing.getLine());}if (tmpSpacing.getLineRule() != null) {cellSpacing.setLineRule(tmpSpacing.getLineRule());}}// 復制段落縮進信息CTInd tmpInd = tmpPPr.getInd();if (tmpInd != null) {CTInd cellInd = cellPPr.getInd() != null ? cellPPr.getInd(): cellPPr.addNewInd();if (tmpInd.getFirstLine() != null) {cellInd.setFirstLine(tmpInd.getFirstLine());}if (tmpInd.getFirstLineChars() != null) {cellInd.setFirstLineChars(tmpInd.getFirstLineChars());}if (tmpInd.getHanging() != null) {cellInd.setHanging(tmpInd.getHanging());}if (tmpInd.getHangingChars() != null) {cellInd.setHangingChars(tmpInd.getHangingChars());}if (tmpInd.getLeft() != null) {cellInd.setLeft(tmpInd.getLeft());}if (tmpInd.getLeftChars() != null) {cellInd.setLeftChars(tmpInd.getLeftChars());}if (tmpInd.getRight() != null) {cellInd.setRight(tmpInd.getRight());}if (tmpInd.getRightChars() != null) {cellInd.setRightChars(tmpInd.getRightChars());}}}}}public void saveDocument(XWPFDocument document, String savePath)throws Exception {FileOutputStream fos = new FileOutputStream(savePath);document.write(fos);fos.close();}// 生成測試數據public List<List<String>> generateTestData(int num) {List<List<String>> resultList = new ArrayList<List<String>>();for (int i = 1; i <= num; i++) {List<String> list = new ArrayList<String>();list.add("" + i);list.add("測試_" + i);list.add("測試2_" + i);list.add("測試3_" + i);list.add("測試4_" + i);resultList.add(list);}return resultList;} }

結果如下:
??????普通表格不刪除模版列:
??????

?
??????普通表格刪除模版列:
??????

?
??????帶樣式表格不刪除模版列:
??????

?
??????帶樣式表格刪除模版列:
???????

?
??????帶合并單元格表格不刪除模版列:
??????

?
??????帶合并單元格表格刪除模版列:
??????

原鏈接:http://53873039oycg.iteye.com/blog/2152759

轉載于:https://www.cnblogs.com/dreammyle/p/4606867.html

總結

以上是生活随笔為你收集整理的[简单]poi word2007表格按模版样式填充行数据的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 超碰成人免费在线 | 国产精品视频播放 | 日本一二三视频 | 日本激情一区二区三区 | 男女叼嘿视频 | 四色最新网址 | 深夜影院深a | 色综合99 | 欧美破处大片 | 天天干天天添 | 性欧美video另类hd尤物 | 久久久精品视频免费 | 国产精品18久久久久久无码 | av草逼| 精品久久久久久久久久久久久久久久久 | 欧美久久精品一级黑人c片 1000部多毛熟女毛茸茸 | 99热日韩 | 特黄特黄视频 | 日韩精品中文字幕一区二区三区 | av男人网 | 成人福利小视频 | 色哟哟无码精品一区二区三区 | 日韩经典一区二区 | 精品免费av | 久久久九九九九 | 国产98在线| 国产欧美视频在线 | 观看av| 欧美专区第一页 | 九九九视频在线观看 | 亚洲一区二区三区四区在线 | 色一情一乱一伦一区二区三区 | 免费黄色网页 | 黄色一级片在线免费观看 | 亚洲天堂精品在线观看 | 在线观看一区 | 亚洲大尺度在线观看 | 男女污视频 | 国产一级淫片免费 | 爆操欧美美女 | 欧美美女在线 | 亚洲久久一区 | 国产伦精品一区二区三区四区 | 欧美成人久久久免费播放 | 无码精品人妻一区二区三区漫画 | 欧美国产日韩视频 | 青青草在线免费观看 | 国产美女www| 一区二区在线观看免费 | 少妇婷婷| 亚洲色图av在线 | 中文字幕少妇 | 午夜激情视频网站 | 美女一区二区三区 | 成人黄色免费在线观看 | xxx国产在线观看 | 先锋资源av在线 | 国产第4页 | 人人艹人人爱 | 少妇愉情理伦片bd | 国产精品久久影视 | 91看视频| 国产一区二区内射 | 久久久免费毛片 | 欧美做爰爽爽爽爽爽爽 | 久久综合免费视频 | av无码精品一区二区三区 | 亚洲免费观看高清完整版在线 | www.爆操| 国产一区二区三区在线播放无 | 天天操天天操天天操天天操 | 少妇又紧又色又爽又刺激 | 性高潮在线观看 | 国产一区二区三区免费在线观看 | 五月天国产在线 | 婷婷色在线播放 | 欧美精品三区 | 香蕉视频链接 | 亚洲图片在线播放 | 中文字幕乱码av | 91性 | 成人影视网址 | 国产艳妇疯狂做爰视频 | 黄色片aa| 污污视频在线看 | 国产乱人乱偷精品视频a人人澡 | 最新天堂中文在线 | 荡女精品导航 | 本道综合精品 | 大香依人 | 久久久久久久久艹 | 欧洲精品久久久 | 欧美二区三区 | 国产日产精品一区二区三区四区 | 日韩美女三级 | 国产精品无码电影在线观看 | 国产精品偷伦视频免费看 | 午夜性剧场| 色伊伊 |