Excel有两种后缀名的:
一种是:.xls
二种是:xlsx
下面我们就分别读取一下吧。
先做好准备工作,导入我们需要的jar包
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</artifactId> <version>3.16</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.16</version> </dependency>
这里我们选用的版本是3.16的。不知道为什么小编使用3.17的会出问题。
HSSFWorkBook:操作2003版本以前的(包括2003版本),扩展名.xls,该类在org.apache.poi:poi中
XSSFWorkBook:操作2007版本以后的(包括2007版本),拓展名.xlsx,该类在org.apache.poi:poi-ooxml中
下面我们看代码来实际操作一下。
package Se_01; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFSheet; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.poifs.filesystem.POIFSFileSystem; import org.apache.poi.ss.usermodel.Cell; import org.apache.poi.ss.usermodel.CellStyle; import org.apache.poi.ss.usermodel.CellType; import org.apache.poi.ss.usermodel.Row; import org.apache.poi.ss.usermodel.Workbook; import org.apache.poi.xssf.usermodel.XSSFWorkbook; /* 实现操作 excel * * * * HSSFWorkBook:操作2003版本以前的(包括2003版本),扩展名.xls,该类在org.apache.poi:poi中 XSSFWorkBook:操作2007版本以后的(包括2007版本),拓展名.xlsx,该类在org.apache.poi:poi-ooxml中 SXSSFWorkBook:对于海量的数据进行操作 对于不同版本的EXCEL文档要使用不同的工具类,如果使用错了,会提示如下错误信息。 org.apache.poi.openxml4j.exceptions.InvalidOperationException org.apache.poi.poifs.filesystem.OfficeXmlFileException * */ public class DqExcel { public static void main(String[]arge){ read(); System.out.println("----------下面是 .xlsx---------"); read1(); } /* 实现读取 excel .xls 为后缀的 * ** */ public static void read() { File file = new File("C:\\Users\\Administrator\\Desktop\\poi.xls"); if (!file.exists()) System.out.println("文件不存在"); try { //1.读取Excel的对象 POIFSFileSystem poifsFileSystem = new POIFSFileSystem(new FileInputStream(file)); //2.Excel工作薄对象 HSSFWorkbook hssfWorkbook = new HSSFWorkbook(poifsFileSystem); //3.Excel工作表对象 HSSFSheet hssfSheet = hssfWorkbook.getSheetAt(0); //总行数 int rowLength = hssfSheet.getLastRowNum()+1; //4.得到Excel工作表的行 HSSFRow hssfRow = hssfSheet.getRow(0); //总列数 int colLength = hssfRow.getLastCellNum(); //得到Excel指定单元格中的内容 HSSFCell hssfCell = hssfRow.getCell(0); //得到单元格样式 CellStyle cellStyle = hssfCell.getCellStyle(); System.out.println("----------下面是 .xls---------"); for (int i = 0; i < rowLength; i++) { //获取Excel工作表的行 HSSFRow hssfRow1 = hssfSheet.getRow(i); for (int j = 0; j < colLength; j++) { //获取指定单元格 HSSFCell hssfCell1 = hssfRow1.getCell(j); //Excel数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串时就有可能报异常: //Cannot get a STRING value from a NUMERIC cell //将所有的需要读的Cell表格设置为String格式 if (hssfCell1 != null) { hssfCell1.setCellType(CellType.STRING); } //获取每一列中的值 System.out.print(hssfCell1.getStringCellValue()+"\t"); } System.out.println(); } } catch (IOException e) { e.printStackTrace(); } } /*** * 实现读取 后缀为 .xlsx 的excel */ public static void read1() { File file = new File("C:\\Users\\Administrator\\Desktop\\测试数据.xlsx"); try { Workbook workbook = new XSSFWorkbook(file); //工作表对象 org.apache.poi.ss.usermodel.Sheet sheet = workbook.getSheetAt(0); //总行数 int rowLength = sheet.getLastRowNum()+1; //工作表的列 Row row = sheet.getRow(0); //总列数 int colLength = row.getLastCellNum(); //得到指定的单元格 Cell cell = row.getCell(0); //得到单元格样式 CellStyle cellStyle = cell.getCellStyle(); System.out.println("行数:" + rowLength + ",列数:" + colLength); for (int i = 0; i < rowLength; i++) { row = sheet.getRow(i); for (int j = 0; j < colLength; j++) { cell = row.getCell(j); //Excel数据Cell有不同的类型,当我们试图从一个数字类型的Cell读取出一个字符串时就有可能报异常: //Cannot get a STRING value from a NUMERIC cell //将所有的需要读的Cell表格设置为String格式 if (cell != null) cell.setCellType(CellType.STRING); //对Excel进行修改 // if (i > 0 && j == 1) // cell.setCellValue("1000"); System.out.print(cell.getStringCellValue() + "\t"); } System.out.println(); } //将修改好的数据保存 // OutputStream out = new FileOutputStream(file); // workbook.write(out); } catch (Exception e) { e.printStackTrace(); } } }