前提条件:POI 4.1.2はJDK1.8に対応します。たとえば、バージョンが対応しない場合、JDK1.7は確実に機能しません。その後、多くの迂回を行います。
-
POIjarパッケージのダウンロード
POI公式ウェブサイトのダウンロードアドレス -
ダウンロード後に解凍する
- 解凍したフォルダー内のjarパッケージ(libフォルダー内のjarパッケージを含むすべてのjarパッケージ)を、新しく作成したJavaプロジェクト「Excel」(自分で作成したフォルダー)のlibフォルダーにコピーします。
- すべてのjarパッケージを選択し、右クリックして[ビルドパス]-> [ビルドパスに追加]を選択し、すべてのjarパッケージをパスに追加します。
5操作中にエラー「スレッド "main" java.lang.UnsupportedClassVersionError:org / apache / poi / ss / usermodel / Sheet:Unsupported major.minor version52.0」が報告されました。Baiduは現在のjdkバージョンが低すぎることを検出しました。、私はJDK1.7
ソリューションを使用します。
(1)JDK1.8をダウンロードし、以下をインストールします。
Baiduクラウドディスクアドレス:
https
://pan.baidu.com/s/1s5VbBpjaKn9klEr2iYTCiw抽出コード:40i8
(2)JDK1.8環境の構成
リファレンス:https://blog.csdn.net/sunrise52java/article/details/88536711
( 3)Eclipseを構成します
「ウィンドウ」->「設定」->「JAVA」->「インストール済みJRES」->「追加」を
クリックして「標準VM」を選択し、「次へ」を
クリックして「ディレクトリー」をクリックし、参照してJDKインストール・パス(jdkではなくjre)を選択します。
[完了]-> [適用]をクリックして、JAVAプロジェクトを作成します。この時点で作成されるプロジェクトはJDK1.8に基づいています。
- 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
2020年11月15日
ctt:NUMERIC
2020年11月16日
ctt:NUMERIC
2020年11月17日
ctt:NUMERIC
2020年11月18日
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();
}
}
}