JAVA 小练习-7 POI 处理Excel文件-读取XLS文件

前提:POI 4.1.2 对应 JDK1.8,如果版本不对应,比如用的是JDK1.7肯定是不行的啦,后面跟我一样会走很多弯路。

  1. POI jar 包下载
    POI官网下载地址

  2. 下载下来后解压

在这里插入图片描述在这里插入图片描述

在这里插入图片描述

  1. 将解压好的文件夹中的jar包(所有的jar包,包括lib文件夹中的jar包)复制到新建java项目“Excel”中的lib文件夹中(自己建的文件夹)

在这里插入图片描述

  1. 选中所有的jar包,右击选择“Build path”->“add to build path” 将所有的jar包添加到路径中。

5 运行过程中报“Exception in thread “main” java.lang.UnsupportedClassVersionError: org/apache/poi/ss/usermodel/Sheet : Unsupported major.minor version 52.0” 错误,百度查到是当前jdk版本太低的原因,我用的是JDK 1.7
解决办法:

(1)下载JDK1.8,并安装:

百度云盘地址:
https://pan.baidu.com/s/1s5VbBpjaKn9klEr2iYTCiw
提取码:40i8
(2)配置JDK1.8环境
参照:https://blog.csdn.net/sunrise52java/article/details/88536711
(3)配置eclipse

点击Window->Preferences->JAVA->Installed JRES->Add
在这里插入图片描述
选择Standard VM,点击Next
在这里插入图片描述
点击Directory,浏览选择JDK的安装路径(是jdk不是jre)

在这里插入图片描述
点击Finish->Apply ,创建JAVA项目,此时创建的项目就是以JDK1.8为基础的。

  1. 读取XLS文件

在这里插入图片描述

package tests;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Sheet;

public class ReadExcel {
    
    
	public static void main(String[] args){
    
    
		try {
    
    
			File f = new File("C:\\Users\\Admin\\Desktop\\测试.xls");
			FileInputStream fis = new FileInputStream(f);		
			HSSFWorkbook wb = new HSSFWorkbook(fis);
			//Sheet st = wb.getSheetAt(0);//获取工作表,此处为第一张工作表
			Sheet st = wb.getSheet("新表");//通过表名来获取表
			int no = st.getLastRowNum();//获取最后一行的下标,如果是空的则为-1
			//int c_no = st.getLeftCol();//获取最后一列的下标,如果是空的则为-1
			System.out.println(no);
			Object content;
			if(no!=-1){
    
    
				int x = 0;
				while(x<=no){
    
    
					Row row = st.getRow(x);//获取第x行 
					Cell c = row.getCell(1);//获取第x行第二列的单元格
					CellType ct = c.getCellType();
					String ctt = ct.toString();
					System.out.println("ctt:"+ctt);
					switch(ctt)
					{
    
    
					case "STRING":
						content = c.getStringCellValue();
						break;
					case "NUMERIC":
						Date d = c.getDateCellValue();//单元格为日期类型可用Date接收
						SimpleDateFormat sdf = new SimpleDateFormat("yyyy年MM月dd日");
						content = sdf.format(d);//格式化日期
						break;
					default:
						content = "这个数据类型未知";					
					}
					System.out.println(content.toString());
					x++;
				}				
			}			
			wb.close();
			fis.close();		
			} catch (IOException e) {
    
    			
			e.printStackTrace();
		}
		}
}

输出:

日期
ctt:NUMERIC
20201115日
ctt:NUMERIC
20201116日
ctt:NUMERIC
20201117日
ctt:NUMERIC
20201118

8.读取带有合并单元格的XLS

在这里插入图片描述

	public static void main(String[] args) {
    
    
		try {
    
    
			File f = new File("C:\\Users\\Admin\\Desktop\\测试.xls");
			FileInputStream fis = new FileInputStream(f);		
			HSSFWorkbook wb = new HSSFWorkbook(fis);
			//Sheet st = wb.getSheetAt(0);//获取工作表,此处为第一张工作表
			Sheet st = wb.getSheet("新表");//通过表名来获取表
			int no = st.getLastRowNum();//获取最后一行的下标,如果是空的则为-1
			//int c_no = st.getLeftCol();//获取最后一列的下标,如果是空的则为-1
			System.out.println(no);
			Object content;
			if(no!=-1){
    
    
				int x = 0;
				while(x<=no){
    
    
					Row row = st.getRow(x);//获取第x行 
					Cell c = row.getCell(0);//获取第x行第二列的单元格
					CellType ct = c.getCellType();
					String ctt = ct.toString();
					System.out.println("=============================");
					System.out.println("ctt:"+ctt);					
					System.out.println(c.getColumnIndex());
					System.out.println(c.getRowIndex());
					switch(ctt)
					{
    
    
					case "STRING":
						content = c.getStringCellValue();
						break;
					case "NUMERIC":
						content = (int) c.getNumericCellValue();
						break;
					case "BLANK"://合并单元格只会读到第一个格的值,其余单元格getCellType()返回为“BLANK"
						content = "null";
						break;
					default:
						content = "这个数据类型未知";					
					}
					System.out.println(content.toString());
					x++;
				}				
			}			
			wb.close();
			fis.close();		
			} catch (IOException e) {
    
    			
			e.printStackTrace();
		}
	}
}

猜你喜欢

转载自blog.csdn.net/KathyLJQ/article/details/109695789