Java 操作Excel POI
对指定的单元格进行填充具体的值:
public static boolean setValuebySheetRowColumn(Sheet OneSheet, int row, int column, String value) {Row Sheet_row;Cell Sheet_cell;Sheet_row = OneSheet.getRow(row);Sheet_cell = Sheet_row.getCell(column);Sheet_cell.setCellValue(value);return true; }
对指定的单元格进行指定格式填充:
XSSFFont 对象
CellStyle 对象
CellStyle cellStyle = wb.createCellStyle();
cellStyle.setFillBackgroundColor(IndexedColors.RED.index); // 背景色
XSSFFont font = wb.createFont();
font.setColor(Font.COLOR_RED);//字体颜色
font.setStrikeout(true);//删除线
cellStyle.setFont(font);
cell.setCellStyle(cellStyle);
对指定的单元格进行图片水印填充:(自定义偏移量,缩放比例)
多图片:
public static boolean InsertPic(List<String> piclist, XSSFWorkbook xssfWorkbook, Sheet sheet, List<Integer> row, List<Integer> column) throws IOException {try{for (int i = 0; i < piclist.size(); i++) { // piclist.set(i,"C:\\Users\\yhl\\Desktop\\code\\client\\vueT5-dev\\src\\assets\\icons\\add_cnc.png") ;FileInputStream stream=new FileInputStream(piclist.get(i));BufferedImage bufferImg;bufferImg = ImageIO.read(new File(piclist.get(i)));int maxWidth = 17,maxHeight=8;//x1=12左侧预留12宽度,y1=15上方预留15宽度int x1=2,y1=2,x2=17,y2=8;/* 原始图像的宽度和高度 */int width = bufferImg.getWidth();int height = bufferImg.getHeight();if (width>height) {//宽大于高//假设左右各留出12宽度,图片宽设置为最大,占据约1000(=maxWidth-12*2)double rate = (double)(maxWidth-x1*2)/width;//比例int eHeight = (int)(height*rate);//等比例算出需要的高度//如果图片高度+y1大于255,则设置图片的高度为255-y1=240,重新计算宽度if(eHeight+y1>maxHeight) {rate = (double) (maxHeight-y1)/height;//重新计算比例int ewidth = (int)(width*rate);//等比例算出需要的宽度y2 = (maxHeight-y1);//y2坐标x2 = ewidth+x1;if(x2<16){//如果图片不居中,重新计算x1位置,使图片居中x1 = (maxWidth-x2)/2;//图片居中x2 = ewidth+x1;}}else {y2 = y1+eHeight;//这里就不设置图片上下居中了(保留图片距离上方15)x2 = (maxWidth-x1*2);}}else{//高大于宽//假设上留出15宽度,图片高设置为最大,占据240(=255-15)double rate = (double)(maxHeight-y1)/height;//比例int ewidth = (int)(width*rate);//等比例算出需要的宽度//如果图片高度>宽,高最大为240,宽最大为1012,所以宽不会超出y2 = (maxHeight-y1);x2 = ewidth+x1;if(x2<16){//如果图片不居中,重新计算x1位置,使图片居中x1 = (maxWidth-x2)/2;//图片居中x2 = ewidth+x1;}}byte[] bytes= IOUtils.toByteArray(stream);//向Excel添加一张图片,并返回该图片在Excel中的图片集合中的下标int pictureIdx = xssfWorkbook.addPicture(bytes, Workbook.PICTURE_TYPE_PNG);//绘图工具类CreationHelper helper = xssfWorkbook.getCreationHelper();//创建一个绘图对象Drawing<?> patriarch = sheet.createDrawingPatriarch();//创建锚点,设置图片坐标ClientAnchor anchor = helper.createClientAnchor();anchor.setRow1(row.get(i));anchor.setCol1(column.get(i));anchor.setDx1(x1* XSSFShape.EMU_PER_POINT);anchor.setDy1(y1*XSSFShape.EMU_PER_POINT);anchor.setDx2(x2*XSSFShape.EMU_PER_POINT);anchor.setDx2(y2*XSSFShape.EMU_PER_POINT);// 创建图片Picture picture = patriarch.createPicture(anchor, pictureIdx);//计算缩放比例Row sheetRow = sheet.getRow(row.get(i));Cell cell = sheetRow.getCell(column.get(i));double standardWidth = 35;double standardHeight = 20;// 计算单元格的长宽double cellWidth = sheet.getColumnWidthInPixels(cell.getColumnIndex());double cellHeight = cell.getRow().getHeightInPoints()/72*96;// 计算需要的长宽比例的系数double a = standardWidth / cellWidth;double b = standardHeight / cellHeight;picture.resize(a,b);}}catch (Exception ignored){}finally {}return true;}
合并单元格 :
CellRangeAddress newRange=new CellRangeAddress(rowIdx, rowIdx, 16, 18);
//开始行、结束行,开始列,结束列
sheet.addMergedRegionUnsafe(newRange);
//取消合并单元格 public static void removeMerged(Sheet sheet, Integer startRow, Integer endRow, Integer startColumn, Integer endColumn) {if(startRow==null){startRow= sheet.getFirstRowNum();}if(endRow==null){endRow= sheet.getLastRowNum();}//获取所有的单元格int sheetMergeCount = sheet.getNumMergedRegions();//用于保存要移除的那个合并单元格序号List<Integer> indexList = new ArrayList<>();for (int i = 0; i < sheetMergeCount; i++) {//获取第i个单元格CellRangeAddress ca = sheet.getMergedRegion(i);int firstColumn = ca.getFirstColumn();int lastColumn = ca.getLastColumn();int firstRow = ca.getFirstRow();int lastRow = ca.getLastRow();if (startRow <= firstRow && endRow >= lastRow && startColumn <= firstColumn && endColumn >= lastColumn) {indexList.add(i);}}sheet.removeMergedRegions(indexList); }
Java 操作Excel POI相关推荐
- java excel api 下载文件_Java-Excel Java操作Excel POI(Jakarta POI API) - 下载 - 搜珍网
Java操作Excel/Jakarta POI API/data/Jakarta POI API.doc Java操作Excel/Jakarta POI API/jar/poi-3.0.2-FINAL ...
- Java操作excel(POI、EasyExcel)
Apache POI和EasyExcel学习 easyExcel easyExcel 官网地址:https://www.yuque.com/easyexcel/doc/easyexcel EasyEx ...
- java excel读取操作,Java 操作 Excel (读取Excel2003 2007,Poi兑现)
Java 操作 Excel (读取Excel2003 2007,Poi实现) 一. Apache POI 简介( http://poi.apache.org/) 使用Java程序读写Microsoft ...
- Java操作Excel三种方式POI、Hutool、EasyExcel
Java操作Excel三种方式POI.Hutool.EasyExcel 1. Java操作Excel概述 1.1 Excel需求概述 1.2 Excel操作三种方式对比 2. ApachePOIExc ...
- Java操作Excel之POI:java读写excel文件以及打印设置
Java操作Excel之POI:java读写excel文件以及打印设置 POI的jar包下载地址:http://poi.apache.org/download.html 注意:项目中导入poi 4.0 ...
- java insert row,POI ,Java 操作 Excel 实现行的插入(insert row)
POI ,Java 操作 Excel 实现行的插入(insert row) 前几天,正在做一个项目,主要用 POI 来操作 Excel 其中,要使用一个,插入功能.主要是因为从数据库,返回结果集(数据 ...
- java操作Excel、PDF文件
java操作Excel.PDF文件 下面这些是在开发中用到的一些东西,有的代码贴的不是完整的,只是贴出了关于操作EXCEL的代码: jxl是一个*国人写的java操作excel的工具, 在开源世界中, ...
- java操作excel表
文章分类:Java编程 http://developers.sun.com.cn/blog/functionalca/entry/java读写excel简介 JAVA EXCEL API简介 Java ...
- java excel 插入新行_POI ,Java 操作 Excel 實現行的插入(insert row)
POI ,Java 操作 Excel 實現行的插入(insert row) 前幾天,正在做一個項目,主要用 POI 來操作 Excel 其中,要使用一個,插入功能.主要是因為從數據庫,返回結果集(數據 ...
最新文章
- 插入记录时单引号的处理
- solrcloud replica collection core shard slice 概念讲解
- pythonsuper_用__init __()方法理解Python super()
- aspx是什么语言_什么是网页
- linux java services_在Linux上将Java应用程序作为服务运行
- Unieap3.5-Grid翻页不提示修改
- 稀疏矩阵与 spdiags函数图解
- 免费的html代码大全,html代码大全,搜集最全的html代码.doc
- Win2008建立kms服务器vlmcsd
- C++化学元素周期表
- 【活动回顾】大咖分享:流量过后,在线教育的留存和发展
- java: 不兼容的类型: java.lang.Long无法转换为java.lang.Intege
- android studio按键精灵,按键精灵要点讲解一 - godlike的个人页面 - OSCHINA - 中文开源技术交流社区...
- 机器学习在重度抑郁症患者中的应用:从分类到治疗结果预测
- golang中的map
- 无版权?免费?无水印?高清大图?视频?
- eclipse简介及下载
- 求勾股数元祖(java)
- 在HTML中lt;是什么意思?
- 最值得一看的几条简单的谷歌 Google 搜索技巧,瞬间提升你的网络搜索能力!