当前位置:网站首页>企业级开发使用POI踩坑盘点
企业级开发使用POI踩坑盘点
2022-06-21 07:12:00 【SteveCode.】
活动地址:毕业季·进击的技术er
- 毕业刚好两年整,2020.06-2022.06 哈哈刚好就是疫情那边毕业的。说实话毕业那年找工作是真的难。好多小企业都因为疫情倒闭了!算了过去的事情就不说了
代码涉及机密 我就不给大家写全了 更具自己的业务场景不同。借鉴一下方法的使用哈!
今天主要围绕POI这个框架来说
首先excel也就相当于我们的数据库查不来的表数据。表头对应的字段属性。下面的数据对应的数据库中的每一条记录。
基本用法我就不说了!就说一下在企业级开发过程中,我们会遇到的各种各样的 情况。总结问题:
poi设置自适应列宽的三种方法
sheet.autoSizeColumn(i); (版本不能太老)
sheet.autoSizeColumn(i, true);(合并的单元格使用)
sheet.setColumnWidth(i, “列名”.getBytes().length*2*256);(中文适用)
POi报错2:For input string: “null”
这个问题一般都是导出报错,怎么解决?
- 导出流程:在导出前先去查数据库里面的数据、在把数据写每一个单元格中。
if (CommUtil.notEquals("null", entry.getValue().toString())) {
cell.setCellValue(Double.valueOf(entry.getValue().toString()));
} else {
cell.setCellValue(0);
}
以此类推 。您去判断就行···· 比较粗暴
POi框架 导入时单元格中是:科学计数(4.8e9)
String content;
{
// 数值类型:
// 修复科学计数问题
NumberFormat numberFormat = NumberFormat.getInstance();
content = numberFormat.format(cell.getNumericCellValue());
if (content.indexOf(",") >= 0) {
content = content.replace(",", "");
}
log.debug("handleRow: cell.getNumericCellValue(){}:{}",i,content);
}
将单元格内容居中文本类型
/** * 单元格内容居中 文本类型 * @param wb * @return */
private XSSFCellStyle setStyle(XSSFWorkbook wb) {
XSSFCellStyle cellStyle = wb.createCellStyle();
XSSFDataFormat dataFormat = wb.createDataFormat();
//文本类型
cellStyle.setDataFormat(dataFormat.getFormat("@"));
//左右居中
cellStyle.setAlignment(HorizontalAlignment.CENTER);
return cellStyle;
}
将单元设置成:数值类型(做报表时:比较重要)
/** * 数值类型 * @param wb * @return */
private XSSFCellStyle setStyle(XSSFWorkbook wb) {
XSSFCellStyle cellStyle = wb.createCellStyle();
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
return cellStyle;
}
给大家说一个秘密
- 先设置单元格格式-在设置单元格类型哈!如果反了 ,他就不会生效 哈哈哈 ** 注意哈**
// 改成数值型
cell.setCellStyle(hssfCellStyleDouble);
// 把公式塞入合计列
cell.setCellFormula(sumString);
怎么单元格中写 excel 的函数
这里举个例子 合计求和
String colString;//长度转成ABC后的列
String sumString;//求和公式
// 合计
int totalColumn = 0;
//获得总列数
int cells = sheet.getRow(0).getPhysicalNumberOfCells();
//获得总行数
int rowNum=sheet.getLastRowNum();
// 得到总计那一行
XSSFRow xssfRow = sheet.createRow(1);
XSSFCell cell = xssfRow.createCell(0);
cell.setCellValue("合计:");
// 遍历每一列
for (int i = totalColumn, size = cells; i < size; i++) {
cell = xssfRow.createCell(i);
//长度转成ABC列
colString = CellReference.convertNumToColString(i);
if (rowNum == 2) {
sumString = "SUM(" + colString + "3"+")";
} else {
//求和公式 求 2 至 总行数 单元格的总和
sumString = "SUM(" + colString + "3:" + colString + rowNum+1 + ")";
}
// 改成数值型
cell.setCellStyle(hssfCellStyleDouble);
// 把公式塞入合计列
cell.setCellFormula(sumString);
totalColumn++;
}
单元格设置下拉
/** * 设置下拉框 * @param sheet 指定sheet页 * @param values 下拉框的值 * @param firstRow 起始行号 * @param lastRow 终止行号 * @param firstCol 起始列号 * @param lastCol 终止列号 */
public static void setDropDownBox(XSSFSheet sheet, String[] values, Integer firstRow, Integer lastRow,
Integer firstCol, Integer lastCol) {
XSSFDataValidationHelper dvHelper = new XSSFDataValidationHelper(sheet);
XSSFDataValidationConstraint dvConstraint = (XSSFDataValidationConstraint) dvHelper.createExplicitListConstraint(
values);
CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol);
DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);
//这两行设置单元格只能是列表中的内容,否则报错
validation.setSuppressDropDownArrow(true);
validation.setShowErrorBox(true);
sheet.addValidationData(validation);
}
导入导出的接口 尽量都用void哈
后面还遇到bug 我会接着往下补充并 告诉大家解决方法
可以其实可以通过反射加注解来实现对数据导入导出。等以后有时间给大家 出一版
活动地址:毕业季·进击的技术er
边栏推荐
- 建设数字化工厂的四个必要步骤
- 如何安装Visual Studio Code编辑器?
- flutter jpush
- Best practice | how to use Tencent cloud micro build to develop enterprise portal applications from 0 to 1
- EasyExcel-简介-01
- Building a hard core Gateway - resume
- Easyexcel introduction-01
- Eigen common operations
- Consistency between database and cache data
- Google Earth Engine(GEE)——全球农田有机土壤碳和氮排放(1992-2018年度)数据集
猜你喜欢
随机推荐
Unittest use
Lnc2meth: methylation sites on disease-related lncrna
Wechat applet_ 6. Network data request
微信小程序_6,网络数据请求
建设数字化工厂的四个必要步骤
Modbus poll v9.9.2 build 1690 MODBUS test tool single file version
【osg】OSG开发(03)——构建MSVC版的osgQt库
How to select PostgreSQL and MySQL
数据库与缓存数据一致性问题
Pinia advanced: elegant setup (functional) writing + encapsulation into your enterprise project
Superparameters and model parameters
Configuring the eigen3 development environment for vs2017 on win10
156 rust and Solana environment configuration
[DB written interview 390] what is the external table of oracle?
EasyExcel-简介-01
Geo2r: difference analysis of data in geo database
flutter jpush
Pyg tutorial (2): graph data
使用cell ranger进行单细胞转录组定量分析
2022年6月13日面试被问到面试题目









