用POI读取Excel数据:(版本号:POI3.7)
1、读取Excel
- private List<String[]> rosolveFile(InputStream is, String suffix,
- int startRow) throws IOException, FileNotFoundException {
- Workbook xssfWorkbook = null;
- if ("xls".equals(suffix)) {
- xssfWorkbook = new HSSFWorkbook(is);
- } else if ("xlsx".equals(suffix)) {
- xssfWorkbook = new XSSFWorkbook(is);
- }
- Sheet xssfSheet = xssfWorkbook.getSheetAt(0);
- if (xssfSheet == null) {
- return null;
- }
- ArrayList<String[]> list = new ArrayList<String[]>();
- int lastRowNum = xssfSheet.getLastRowNum();
- for (int rowNum = startRow; rowNum <= lastRowNum; rowNum++) {
- if (xssfSheet.getRow(rowNum) != null) {
- Row xssfRow = xssfSheet.getRow(rowNum);
- short firstCellNum = xssfRow.getFirstCellNum();
- short lastCellNum = xssfRow.getLastCellNum();
- if (firstCellNum != lastCellNum) {
- String[] values = new String[lastCellNum];
- for (int cellNum = firstCellNum; cellNum < lastCellNum; cellNum++) {
- Cell xssfCell = xssfRow.getCell(cellNum);
- if (xssfCell == null) {
- values[cellNum] = "";
- } else {
- values[cellNum] = parseExcel(xssfCell);
- }
- }
- list.add(values);
- }
- }
- }
- return list;
- }
2、Excel数据处理:
Excel存储日期、时间均以数值类型进行存储,读取时POI先判断是是否是数值类型,再进行判断转化
1、数值格式(CELL_TYPE_NUMERIC):
1.纯数值格式:getNumericCellValue() 直接获取数据
2.日期格式:处理yyyy-MM-dd, d/m/yyyy h:mm, HH:mm 等不含文字的日期格式
1).判断是否是日期格式:HSSFDateUtil.isCellDateFormatted(cell)
2).判断是日期或者时间
cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("h:mm")
OR:cell.getCellStyle().getDataFormat() == HSSFDataFormat.getBuiltinFormat("yyyy-MM-dd")
3.自定义日期格式:处理yyyy年m月d日,h时mm分,yyyy年m月等含文字的日期格式
判断cell.getCellStyle().getDataFormat()值,解析数值格式
yyyy年m月d日----->31
m月d日---->58
h时mm分--->32
2、字符格式(CELL_TYPE_STRING):直接获取内容
- private String parseExcel(Cell cell) {
- String result = new String();
- switch (cell.getCellType()) {
- case HSSFCell.CELL_TYPE_NUMERIC:// 数字类型
- if (HSSFDateUtil.isCellDateFormatted(cell)) {// 处理日期格式、时间格式
- SimpleDateFormat sdf = null;
- if (cell.getCellStyle().getDataFormat() == HSSFDataFormat
- .getBuiltinFormat("h:mm")) {
- sdf = new SimpleDateFormat("HH:mm");
- } else {// 日期
- sdf = new SimpleDateFormat("yyyy-MM-dd");
- }
- Date date = cell.getDateCellValue();
- result = sdf.format(date);
- } else if (cell.getCellStyle().getDataFormat() == 58) {
- // 处理自定义日期格式:m月d日(通过判断单元格的格式id解决,id的值是58)
- SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
- double value = cell.getNumericCellValue();
- Date date = org.apache.poi.ss.usermodel.DateUtil
- .getJavaDate(value);
- result = sdf.format(date);
- } else {
- double value = cell.getNumericCellValue();
- CellStyle style = cell.getCellStyle();
- DecimalFormat format = new DecimalFormat();
- String temp = style.getDataFormatString();
- // 单元格设置成常规
- if (temp.equals("General")) {
- format.applyPattern("#");
- }
- result = format.format(value);
- }
- break;
- case HSSFCell.CELL_TYPE_STRING:// String类型
- result = cell.getRichStringCellValue().toString();
- break;
- case HSSFCell.CELL_TYPE_BLANK:
- result = "";
- default:
- result = "";
- break;
- }
- return result;
- }
*万能处理方案:
所有日期格式都可以通过getDataFormat()值来判断
yyyy-MM-dd-----14
yyyy年m月d日---31
yyyy年m月-------57
m月d日 ----------58
HH:mm-----------20
h时mm分 -------32
- //1、判断是否是数值格式
- if(cell.getCellType() == HSSFCell.CELL_TYPE_NUMERIC){
- short format = cell.getCellStyle().getDataFormat();
- SimpleDateFormat sdf = null;
- if(format == 14 || format == 31 || format == 57 || format == 58){
- //日期
- sdf = new SimpleDateFormat("yyyy-MM-dd");
- }else if (format == 20 || format == 32) {
- //时间
- sdf = new SimpleDateFormat("HH:mm");
- }
- double value = cell.getNumericCellValue();
- Date date = org.apache.poi.ss.usermodel.DateUtil.getJavaDate(value);
- result = sdf.format(date);
- }
189 yyyy-mm-dd hh:mm:ss
相关推荐
POI提供了HSSF(Horrible Spreadsheet Format)和XSSF(XML Spreadsheet Format)两个API,分别用于处理旧版的.BIFF8格式(XLS)和基于XML的新版格式(XLSX)。生成水印的过程涉及以下几个关键步骤: 1. **创建文字...
POI提供了HSSF(Horizontally SpreadSheet Format)和XSSF(XML Spreadsheet Format)两个API,分别用于处理老版本的.xls文件和新版本的.xlsx文件。在我们的场景中,如果模板是.xlsx格式,我们将使用XSSFWorkbook,...
对于Excel,POI支持老版本的HSSF(Horrible Spreadsheet Format)和新版本的XSSF(XML Spreadsheet Format)。 二、Excel导入 1. 创建Workbook对象:首先,我们需要创建一个Workbook对象来表示Excel文件。对于.xls...
"poi3.9读写excel兼容03和07版本"这个标题指的是使用Apache POI 3.9版本的API,能够兼容两种不同格式的Excel文件:.xls(Excel 2003及更早版本)和.xlsx(Excel 2007及更高版本)。 在描述中提到的"完美修订版本...
DataFormat dataFormat = workbook.createDataFormat(); dateCellStyle.setDataFormat(dataFormat.getFormat("mm/dd/yyyy")); cell.setCellStyle(dateCellStyle); cell.setCellValue(new Date()); ``` **3. 样式与...
这可以通过创建`DataFormat`对象并调用`format(int formatIndex)`或`format(String formatString)`方法实现,其中`formatString`参数允许输入自定义的格式字符串,如“¥#,##0.00;[Red]¥(#,##0.00)”等。 通过掌握...
- **DataFormat**: 用于设置单元格的格式,如日期、货币、百分比等。 - **Hyperlink**: 支持在工作簿中创建超链接。 使用POI时,首先需要添加对应的jar包到项目类路径中。例如,对于 poi-bin-3.2-FINAL-20081019....
6. **DataFormat**:用于定义单元格数据的格式,如数值、日期、百分比等。 一个简单的“poi导出excel通用类”可能包含以下功能: 1. **初始化工作簿**:创建HSSFWorkbook对象,并根据需要创建多个Sheet。 2. **...
在Excel处理方面,它提供了HSSF(Horrible Spreadsheet Format)用于处理97-2003版本的.xls文件,而XSSF(XML Spreadsheet Format)则用于处理2007及以上版本的.xlsx文件。 对于`poireadwriteexcel`这个文件,可能...
import org.apache.poi.ss.usermodel.DataFormat; import org.apache.poi.ss.usermodel.IndexedColors; Font font = workbook.createFont(); font.setFontHeightInPoints((short) 12); font.setColor(IndexedColors...
try (OutputStream outputStream = new FileOutputStream("PoiExcel.xlsx")) { workbook.write(outputStream); // 将工作簿写入文件 } workbook.close(); } } ``` 上述代码创建了一个名为"Sheet1"的工作表,...
Apache POI 提供了多种单元格类型,如 `DataFormat`、`FormulaEvaluator` 等,可以根据需求创建不同的单元格: ```java Row row = sheet.createRow(0); // 创建第一行 Cell cell = row.createCell(0); // 在第一行...
POI提供了HSSF(Horrible Spreadsheet Format)用于处理.xls文件,而XSSF用于处理.xlsx文件。这两个接口分别提供了对低级和高级模型的访问,使得我们可以创建、读取和修改Excel工作簿、工作表、单元格等元素。 1. *...
Apache POI 是一个流行的Java库,它允许开发者读写Microsoft Office格式的文件,包括Excel。下面我们将详细介绍如何在SpringBoot中整合POI来实现Excel的导入和导出,以及如何利用ExcelFormatUtil工具类进行单元格...
- DataFormat:用于创建和应用格式到单元格上,比如百分比、货币、日期格式等。 - HSSF 和 XSSF:HSSF是处理.xls文件的,XSSF处理.xlsx文件。两者API相似,但XSSF能处理更多特性和更大的文件。 在实际开发中,你...
5. 数据格式化:对于数字、日期等,我们可以使用`DataFormat`对象定义单元格的显示格式。 6. 写入文件:最后,我们需要将整个工作簿写入到磁盘上的文件,使用`write()`方法完成这一操作,然后关闭流以确保数据完整...
日期需要特别处理,通过`CellStyle`中的`DataFormat`设置。 6. **样式与格式** `CellStyle`类提供了许多属性,如字体、填充、边框、对齐方式等,可以定制单元格的外观。 7. **读取Excel数据** 通过`getSheetAt()...
这里,我们创建了一个新的样式`cellStyle`,并设置了数据格式`DataFormat`,然后将其应用到单元格上。 2. **保留两位小数** 如果要将1.2显示为1.20,可以使用内置的Excel格式"0.00": ```java HSSFCell cell = ...
3. 对于日期单元格,使用`DataFormat`和`cell.getDateCellValue()`来正确读取和格式化日期。 4. 当读取单元格时,如果单元格类型不确定,可以使用`cell.getCellType()`判断后再读取,避免异常。 总结,Apache POI ...
- 可以使用 `DataFormat` 类创建自定义格式或引用预定义的格式。 6. **公式和图表** - POI 支持在单元格中插入和处理 Excel 公式,使用 `FormulaEvaluator` 类进行计算。 - 对于图表,POI 提供了相应的 API 创建...