我正在使用 org.apache.poi 通過 Java 進行 excel 互動,我正在使用 SXSSF(不是任何其他格式,如 HSSF 等)。這是我想要設定型別的方式。
private void setTechSheet(SXSSFWorkbook workbook, String entityJson) {
SXSSFSheet tech = workbook.createSheet("tech");
SXSSFRow jwtRow = tech.createRow(0);
SXSSFRow SecondRow = tech.createRow(1);
jwtRow.createCell(1).setCellValue(entityJson);
}
如果把它放在方法的第 4 行:
jwtRow.createCell(1).setCellType(CellType.STRING).setCellValue(entityJson),
它不會讓我設定價值。正如我從教程中讀到的,單元格將是我撰寫的資料型別(在我的示例中為字串)。但是當我打開excel并單擊我的單元格時,它仍然顯示一般型別。我怎么解決這個問題?我希望單元格是任何型別,但不是通用的。
uj5u.com熱心網友回復:
一般不是型別而是資料格式。所以你有一個包含通用資料格式的文本值的單元格。這是默認設定。這并沒有錯。
Text例如,僅當需要將數字存盤為文本時才需要特殊的資料格式。
如果需要Text資料格式,則需要設定@為資料格式。為此,單元格需要具有該資料格式的單元格樣式。并且由于單元格樣式存盤在作業簿級別并在具有該日期格式的所有單元格之間共享,因此每個資料格式只需為每個作業簿創建一次,然后應用于應使用此資料格式的所有單元格。
SXSSFWorkbook workbook...
...
DataFormat format = workbook.createDataFormat();
CellStyle textStyle = workbook.createCellStyle();
textStyle.setDataFormat(format.getFormat("@"));
...
setTechSheet(workbook, "1234", textStyle);
...
private void setTechSheet(SXSSFWorkbook workbook, String entityJson, CellStyle textStyle) {
SXSSFSheet tech = workbook.createSheet("tech");
SXSSFRow jwtRow = tech.createRow(0);
SXSSFCell cell = jwtRow.createCell(1);
cell.setCellValue(entityJson);
cell.setCellStyle(textStyle);
}
...
以下完整示例顯示了何時Text需要資料格式。
import org.apache.poi.ss.usermodel.*;
import org.apache.poi.xssf.streaming.*;
public class SXSSFTextDataFormat {
private static void setTechSheet(SXSSFWorkbook workbook, Object[][] techSheetData, CellStyle textStyle) {
SXSSFSheet tech = workbook.createSheet("tech");
int r = 0;
for (Object[] dataRow : techSheetData) {
SXSSFRow row = tech.createRow(r);
int c = 0;
for (int i = 0; i < dataRow.length; i =2) {
SXSSFCell cell = row.createCell(c);
Object data = dataRow[i];
String format = (String)dataRow[i 1];
if (data instanceof Number) {
cell.setCellValue(((Number)data).doubleValue());
} else {
cell.setCellValue(String.valueOf(data));
}
if ("Text".equals(format)) {
cell.setCellStyle(textStyle);
}
c ;
}
r ;
}
}
public static void main(String args[]) throws Exception {
Object[][] techSheetData = new Object[][] {
new Object[] {"A1", "General", new java.math.BigInteger("12345678901234567890"), "General"},
new Object[] {"A2", "General", "12345678901234567890", "Text"},
new Object[] {"A3", "General", "12345678901234567890", "General"},
};
try ( SXSSFWorkbook workbook = new SXSSFWorkbook();
java.io.FileOutputStream out = new java.io.FileOutputStream("./Excel.xlsx")) {
DataFormat format = workbook.createDataFormat();
CellStyle textStyle = workbook.createCellStyle();
textStyle.setDataFormat(format.getFormat("@"));
setTechSheet(workbook, techSheetData, textStyle);
workbook.write(out);
workbook.dispose();
}
}
}
in 中的大整數B1將無法正確存盤在 Excel 中,因為 Excel 僅以double精度存盤數字。
中的大整數字串B2使用Text資料格式進行格式化。因此,人們可以在 Excel 的 GUI 中編輯該單元格而不會破壞格式。
中的大整數字串B3使用General資料格式進行格式化。因此,如果在 Excel 的 GUI 中編輯該單元格,這將破壞格式,并且 Excel 會將數字轉換為double值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/489371.html
