java 调用 poi(apache的专门读写microsoft office API) 操作Excel

首先建立maven工程

在<dependencies></dependencies> 中加入

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.17</version>

</dependency>

<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.17</version>

</dependency>

poi包中只有 HSSF (处理xls,即 2003 版及以前的)

poi-ooxml包中有对 XSSF(处理xlsx,处理 2007版及以后的)

但是只有这两个包可能会出错,出现找不到 XMLBEAN的异常( 不一定出现,选择性导入 )


如果还有异常:再导入一个


<!-- 我的导入这四个maven就完全可以运行 -->

了解在处理Excel中常见的类与方法

以操作2007版的XSSF举例

XSSFWorkbook  wb  --  获得一个Excel 文件 , 参数为文件,用完记得关闭

XSSFSheet sheet --  获得Excel文件中的 sheet

                                       

    sheet.getFirstRowNum() --  获得第一个有效行下标(即存在有效数据)

    sheet.getPhysicalNumberOfRows()  --  获得物理的总行数,即被编辑过得总行数

    sheet.getRow(i)  --  获得第i行对象

XSSFRow row -- 行对象

    row.getFirstCellNum()  --  获得第一个有效单元格下标

    row.getLastCellNum()  --   获得最后一个有效单元格下标

XSSFCell cell  --  单元格对象

    cell.getCellTypeEnum()  --  获得当前单元格的格式枚举

                                             

        NUMERIC  --  枚举,表示为数值

        BLANK --  枚举,表示为空白

        STRING  --  枚举,表示为字符串

        BOOLEAN  --  枚举,表示为布尔值

        FORMULA  --  枚举,表示为公式

        ERROR  --  枚举,表示为错误

贴一段代码方便理解(改编自别人的),这是将excel的数据存入二维ArrayList中的

ArrayList<ArrayList<Object>> rowList = new ArrayList<ArrayList<Object>>();
			ArrayList<Object> colList;
			wb = new XSSFWorkbook(new FileInputStream(file));
			XSSFSheet sheet = wb.getSheetAt(0);
			XSSFRow row;
			XSSFCell cell;
			Object value;
			for (int i = sheet.getFirstRowNum(), rowCount = 0; rowCount < sheet.getPhysicalNumberOfRows(); i++) {
				row = sheet.getRow(i);
				colList = new ArrayList<Object>();
				if (row == null) {
					// 当读取行为空时
					if (i != sheet.getPhysicalNumberOfRows()) {// 判断是否是最后一行
						rowList.add(colList);
					}
					continue;
				} else {
					rowCount++;
				}
				for (int j = row.getFirstCellNum(); j <= row.getLastCellNum(); j++) {
					cell = row.getCell(j);
					if (cell == null || cell.getCellType() == HSSFCell.CELL_TYPE_BLANK) {
						// 当该单元格为空
						if (j != row.getLastCellNum()) {// 判断是否是该行中最后一个单元格
							colList.add("");
						}
						continue;
					}
					switch (cell.getCellTypeEnum()) {
					case NUMERIC:
						if ("@".equals(cell.getCellStyle().getDataFormatString())) {
							value = df.format(cell.getNumericCellValue());
						} else if ("General".equals(cell.getCellStyle().getDataFormatString())) {
							value = nf.format(cell.getNumericCellValue());
						} else {
							value = sdf.format(HSSFDateUtil.getJavaDate(cell.getNumericCellValue()));
						}
						System.out.println(i + "行" + j + " 列 is Number type  " + value.toString());
						break;
					case BLANK:
						System.out.println(i + "行" + j + " 列 is Blank type");
						value = "";
						break;
					case STRING:
						System.out.println(i + "行" + j + " 列 is String type  " + cell.getStringCellValue());
						value = cell.getStringCellValue();
						break;
					case BOOLEAN:
						 System.out.println(i + "行" + j + " 列 is Boolean type");
						 value = Boolean.valueOf(cell.getBooleanCellValue());
						 break;
					default:
						System.out.println(i + "行" + j + " 列 is default type" );
						 value = cell.toString();
					
					}// end switch
					colList.add(value);
				} // end for j
				rowList.add(colList);
			} // end for i

猜你喜欢

转载自blog.csdn.net/ssuperlg/article/details/79613343