您能建议下一种情况吗?
我已经设置了数据格式和单元格类型(“#,###。00”,NUMERIC) (我想要thounsand分隔符加上两个十进制数字)
它能按我的预期工作,但是要格式化单元格,我需要先选择它们 在选择数据看起来未格式化之前
换句话说,我必须选择单元格以便对其进行格式化,否则它将保持不变而无需任何格式
CellStyle style = workbook.createCellStyle();
style.setAlignment(HorizontalAlignment.RIGHT);
style.setLocked(locked);
style.setDataFormat(workbook.createDataFormat().getFormat("#,###.00"));
cell.setCellStyle(style);
cell.setCellType(CellType.NUMERIC);
cell.setCellValue(<big decimal value>.toString());
答案 0 :(得分:1)
如果您需要数字单元格值,则不要将单元格值设置为字符串。如果将单元格值设置为String
,则单元格类型也将是字符串。这与设置CellType
之前设置单元格值无关。设置String
单元格值时,类型始终更改为字符串。
请参见API documentation,其中表明已弃用Cell.setCellType
,并且可以使用哪些Cell.setCellValue
方法。
如果单元格应包含数字内容,则需要设置double
单元格值。
示例:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import java.math.BigDecimal;
import java.util.Random;
class CreateExcelCellNumberFormat {
public static void main(String[] args) throws Exception {
try (Workbook workbook = new XSSFWorkbook();
FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {
CellStyle style = workbook.createCellStyle();
style.setDataFormat(workbook.createDataFormat().getFormat("#,###.00"));
Sheet sheet = workbook.createSheet();
for (int r = 0; r < 10; r++) {
Cell cell = sheet.createRow(r).createCell(0);
cell.setCellStyle(style);
BigDecimal bigDecimal = new BigDecimal(new Random().nextDouble() * 10000000000000d);
cell.setCellValue(bigDecimal.doubleValue());
}
sheet.setColumnWidth(0, 25 * 256);
workbook.write(fileout);
}
}
}