我正在尝试将一些数据导出到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");
}
}
Run Code Online (Sandbox Code Playgroud)
有没有其他方法可以将单元格类型设置为适当的类型?
我也尝试过具有完全相同结果的Cell.setCellType(Cell.CELL_TYPE_NUMERIC).
我期望的正确的细胞类型Number.
我也尝试使用所有XSSFclassess(下面的代码),如本文所述,setCellType(HSSFCELL.CELL_TYPE_NUMERIC)在apache poi中不起作用
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");
}
}
Run Code Online (Sandbox Code Playgroud)
编辑
正如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");
}
}
Run Code Online (Sandbox Code Playgroud)
来自Javadoc setCellValue(double value)(强调我的):
value - 要设置此单元格的数值.对于公式,我们将设置预先计算的值,对于数值,我们将设置其值.对于其他类型,我们将单元格更改为数字单元格并设置其值.
因此,无论之前的细胞是什么,此方法无论如何都会将细胞类型更改为数字.
请注意,"常规"与单元格类型无关,而与单元格格式有关.要更改单元格显示的方式,请使用setCellStyle().
| 归档时间: |
|
| 查看次数: |
7221 次 |
| 最近记录: |