异常代码
怎样设置单元格属性为文本格式? 导出的excel单元格属性 默认不是文本格式
异常提示 请提供完整的异常提示,记住是全部异常! 建议描述
异常代码
怎样设置单元格属性为文本格式? 导出的excel单元格属性 默认不是文本格式
异常提示 请提供完整的异常提示,记住是全部异常! 建议描述
单元格为一长串的数字,默认成了科学计数法的数字。急急急!请教怎么设置单元格属性
单元格为一长串的数字,默认成了科学计数法的数字。急急急!请教怎么设置单元格属性
参考官方demo-自定义拦截器
cell.setCellType(CellType.STRING);
怎样设置呀?是在afterCellDispose 这个方法里面设置吗?
是的,afterCellDispose
是每个单元格数据填充完之后会调用
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
// 这里可以对cell进行任何操作
LOGGER.info("第{}行,第{}列写入完成。", cell.getRowIndex(), cell.getColumnIndex());
if (isHead && cell.getColumnIndex() == 0) {
CreationHelper createHelper = writeSheetHolder.getSheet().getWorkbook().getCreationHelper();
/* Hyperlink hyperlink = createHelper.createHyperlink(HyperlinkType.URL);
hyperlink.setAddress("https://github.com/alibaba/easyexcel");
cell.setHyperlink(hyperlink);*/
//createHelper.createRichTextString(text)
cell.setCellType(CellType.STRING);
}
}
这样就可以了吗?demo 里面是CreationHelper ,我不知道这个干吗用的?
另外再请问一下,如果写了个自定义拦截器,是否还需要每个属性上面加自定义的converter,@ExcelProperty(value = "单据编号",converter = CustomStringStringConverter.class) private String billNo;
CreationHelper 是创建url的,converter用来转换数据的值的,看需要使用就可以了
你好,刚才参考你的方式试了一下,还是不行,首先我导出的java bean 属性,@ExcelProperty(value = "单据编号") private String billNo; (没有加converter 属性),其次我的自定义handler是这样写的,public class CustomCellWriteHandler implements CellWriteHandler {
private static final Logger LOGGER = LoggerFactory.getLogger(CustomCellWriteHandler.class);
@Override
public void beforeCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Row row,
Head head, Integer columnIndex, Integer relativeRowIndex, Boolean isHead) {
}
@Override
public void afterCellCreate(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder, Cell cell,
Head head, Integer relativeRowIndex, Boolean isHead) {
}
@Override
public void afterCellDispose(WriteSheetHolder writeSheetHolder, WriteTableHolder writeTableHolder,
List<CellData> cellDataList, Cell cell, Head head, Integer relativeRowIndex, Boolean isHead) {
// 这里可以对cell进行任何操作
LOGGER.info("第{}行,第{}列写入完成。", cell.getRowIndex(), cell.getColumnIndex());
if (isHead && cell.getColumnIndex() == 0) {
cell.setCellType(CellType.STRING);
}
}
} ,最后我的导出util,public class EasyExcelUtils {
public static void export2ExcelByOutputStream(OutputStream outputStream,List list,Class clazz){
// 头的策略
WriteCellStyle headWriteCellStyle = new WriteCellStyle();
// 背景设置为白色
headWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
WriteFont headWriteFont = new WriteFont();
headWriteFont.setFontHeightInPoints((short)10);
headWriteCellStyle.setWriteFont(headWriteFont);
// 内容的策略
WriteCellStyle contentWriteCellStyle = new WriteCellStyle();
// 这里需要指定 FillPatternType 为FillPatternType.SOLID_FOREGROUND 不然无法显示背景颜色.头默认了 FillPatternType所以可以不指定
contentWriteCellStyle.setFillPatternType(FillPatternType.NO_FILL);
// 背景白色
contentWriteCellStyle.setFillForegroundColor(IndexedColors.WHITE.getIndex());
WriteFont contentWriteFont = new WriteFont();
// 字体大小
contentWriteFont.setFontHeightInPoints((short)15);
contentWriteCellStyle.setWriteFont(contentWriteFont);
// 这个策略是 头是头的样式 内容是内容的样式 其他的策略可以自己实现
HorizontalCellStyleStrategy horizontalCellStyleStrategy =new HorizontalCellStyleStrategy(headWriteCellStyle, contentWriteCellStyle);
// 这里 需要指定写用哪个class去写,然后写到第一个sheet,名字为模板 然后文件流会自动关闭
ExcelWriterSheetBuilder sheet = EasyExcel.write(outputStream,clazz).registerWriteHandler(horizontalCellStyleStrategy).registerWriteHandler(new CustomCellWriteHandler()).sheet("Sheet1");
sheet.useDefaultStyle(false).doWrite(list);
}
} 导出excel 后,导出的那个字符串还是科学计数法表示。很头疼,方便加个微信或者qq 询问一下吗?
我这边根据你的代码都是正常的导出,并没有看到科学计数法,也许我的方式不对 excel是 1.xlsx 你打开看看这个文件,换用最新版easyExcel、换用最新版的office/wps
你的这个打开也是科学计数法,好像不能截图给你看。
这个是bug,后续版本会修复。现在建议默认自定义样式 设置dataformat=49
谢谢作者,刚才在群里已经为我解答了。非常感谢!
设置dataformat=49 ,生成的单元格,右键查看单元格格式,还是第一个,没有改成文本格式 https://github.com/alibaba/easyexcel/issues/1155
请问你是怎么设置成文本的,遇到同样的问题