我正在尝试将一些数据导出到Excel文件中。我正在使用POI。
据我所知Cell.setCellType(double)设置了相应的excel等效数值。但这不会改变细胞的类型。
我打开生成的Excel文件时的列类型为General
中的Home tab
。
以下是测试它的示例代码。
package com.example;
import java.io.FileOutputStream;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class TestExcelMain {
public static void main(String[] args) throws Exception {
System.out.println("started");
Workbook workbook = new XSSFWorkbook();
Sheet sheet = workbook.createSheet();
Row row = sheet.createRow(0);
Cell cell = row.createCell(0);
cell.setCellValue(3.14159);
workbook.write(new FileOutputStream("Test.xlsx"));
System.out.println("finished");
}
}
还有其他方法可以将细胞类型设置为合适的类型吗?
我也尝试了Cell.setCellType(Cell.CELL_TYPE_NUMERIC)完全相同的结果。
我期望的正确类型的单元格为Number
。
我也尝试使用此帖setCellType(HSSFCELL.CELL_TYPE_NUMERIC) is not working in apache poi
中建议的所有XSSF
classess(下面的代码)
package com.example;
import java.io.FileOutputStream;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class TestExcelMain {
public static void main(String[] args) throws Exception {
System.out.println("started");
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet();
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
cell.setCellValue(3.14159);
cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);
workbook.write(new FileOutputStream("Test.xlsx"));
System.out.println("finished");
}
}
修改
正如Jim Garrison的回答,设置单元格样式确实会将类型更改为数字。以下是工作代码。
package com.example;
import java.io.FileOutputStream;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFDataFormat;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
public class TestExcelMain {
public static void main(String[] args) throws Exception {
System.out.println("started");
XSSFWorkbook workbook = new XSSFWorkbook();
XSSFSheet sheet = workbook.createSheet();
XSSFRow row = sheet.createRow(0);
XSSFCell cell = row.createCell(0);
cell.setCellValue(3.14159);
cell.setCellType(XSSFCell.CELL_TYPE_NUMERIC);
XSSFDataFormat format = workbook.createDataFormat();
XSSFCellStyle style = workbook.createCellStyle();
style.setDataFormat(format.getFormat("0.0"));
cell.setCellStyle(style);
workbook.write(new FileOutputStream("Test.xlsx"));
System.out.println("finished");
}
}
答案 0 :(得分:5)
来自setCellValue(double value)
的Javadoc(强调我的):
value - 要设置此单元格的数值。对于公式,我们设置预先计算的值,对于数字我们将设置其值。 对于其他类型,我们会将单元格更改为数字单元格并设置其值。
因此,无论之前的细胞是什么,此方法都会将细胞类型更改为数字。
请注意"一般"与细胞类型无关,与细胞格式有关。要更改单元格的显示方式,请使用setCellStyle()
。