poi 3.17操作Word工具包,点击此处

当前版本 5.2.2 ,版本不同,写法略有差异
- poi-5.2.2 操作word 【段落】
- poi-5.2.2 操作word 【表格】
- poi-5.2.2 操作word【单元格、行、列】
- poi 5.2.2 操作word【页眉页脚】
- poi 5.2.2 操作word【纸张、边距】
- poi-5.2.2 操作word【图片操作相关】
- poi 5.2.2 操作word【目录】


本文所需依赖

     <dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.2</version><scope>compile</scope></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml-full</artifactId><version>5.2.2</version></dependency>

行、列、单元格操作相关

  • - 设置单元格背景色
  • - 设置单元格宽度
  • - 获取单元格宽度
  • - 设置行高
  • - 获取行高
  • - 移除单元格
  • - 复刻一个单元格
  • - 绘制单元格斜分割线
  • - 去除单元格边框线
  • - 移除单元格边框、设置单元格单框样式
  • - 是否允许 表格/行 跨页断行
  • - 设置单元格边距
  • - 合并单元格(合并列、跨列合并)
  • - 合并单元格(合并行、跨行合并)
  • - 检查当前单元格是否被合并
  • - 涉及子方法,上面的方法内若是报错看这里

- 设置单元格背景色

 /*** 设置单元格背景色。*/public static void setCellBackGround(XWPFTableCell cell , String color){CTTc ctTc = cell.getCTTc();CTTcPr tcPr = ctTc.isSetTcPr() ? ctTc.getTcPr() : ctTc.addNewTcPr();CTShd ctShd = tcPr.isSetShd() ? tcPr.getShd() : tcPr.addNewShd();ctShd.setVal(STShd.CLEAR);ctShd.setFill(color);}

- 设置单元格宽度

 /**设置单元格宽度   单位 磅*/public static void setCellW(XWPFTableCell cell , float w){CTTc ctTc = cell.getCTTc();CTTcPr tcPr = ctTc.isSetTcPr() ? ctTc.getTcPr() : ctTc.addNewTcPr();CTTblWidth tcW = tcPr.isSetTcW() ? tcPr.getTcW() : tcPr.addNewTcW();tcW.setType(STTblWidth.DXA);tcW.setW(BigInteger.valueOf((int) (w * 20f)));}

- 获取单元格宽度

 /** 获取单元格宽度 单位 磅*/public static int getCellW(XWPFTableCell cell){try {return Integer.parseInt(cell.getCTTc().getTcPr().getTcW().getW().toString()) / 20;}catch (Exception e){e.printStackTrace();return 0;}}

- 设置行高

 /**设置表格行 的 高度  单位 磅 。 */public static void setRowH(XWPFTableRow row , float h){row.setHeight(Math.round(h * 20));}

- 获取行高

    /**获取表格行 的 高度  单位 磅 。 */public static int getRowH(XWPFTableRow row){return row.getHeight() / 20;}

- 移除单元格

 /** 移除单元格 */public static void removeCell(XWPFTable table , int rows , int cols){XWPFTableRow row = table.getRow(rows);XWPFTableCell cell = row.getCell(cols);List<XWPFParagraph> paragraphs = cell.getParagraphs();for(int p = 0; p < paragraphs.size(); p++){cell.removeParagraph(p);}row.removeCell(cols);row.getCtRow().removeTc(cols);}

- 复刻一个单元格

 /** 复刻单元格 */public static void copyCell(XWPFTableCell from , XWPFTableCell to){to.getCTTc().getTcPr().set(from.getCTTc().getTcPr());if(StringUtil.empty(to.getParagraphArray(0).getText())){to.removeParagraph(0);}for(XWPFParagraph p : from.getParagraphs()){to.addParagraph().getCTP().set(p.getCTP());}}

- 绘制单元格斜分割线

 /*** 对应表格 绘制表格,用于给单元格 左上-右下 斜线分割*/public static void setDrawBias(XWPFTableCell cell){CTTcPr tcPr = getCttcpr(cell);CTTcBorders ctTcBorders = tcPr.isSetTcBorders() ? tcPr.getTcBorders() : tcPr.addNewTcBorders();CTBorder ctBorder = ctTcBorders.isSetTl2Br() ? ctTcBorders.getTl2Br() : ctTcBorders.addNewTl2Br();ctBorder.setVal(STBorder.SINGLE);ctBorder.setSz(BigInteger.valueOf(4));ctBorder.setSpace(BigInteger.valueOf(0));ctBorder.setColor("auto");}

- 去除单元格边框线

/**移除单元格对应的边框线*/public static void removeCellLeftBorder(XWPFTableCell cell){cell.getCTTc().getTcPr().addNewTcBorders().addNewLeft().setVal(STBorder.NIL);}public static void removeCellRightBorder(XWPFTableCell cell){cell.getCTTc().getTcPr().addNewTcBorders().addNewRight().setVal(STBorder.NIL);}public static void removeCellTopBorder(XWPFTableCell cell){cell.getCTTc().getTcPr().addNewTcBorders().addNewTop().setVal(STBorder.NIL);}public static void removeCellBottomBorder(XWPFTableCell cell){cell.getCTTc().getTcPr().addNewTcBorders().addNewBottom().setVal(STBorder.NIL);}

- 移除单元格边框、设置单元格单框样式

    /**移除单元格 左 边框线*/public static void removeCellLeftBorder(XWPFTableCell cell){setCellLeftBorder(cell , STBorder.NIL , 0 , 0 , "");}/**移除单元格 右 边框线*/public static void removeCellRightBorder(XWPFTableCell cell){setCellRightBorder(cell , STBorder.NIL , 0 , 0 , "");}/**移除单元格 上 边框线*/public static void removeCellTopBorder(XWPFTableCell cell){setCellTopBorder(cell , STBorder.NIL , 0 , 0 , "");}/**移除单元格 下 边框线*/public static void removeCellBottomBorder(XWPFTableCell cell){setCellBottomBorder(cell , STBorder.NIL , 0 , 0 , "");}/*** @Description 设置单元格左边框样式* @param cell          单元格* @param borderType    边框类型* @param borderW       边框宽度 磅* @param space         左间隔* @param color         边框颜色*/public static void setCellLeftBorder(XWPFTableCell cell ,  STBorder.Enum borderType , float borderW , float space , String color){CTTcBorders ctTcBorders = getCttcBorders(cell);CTBorder leftBorder = ctTcBorders.isSetLeft() ? ctTcBorders.getLeft() : ctTcBorders.addNewLeft();leftBorder.setVal(borderType);leftBorder.setSz(BigInteger.valueOf(Math.round(borderW * 8)));leftBorder.setSpace(BigInteger.valueOf((int)space));leftBorder.setColor(color);}/*** @Description 设置单元格上边框样式* @param cell          单元格* @param borderType    边框类型* @param borderW       边框宽度 磅* @param space         左间隔* @param color         边框颜色*/public static void setCellTopBorder(XWPFTableCell cell ,  STBorder.Enum borderType , float borderW , float space , String color){CTTcBorders ctTcBorders = getCttcBorders(cell);CTBorder topBorder = ctTcBorders.isSetTop() ? ctTcBorders.getTop() : ctTcBorders.addNewTop();topBorder.setVal(borderType);topBorder.setSz(BigInteger.valueOf(Math.round(borderW * 8)));topBorder.setSpace(BigInteger.valueOf((int)space));topBorder.setColor(color);}/*** @Description 设置单元格右边框样式* @param cell          单元格* @param borderType    边框类型* @param borderW       边框宽度 磅* @param space         左间隔* @param color         边框颜色*/public static void setCellRightBorder(XWPFTableCell cell ,  STBorder.Enum borderType , float borderW , float space , String color){CTTcBorders ctTcBorders = getCttcBorders(cell);CTBorder rightBorder = ctTcBorders.isSetRight() ? ctTcBorders.getRight() : ctTcBorders.addNewRight();rightBorder.setVal(borderType);rightBorder.setSz(BigInteger.valueOf(Math.round(borderW * 8)));rightBorder.setSpace(BigInteger.valueOf((int)space));rightBorder.setColor(color);}/*** @Description 设置单元格下边框样式* @param cell          单元格* @param borderType    边框类型* @param borderW       边框宽度 磅* @param space         左间隔* @param color         边框颜色*/public static void setCellBottomBorder(XWPFTableCell cell ,  STBorder.Enum borderType , float borderW , float space , String color){CTTcBorders ctTcBorders = getCttcBorders(cell);CTBorder bottomBorder = ctTcBorders.isSetBottom() ? ctTcBorders.getBottom() : ctTcBorders.addNewBottom();bottomBorder.setVal(borderType);bottomBorder.setSz(BigInteger.valueOf(Math.round(borderW * 8)));bottomBorder.setSpace(BigInteger.valueOf((int)space));bottomBorder.setColor(color);}

- 是否允许 表格/行 跨页断行

 /** 允许表格跨页断行,一个单元格里面的内容是否允许出现在两页上 */public static void setTableSplit(XWPFTable table , boolean isSplit){List<XWPFTableRow> rows = table.getRows();for(XWPFTableRow row : rows){setRowSplit(row , isSplit);}}/** 是否允许该行 跨页断行 ,一个单元格里面的内容是否允许出现在两页上 */public static void setRowSplit(XWPFTableRow row , boolean isSplit){CTRow ctRow = row.getCtRow();CTTrPr trPr = ctRow.isSetTrPr() ? ctRow.getTrPr() : ctRow.addNewTrPr();if(isSplit){if(trPr.sizeOfCantSplitArray() == 0){trPr.addNewCantSplit();}}else{for(int i = 0; i < trPr.sizeOfCantSplitArray(); i++){trPr.removeCantSplit(i);}}}

- 设置单元格边距

/*** @Description 设置单元格边距* @param cell 待设置的单元格* @param left  左边距 磅* @param top   上边距 磅* @param right 右边距 磅* @param bottom 下边距 磅*/public static void setTableCellMar(XWPFTableCell cell , float left , float top , float right , float bottom){CTTcPr cttcpr = getCttcpr(cell);CTTcMar ctTcMar = cttcpr.isSetTcMar() ? cttcpr.getTcMar() : cttcpr.addNewTcMar();if(left >= 0){(ctTcMar.isSetLeft() ? ctTcMar.getLeft() : ctTcMar.addNewLeft()).setW(Math.round(left * 20));}if(top >= 0){(ctTcMar.isSetTop() ? ctTcMar.getTop() : ctTcMar.addNewTop()).setW(Math.round(top * 20));}if(right >= 0){(ctTcMar.isSetRight() ? ctTcMar.getRight() : ctTcMar.addNewRight()).setW(Math.round(right * 20));}if(bottom >= 0){(ctTcMar.isSetBottom() ? ctTcMar.getBottom() : ctTcMar.addNewBottom()).setW(Math.round(bottom * 20));}}

- 合并单元格(合并列、跨列合并)

    /*** 跨列合并,横着合并 , 都是下标值* @param rowindex 要合并哪一行的列* @param fromcell 从哪列开始合并(下标)* @param endcell  合并到哪列结束(下标)*/public static void mergeCellsByCol(XWPFTable table, int rowindex, int fromcell, int endcell) {//2013及之前的老版本自己合并自己会出乱版,这里防止自己合并自己if(fromcell == endcell){return;}for (int cellindex = fromcell; cellindex <= endcell; cellindex++) {XWPFTableCell cell = table.getRow(rowindex).getCell(cellindex);CTTc ctTc = cell.getCTTc();CTTcPr tcPr = ctTc.isSetTcPr() ? ctTc.getTcPr() : ctTc.addNewTcPr();CTHMerge hMerge = tcPr.isSetHMerge() ? tcPr.getHMerge() : tcPr.addNewHMerge();if (cellindex == fromcell) {//这个判断是为了处理 2 3 合并  之后又 3 4 合并,如果不做判断最终合并的只有3 4if(!STMerge.CONTINUE.equals(hMerge.getVal())){hMerge.setVal(STMerge.RESTART);}} else {hMerge.setVal(STMerge.CONTINUE);}}}

- 合并单元格(合并行、跨行合并)

 /*** 跨行合并 , 都是下标值* @param cellindex 要合并哪一列的行* @param fromrow 从哪行开始合并(下标)* @param endrow  合并到哪行结束(下标)*/public static void mergeCellByRow(XWPFTable table, int cellindex, int fromrow, int endrow) {//2013及之前的老版本自己合并自己会出乱版,这里防止自己合并自己if(fromrow == endrow){return;}for (int rowindex = fromrow; rowindex <= endrow; rowindex++) {XWPFTableRow row = table.getRow(rowindex);CTTc ctTc = row.getCell(cellindex).getCTTc();CTTcPr tcPr = ctTc.isSetTcPr() ? ctTc.getTcPr() : ctTc.addNewTcPr();CTVMerge vMerge = tcPr.isSetVMerge() ? tcPr.getVMerge() : tcPr.addNewVMerge();if (rowindex == fromrow) {if(!STMerge.CONTINUE.equals(vMerge.getVal())){vMerge.setVal(STMerge.RESTART);}} else {vMerge.setVal(STMerge.CONTINUE);}}}

- 检查当前单元格是否被合并

    /*** 检查当前单元格是否是合并后的单元格* @Return boolean*/public static boolean isMergedCell(XWPFTableCell cell){CTTcPr cttcpr = getCttcpr(cell);if(cttcpr.isSetVMerge()){CTVMerge vMerge = cttcpr.getVMerge();if(STMerge.CONTINUE.equals(vMerge.getVal())){return true;}}if(cttcpr.isSetHMerge()){CTHMerge hMerge = cttcpr.getHMerge();if(STMerge.CONTINUE.equals(hMerge.getVal())){return true;}}return false;}

- 涉及子方法,上面的方法内若是报错看这里

/** 获取边框对象 */private static CTTcBorders getCttcBorders(XWPFTableCell cell){CTTcPr ctTcPr = getCttcpr(cell);return ctTcPr.isSetTcBorders() ? ctTcPr.getTcBorders() : ctTcPr.addNewTcBorders();}private static CTTcPr getCttcpr(XWPFTableCell cell){CTTc ctTc = cell.getCTTc();return ctTc.isSetTcPr() ? ctTc.getTcPr() : ctTc.addNewTcPr();}

POI-5.2.2 操作Word【单元格、行、列】相关推荐

  1. 【poi第九节】poi操作excel 单元格的换行

    poi操作excel 单元格的换行 import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermo ...

  2. poi 5.2.2 操作word【目录】

    poi 3.17操作Word工具包,点击此处 当前版本 5.2.2 ,版本不同,写法略有差异 - poi-5.2.2 操作word [段落] - poi-5.2.2 操作word [表格] - poi ...

  3. java使用poi生成Excel文件并合并单元格

    java使用poi生成Excel文件并合并单元格        业务需要根据 分管部门 字段进行合并,现在提供一种思路. controller层 @Inject(target = "/inf ...

  4. 使用poi导出excel,及合并单元格边框显示问题

    使用poi导出excel,及合并单元格边框显示问题. 首先创建workbook.sheet HSSFWorkbook workbook = new HSSFWorkbook();HSSFSheet s ...

  5. python处理Excel实现自动化办公教学(数据筛选、公式操作、单元格拆分合并、冻结窗口、图表绘制等)【三】

    相关文章: python处理Excel实现自动化办公教学(含实战)[一] python处理Excel实现自动化办公教学(含实战)[二] python处理Excel实现自动化办公教学(数据筛选.公式操作 ...

  6. Python中xlrd操作excel单元格

    学习目标 Python中xlrd操作excel单元格 学习内容 1.获取工作表 sheet=data.sheet_by_index(0) 2.返回单元格对象 sheet.cell(1,2) #返回第二 ...

  7. word单元格斜网格_如何在Word中的所有表上显示和隐藏单元格网格线

    word单元格斜网格 By default, when you create a new table, all the cells have black borders that print with ...

  8. node操作excel9 node-xlsx设置单元格行高(需要修改源码)

    目录 背景 设置单元格行高 修改源码 1.修改node_modules/node-xlsx/lib/helpers.js文件 2.修改node_modules/xlsx-style/

  9. 删除空值_空白单元格行,如何快速批量删除?简单方法,效率飞升

    EXCEL进阶课堂 · 简单却不知道 系列文章持续推送!各位小伙伴,EXCEL的日常操作中,有许多功能使用频率很高,可是绝大多数人只使用到其最基本的功能,对于其背后的强大拓展功能知之甚少,更不说使用它 ...

  10. html5设置单元格行高,单元格的行高怎么设置 EXCEL文档怎么统一设置行高

    我要把有几行设置为同样的高度,可是一行一行的拉,太慢了. 在Excel中,如何设置表格最合适的行高.列宽? EXCEL中的单元格行高不够怎么调整可以自动调整,根据字的内容来调整: 请问怎么统一设置EX ...

最新文章

  1. 10个人围成一圈循环报数,输出最后出圈的人
  2. Ubuntu中Vim使用技巧
  3. 求求你不要手写redis 缓存set,get
  4. (王道408考研操作系统)第四章文件管理-第二节2:磁盘调度算法
  5. Python-非关键字参数和关键字参数(*args **kw)
  6. 鸿蒙os在3月底推送,华为鸿蒙OS Beta 3将从3月31日起推送
  7. 如何在SQL Server中分析存储子系统性能
  8. vs code 前端如何以服务器模式打开 [安装服务器] server insteall
  9. intellij安装scala插件
  10. 修改页面后获得flag_逆向基础题五:获取Flag
  11. asp big5 gb2312 转 Unicode
  12. 如何把照片压缩到20k一下_怎么样才能把大于20k的照片缩小到20k之内?分享解决问题的方法...
  13. 车载网络信号的编码方式
  14. QPixmap的尺寸设置
  15. 成都计算机考证培训机构
  16. CTFHub_历年真题_MISC——“图片修复”、“磁盘恢复”、“蛛丝马迹”
  17. 怎么快速无损地把avi转换mov格式?简单3步就能搞定!
  18. 自顶向下和自底向上的估算方式
  19. 考研公共部分科目分支分布以及计算机408分值分布
  20. 副校长仇旻解密神秘的西湖大学 AI布局有何不同

热门文章

  1. windows8下无线频繁掉线,修复为“默认网关不可用”的解决方案
  2. MATLAB 存储读入:dat文件、bin文件以及mat文件
  3. python 串口读取地磅仪表_地磅串口数据读取解决办法
  4. 化工原理 --- 流体传送机械
  5. 敬语①(基本的な敬語)
  6. 分享找素材思路和技巧,南京小妹做自媒体短视频,3个月挣3W多
  7. [经济]股票的基本知识和部分专业术语的解释
  8. win10桌面图标和菜单栏不时的闪烁问题
  9. 初版ps3安装linux,索尼取消PS3安装Linux系统 向全美旧版玩家巨额赔款
  10. 智力扣(1)——对称扣