gpt4 book ai didi

java - Apache-poi 模板前导零在编辑单元格时消失

转载 作者:行者123 更新时间:2023-12-02 05:23:23 26 4
gpt4 key购买 nike

我正在使用 apache-poi 创建一个 .xlsx 模板,用户必须插入一个固定长度的 id。

我已经尝试过 setDataFormat(workbook.createDataFormat().getFormat("@")) 技巧,但是当编辑单元格时,它似乎忘记了这一点,并且前导零消失了。

//this is the code snippet i found here on stackoverflow and tried out
DataFormat fmt = workbook.createDataFormat();
CellStyle textStyle = workbook.createCellStyle();
textStyle.setDataFormat(fmt.getFormat("@"));
worksheet.setDefaultColumnStyle(0, textStyle);

找到一个真正的解决方案会很棒,因为添加前导零以获得预期长度可能会导致错误。例如:用户的意思是 0000111 但忘记了 1 ,新的 id 将是 0000011 ,不幸的是 id 不是连续的。

感谢您的宝贵时间,请原谅我的英语不好 XD

最佳答案

无法重现您的问题。

以下代码创建一个 Excel 工作表,在 A 列中包含 Id,即使在 Excel 中进行编辑,该工作表也不会丢失其文本格式和前导零s GUI

import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

class CreateExcelNumberFormatText {

public static void main(String[] args) throws Exception {

try (Workbook workbook = new XSSFWorkbook();
FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {

DataFormat format = workbook.createDataFormat();
CellStyle textStyle = workbook.createCellStyle();
textStyle.setDataFormat(format.getFormat("@"));

Sheet sheet = workbook.createSheet();
sheet.setDefaultColumnStyle(0, textStyle);

Cell cell = sheet.createRow(0).createCell(0);
cell.setCellStyle(textStyle);
cell.setCellValue("Id");

cell = sheet.createRow(1).createCell(0);
cell.setCellStyle(textStyle);
cell.setCellValue("0000111");

cell = sheet.createRow(2).createCell(0);
cell.setCellStyle(textStyle);
cell.setCellValue("0001111");

workbook.write(fileout);
}

}
}

您可能没有想到的是,apache poi 不会将列样式应用于该列中新创建的单元格。您需要在代码中执行此操作,否则单元格样式将为常规。尽管如此,设置列样式还是必要的,因为否则 ExcelGUI 在添加单元格内容时将不会使用文本样式。

我的代码是完整的、经过测试的并且适合我。由于使用数字格式 @ = Text,仅在 Excel 中编辑单元格不会导致部分单元格内容(前导零)丢失。

当然,如果有人将列号格式从 Text 更改为 General,那么 0000111 将是数字 111 编辑后。但是当用户可以编辑工作表时,这是无法避免的。

也许可以设置CellStyle.setQuotePrefixed此外。如:

...
textStyle.setDataFormat(format.getFormat("@"));
textStyle.setQuotePrefixed(true);
...

然后所有内容都会额外加上引号前缀撇号'。但这也可以通过用户编辑工作表来更改。

关于java - Apache-poi 模板前导零在编辑单元格时消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56246395/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com