设置默认Excel单元格样式为文本
通过Sheet.setDefaultColumnStyle(int column, CellStyle style);
方法进行设置列的默认样式
// 创建操作对象
XSSFWorkbook workbook = new XSSFWorkbook();
// 创建工作簿
Sheet sheet = workbook.createSheet("模板内容");
sheet.setDefaultColumnWidth(30);
// 设置单元格格式为文本格式
XSSFCellStyle style = workbook.createCellStyle();
XSSFDataFormat format = workbook.createDataFormat();
style.setDataFormat(format.getFormat("@"));
//设置默认列的单元格格式为"文本"
for (int i = 0; i < headList.getFirst().size(); i++) {
//columnIndex表示第几列
sheet.setColumnWidth(0, 30);
// 主要起作用的地方
sheet.setDefaultColumnStyle(i, style);
}
注意,当导入的Excel文档存在内容时,对应的默认样式会消失
添加内容后,默认样式消失
没有添加内容的单元格,默认样式没有失效
原因:猜测是因为写入单元格内容时,默认单元格样式被覆盖了,导致不生效。
解决方法:在写入单元格内容的时候,设置单元格样式
// 处理表格头部样式
XSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setAlignment(HorizontalAlignment.LEFT);
cellStyle.setWrapText(Boolean.TRUE);
cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
// 设置为文本
XSSFDataFormat format = workbook.createDataFormat();
cellStyle.setDataFormat(format.getFormat("@"));
for (List<String> datas : dataList) {
Row row = sheet.createRow(rowIndex);
row.setHeight((short) (20 * 20));
int subIndex = 0;
for (String data : datas) {
Cell cell = row.createCell(subIndex);
cell.setCellValue(data);
// 设置单元格样式
cell.setCellStyle(cellStyle);
subIndex++;
}
rowIndex++;
}
拓展内容
- 日期格式
cell.setCellValue(new Date(2008,5,5));
// 设置日期格式
HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
HSSFDataFormat format= demoWorkBook.createDataFormat();
cellStyle.setDataFormat(format.getFormat("yyyy年m月d日"));
cell.setCellStyle(cellStyle);
- 保留两位小数格式
cell.setCellValue(1.2);
// 设置保留两位小数
HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
cell.setCellStyle(cellStyle);
- 货币格式
cell.setCellValue(20000);
// 设置货币格式
HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
cellStyle.setDataFormat(format.getFormat("?#,##0"));
cell.setCellStyle(cellStyle);
- 百分比格式
cell.setCellValue(10);
// 设置百分比格式
HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00%"));
cell.setCellStyle(cellStyle);
- 中文大写格式
cell.setCellValue(10);
// 设置中文大写格式
HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
cellStyle.setDataFormat(format.getFormat("[DbNum2][$-804]0"));
cell.setCellStyle(cellStyle);
- 科学计数法格式
cell.setCellValue(10000000000000000000000);
// 科学计数法格式
HSSFCellStyle cellStyle = demoWorkBook.createCellStyle();
cellStyle.setDataFormat( HSSFDataFormat.getBuiltinFormat("0.00E+00"));
cell.setCellStyle(cellStyle);