欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java读取Excel数据内容,兼容excel2003和excel2007版本/xls后缀,xlsx后缀

程序员文章站 2022-07-13 13:15:55
...

Java兼容读取excel2003和excel2007版本的文件
1.判断文件后缀名是xls,还是xlsx
2.如果是xls,使用HSSFWorkbook;如果是xlsx,使用XSSFWorkbook

以xlsx后缀文件举例。2003版本的xls文件测试也可以。
Java读取Excel数据内容,兼容excel2003和excel2007版本/xls后缀,xlsx后缀

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.DateUtil;
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 test {
	
	/**
	 * 读取Excel数据内容
	 * 请求参数,响应参数可根据自己情况而定
	 */
	public static List<List<String>> readExcelContent(String filePath) {
		List<List<String>> list = new ArrayList<List<String>>();
		Workbook wb =null;
		Sheet sheet = null;
		Row row = null;
		try {
			String extString = filePath.substring(filePath.lastIndexOf("."));
			InputStream is = new FileInputStream(filePath);
			if(".xls".equals(extString)){
				wb = new HSSFWorkbook(is);
	        }else if(".xlsx".equals(extString)){
	            wb = new XSSFWorkbook(is);
	        }
		} catch (IOException e) {
			e.printStackTrace();
		}
		sheet = wb.getSheetAt(0);
		int rowNum = sheet.getLastRowNum();// 得到总行数
		row = sheet.getRow(0);
		// 正文内容应该从第二行开始,第一行为表头的标题
		for (int i = 1; i <= rowNum; i++) {
			List<String> oneData = new ArrayList<String>();
			row = sheet.getRow(i);
			int cellSize = row.getLastCellNum();//每行的总列数
			for(int j = 0;j<cellSize;j++) {
				String value = "";
				Cell cell = row.getCell(j);
				if(cell!=null) {
					switch(cell.getCellType()) {
					case Cell.CELL_TYPE_STRING:
						value = cell.getStringCellValue();
						break;
					case Cell.CELL_TYPE_NUMERIC:
						if (DateUtil.isCellDateFormatted(cell)) {
                            Date date = cell.getDateCellValue();
                            if (date != null) {
                                value = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(date);
                            } else {
                                value = "";
                            }
                         } else {
                            value = new DecimalFormat("0").format(cell.getNumericCellValue());
                         }
                         break;
					case Cell.CELL_TYPE_BLANK:
						 break;   
					case Cell.CELL_TYPE_ERROR:
						 value = "";
						 break;   
					case Cell.CELL_TYPE_BOOLEAN:
                         value = (cell.getBooleanCellValue() == true ? "Y": "N");
                         break;  
					case Cell.CELL_TYPE_FORMULA:
                        // 导入时如果为公式生成的数据则无值
                        if (!cell.getStringCellValue().equals("")) {
                           value = cell.getStringCellValue();
                        } else {
                           value = cell.getNumericCellValue() + "";
                        }
                        break;    
					default:
                        value = "";     
					}
					oneData.add(value);
				}
			}
			list.add(oneData);
		}
		return list;
	}
      
      
	public static void main(String[] args) {
		try {
			// 对读取Excel表格内容测试
			String filePath = "D:\\44\\hello.xlsx";
			//InputStream is2 = new FileInputStream("D:\\44\\hello.xlsx");
			List<List<String>> list =readExcelContent(filePath);
			System.out.println("获得Excel表格的内容:");
			for (int i = 0; i < list.size(); i++) {
				System.out.println(list.get(i));
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}

控制台输出

获得Excel表格的内容:
[姓名1, 10, 2020-11-26 15:26:32]
[姓名2, 20, 2020-11-26 15:26:32]
[姓名3, 30, 2020-11-26 15:26:32]