我正在考虑生成一个xlsx文件,并且对于某些单元格,应用一个“特殊” (这是Excel中使用的确切单词,在“格式单元格”>“类别”中)类别具有特定的语言环境。例如,我在Excel的本地安装中带有“英语(加拿大)”语言环境的“社会保险号”。
我已经检查了POI API,对Google进行了一些搜索,但我对如何做到这一点感到困惑。
我尝试手动创建此类单元格(直接使用Excel),然后使用POI读取它们。
如果我将getCellStyle()。getDataFormat()应用于我的单元格,则返回的值等于或大于164。我猜这意味着它被认为是用户定义的,因为POI org.apache.poi.ss.usermodel.BuiltinFormats #FIRST_USER_DEFINED_FORMAT_INDEX常数为164。
到底是想做些什么?我什至不知道一般来讲,Excel的特殊类型在哪里定义。这些似乎是内置的。
答案 0 :(得分:2)
所有Excel
数字格式均基于特殊格式模式。参见How to control and understand settings in the Format Cells dialog box in Excel。
要获得特殊格式需要的确切格式模式,可以将特殊格式应用于单元格,然后查看相应的自定义格式。
以下是特殊格式“社会保险号(CH)”-瑞士:
这是德语Excel
,“ Sonderformat”是“ Special”。
这对应于自定义格式000\.00\.000\.000
。您只需在Custom
的对话框Excel
-Format Cells
中更改为类别Number
即可得出结论。然后从Type:
下面的文本字段中读取模式:
这是德语Excel
,“ Benutzerdefiniert”是“自定义”。
所以通常的方法是:首先在Excel
的对话框Format Cells
-Number
中选择特殊格式。然后将类别更改为Custom
,然后从Type:
下面的文本字段中读取相应的模式。
如果您有数字格式模式,可以使用apache poi
如下使用它:
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
class CreateExcelNumberFormat {
public static void main(String[] args) throws Exception {
try (Workbook workbook = new XSSFWorkbook();
FileOutputStream fileout = new FileOutputStream("Excel.xlsx") ) {
DataFormat format = workbook.createDataFormat();
CellStyle specialSIN = workbook.createCellStyle();
specialSIN.setDataFormat(format.getFormat("000\\.00\\.000\\.000"));
Sheet sheet = workbook.createSheet();
Cell cell = sheet.createRow(0).createCell(0);
cell.setCellStyle(specialSIN);
cell.setCellValue(12345678901d);
sheet.setColumnWidth(0, 14*256);
workbook.write(fileout);
}
}
}
您在英语(加拿大)语言环境中的社会保险号码必须为:
...
specialSIN.setDataFormat(format.getFormat("000 000 000"));
...
cell.setCellValue(46454286);
...