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文件测试也可以。
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]
上一篇: 使用pandas轻松读取表格xlsx数据
下一篇: R语言中读取xlxs文件