因为需要一个新功能要把POI升级到5.2.2,pom.xml下直接修改了版本号以后,启动程序导出Excel报错了,如下: java.lang.NoClassDefFoundError: org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream 解决办法 看报错是关于commons-io的,经过研究,发现指定commons-io的版本为2.11.0以上即可解决问题 <dependency> <groupId>commons…
因为需要一个新功能要把POI升级到5.2.2,pom.xml下直接修改了版本号以后,启动程序导出Excel报错了,如下: java.lang.NoClassDefFoundError: org/apache/commons/io/output/UnsynchronizedByteArrayOutputStream 解决办法 看报错是关于commons-io的,经过研究,发现指定commons-io的版本为2.11.0以上即可解决问题 <dependency> <groupId>commons…
使用Apache POI生成单元格内容,给单元格设置了边框,代码如下: // 创建带有四个变量的CellStyle CellStyle cellStyle = workbook.createCellStyle(); cellStyle.setBorderBottom(BorderStyle.THIN); cellStyle.setBorderLeft(BorderStyle.THIN); cellStyle.setBorderRight(BorderStyle.THIN); cellStyle.setBorderT…
默认情况下使用ApachePOI生成的单元格Cell,我们给Cell设置内容后,如果内容比较多,宽度不够的情况下,里面的文字是不换行的,如果希望文本换行,可以有两种做法 将单元格设置为文本自动换行(推荐) HSSFCellStyle cellStyle = workbook.createCellStyle(); cellStyle.setWrapText(true); // 设置cellStyle格式为自动换行 cell.setCellStyle(cellStyle); // 给单元格cell设置cellStyle…
默认情况下用ApachePOI生成的Excel,单元格Cell所在的那一列(Column)的宽度都很窄,用户下载后,需要每一个单元格都手动拉宽才能显示内容,比较不方便。 POI中可以有以上几种方式,从代码中设置单元格宽度: 宽度的参数要乘以256,这是怎么回事呢?其实,这个参数的单位是1/256个字符宽度,20 * 256 就是20个字符的宽度 # 我们假设要给单元格设置宽度是20 (以下都要将需要的宽度乘以256传进去) # 设置Sheet下所有的单元格的默认宽度是20 sheet.setDefaultColum…
需求是要给POI生成的Cell单元格内容加文字颜色(或者背景颜色),实操后发现,设置颜色并没有和之前的普通程序(例如Html里面给文字加颜色,可以是RBG或者#FF00FF这样的颜色) 下来面实例看下: Font font = workbook.createFont(); font.setBold(true); // 设置字体颜色是红色 font.setColor(HSSFColor.HSSFColorPredefined.RED.getIndex()); CellStyle cellStyle = workboo…
在使用ApachePOI生成Excel,遇到一个问题,就是单元格合并功能: sheet.addMergedRegion(new CellRangeAddress(firstRow, lastRow, firstCol, lastCol)); 发现合并后的单元格,内容是空白的 合并的单元格,内容是根据合并前的单元格的第一行第一列的数据的,所以写程序的时候,要注意给合并前的最初的那个单元格赋值就可以了。
使用ApachePOI读取Excel的时候,如果单元格是日期的格式,通过判断cell.getCellType() 得到的是Cell.CELL_TYPE_NUMERIC,进而使用cell.getNumericCellValue() 获取到单元格内容,但是读取到的却是类似44840.611111这样的数字 经过一番查找资料,结论是,Excel单元格存储日期、时间均以数值类型进行存储,读取时POI先判断是是否是数值类型,再根据CellStyle来判断日期格式,再进行判断转化。 总结如下: 数值格式(CELL_TYPE_N…
在使用ApachePOI做Excel导出的时候,如果遇到日期类型的单元格内容,我们不希望简单把单元格内容赋值成String文本,而是希望给单元格复制成Excel能认得的Date日期类型,以便在Excel中做一些计算或者统计。 如图代码很简单: Cell cell = row.createCell(i); Date date = new Date(); // 实际的日期从业务中来 cell.setCellValue(date); 不过生成了Excel后,就变成这样了(可以看到新建日期和更新日期里的内容都变成小数了):…
在使用Apache POI处理Excel的时候,应用部署到Linux后,遇到一个报错,如下: Caused by: java.lang.NullPointerException at java.desktop/sun.awt.FontConfiguration.getVersion(FontConfiguration.java:1262) at java.desktop/sun.awt.FontConfiguration.readFontConfigFile(FontConfiguration.java:225) …
使用Apache的POI读取Excel,遇到一个问题,读取Excel中的日期类型的Cell,发现读出来的是double类型的数值,如下代码: String cellValue = cell.getCellTypeEnum() == CellType.NUMERIC ? new DecimalFormat("0.####").format(cell.getNumericCellValue()) : cell.getRichStringCellValue().toString().trim(); 原来,POI里有一个关…