我正在使用apache poi创建excel表。我有像 - 337499.939437217这样的数字,我想要显示它,因为它在excel中没有四舍五入。单元格格式也应该是数字(对于某些列)和货币(对于某些列)。
请建议我应该使用哪种BuiltinFormats来实现这一目标。
非常感谢你的帮助。
答案 0 :(得分:11)
首先,您需要知道如何使用DataFormats。然后你需要知道guidelines for customizing a number format。
对于将以常规数字格式显示的数字-337499.939437217
,您可以使用格式#.###############
。 #
表示仅在需要时显示的数字(不是前导零和/或不是最后十进制数的零) - 请参阅指南。因此,整个格式意味着如果需要,最多可显示15个十进制数字,但只能显示所需数量。
对于货币,您应该使用内置数字格式作为货币。因此货币符号取决于Excel
的区域设置。以下BuiltinFormats可与apache poi
一起使用。使用内置数字格式,您只需要十六进制格式数字。
示例:
import java.io.*;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class CreateNumberFormats {
public static void main(String[] args) throws Exception {
Workbook wb = new XSSFWorkbook();
Sheet sheet = wb.createSheet("format sheet");
CellStyle style;
DataFormat format = wb.createDataFormat();
Row row;
Cell cell;
short rowNum = 0;
short colNum = 0;
row = sheet.createRow(rowNum++);
cell = row.createCell(colNum);
cell.setCellValue(-337499.939437217); // general format
style = wb.createCellStyle();
style.setDataFormat(format.getFormat("#.###############")); // custom number format
row = sheet.createRow(rowNum++);
cell = row.createCell(colNum);
cell.setCellValue(-337499.939437217);
cell.setCellStyle(style);
row = sheet.createRow(rowNum++);
cell = row.createCell(colNum);
cell.setCellValue(123.456789012345);
cell.setCellStyle(style);
row = sheet.createRow(rowNum++);
cell = row.createCell(colNum);
cell.setCellValue(123456789.012345);
cell.setCellStyle(style);
style = wb.createCellStyle();
style.setDataFormat((short)0x7); // builtin currency format
row = sheet.createRow(rowNum++);
cell = row.createCell(colNum);
cell.setCellValue(-1234.5678);
cell.setCellStyle(style);
sheet.autoSizeColumn(0);
FileOutputStream fileOut = new FileOutputStream("CreateNumberFormats.xlsx");
wb.write(fileOut);
fileOut.close();
wb.close();
}
}