Java實現(xiàn)導(dǎo)入導(dǎo)出Excel文件的方法(poi,jxl)
目前,比較常用的實現(xiàn)Java導(dǎo)入、導(dǎo)出Excel的技術(shù)有兩種Jakarta POI和Java Excel直接上代碼:
一,POI
POI是apache的項目,可對微軟的Word,Excel,Ppt進(jìn)行操作,包括office2003和2007,Excl2003和2007。poi現(xiàn)在一直有更新。所以現(xiàn)在主流使用POI。
xls:
pom:
<dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.2</version> </dependency>
導(dǎo)出:
public class PoiCreateExcel {
public static void main(String[] args) {
// 創(chuàng)建表頭
String[] title = {"id","name","sex"};
//創(chuàng)建Excel工作薄
HSSFWorkbook workbook = new HSSFWorkbook();
//創(chuàng)建一個工作表sheet
HSSFSheet sheet = workbook.createSheet();
//創(chuàng)建第一行
HSSFRow row = sheet.createRow(0);
HSSFCell cell = null;
// 插入第一行
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
}
// 追加數(shù)據(jù)
for (int i = 1; i < 10; i++) {// 這里的int 起始是1 也就是第二行開始
HSSFRow nexTrow = sheet.createRow(i);
HSSFCell cell2 = nexTrow.createCell(0);
cell2.setCellValue("a"+i);
cell2 = nexTrow.createCell(1);
cell2.setCellValue("user");
cell2 = nexTrow.createCell(2);
cell2.setCellValue("男");
}
// 創(chuàng)建一個文件
File file = new File("d:/poi.xls");
try {
file.createNewFile();
// 將內(nèi)容存盤
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
導(dǎo)入:
public class PoiReadExcel {
public static void main(String[] args) {
// 引入需要解析的文件
File file = new File("d:/poi.xls");
try {
// 創(chuàng)建Excel 讀取文件內(nèi)容
HSSFWorkbook workbook = new HSSFWorkbook(FileUtils.openInputStream(file));
/**
* 第一種方式讀取Sheet頁
*/
// HSSFSheet sheet = workbook.getSheet("Sheet0");
/**
* 第二種方式讀取Sheet頁
*/
HSSFSheet sheet = workbook.getSheetAt(0);
int firstRowNum = 0;// 起始行第0行
int lasrRowNum = sheet.getLastRowNum();// 一直讀到最后一行
for (int i = 0; i < lasrRowNum; i++) {
HSSFRow row = sheet.getRow(i);
// 獲取當(dāng)前最后單元格列號
int lastCellNum = row.getLastCellNum();
for (int j = 0; j < lastCellNum; j++) {
HSSFCell cell = row.getCell(j);
String value = cell.getStringCellValue();// 注意! 如果Excel 里面的值是String 那么getStringCellValue 如果是其他類型 則需要修改
System.out.print(value + " ");
}
System.out.println();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
xlsx:
pom:
<!-- poi高版本額外包 --> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-examples</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-excelant</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-ooxml-schemas</artifactId> <version>3.9</version> </dependency> <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi-scratchpad</artifactId> <version>3.9</version> </dependency>
導(dǎo)出:
public class PoiCreateExcel {
public static void main(String[] args) {
// 創(chuàng)建表頭
String[] title = {"id","name","sex"};
//創(chuàng)建Excel工作薄
XSSFWorkbook workbook = new XSSFWorkbook();
//創(chuàng)建一個工作表shheet
Sheet sheet = workbook.createSheet();
//創(chuàng)建第一行
Row row = sheet.createRow(0);
Cell cell = null;
// 插入第一行
for (int i = 0; i < title.length; i++) {
cell = row.createCell(i);
cell.setCellValue(title[i]);
}
// 追加數(shù)據(jù)
for (int i = 1; i < 10; i++) {// 這里的int 起始是1 也就是第二行開始
Row nexTrow = sheet.createRow(i);
Cell cell2 = nexTrow.createCell(0);
cell2.setCellValue("a"+i);
cell2 = nexTrow.createCell(1);
cell2.setCellValue("user");
cell2 = nexTrow.createCell(2);
cell2.setCellValue("男");
}
// 創(chuàng)建一個文件
File file = new File("d:/poi.xlsx");// 這里可以修改成高版本的
try {
file.createNewFile();
// 將內(nèi)容存盤
FileOutputStream stream = FileUtils.openOutputStream(file);
workbook.write(stream);
stream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
導(dǎo)入:
public class PoiReadExcel {
public List<Double> readExcels(InputStream is)throws Exception{
List<Double> xlsxList = new ArrayList<Double>();
try {
if(is ==null){
throw new IOException("文件不正確!");
}
Workbook workbook = WorkbookFactory.create(is);
FormulaEvaluator fe = workbook.getCreationHelper().createFormulaEvaluator();
//獲取第一張表
Sheet sheet = workbook.getSheetAt(0);
if(sheet == null){
throw new IOException("傳入的excel的第一張表為空!");
}
for(int rowNum = 0;rowNum <= sheet.getLastRowNum(); rowNum++){
Row row = sheet.getRow(rowNum);
if(row != null){
//獲得當(dāng)前行的開始列
int firstCellNum = row.getFirstCellNum();
//獲得當(dāng)前行的列數(shù)
int lastCellNum = row.getPhysicalNumberOfCells();
String result = "";
//循環(huán)當(dāng)前行
for(int cellNum = firstCellNum; cellNum < lastCellNum;cellNum++){
Cell cell = row.getCell(cellNum);
double value = 0;
String valueString = cell.getStringCellValue();
if(null!=fe.evaluate(cell)){
value = fe.evaluate(cell).getNumberValue();
}
//result = result + cellNum + ":"+value + "----";
result = result + cellNum + ":"+valueString + "----";
}
System.out.println(result + " ");
}
}
is.close();
} catch (FileNotFoundException e) {
throw new Exception("文件不正確!");
}
return xlsxList;
}
public static void main(String[] args) throws Exception {
InputStream is = new FileInputStream("d:/poi.xlsx");
PoiReadExcel re = new PoiReadExcel();
re.readExcels(is);
}
}
二,JXL
JXL只能對Excel進(jìn)行操作,屬于比較老的框架,它只支持到Excel 95-2000的版本?,F(xiàn)在已經(jīng)停止更新和維護(hù)。
pom:
<!-- jxl --> <dependency> <groupId>net.sourceforge.jexcelapi</groupId> <artifactId>jxl</artifactId> <version>2.6.10</version> </dependency>
導(dǎo)出:
public class JxlCreateExcel {
public static void main(String[] args) {
// 首先設(shè)置表格第一行 表格頭名稱 也就是列名
String [] title = {"id","name","sex"};
// 創(chuàng)建Excel文件 存入路徑
File file = new File("d:/jxl.xls");
try {
file.createNewFile();
// 創(chuàng)建工作薄
WritableWorkbook workbook = Workbook.createWorkbook(file);
// 創(chuàng)建sheet
WritableSheet sheet = workbook.createSheet("sheet1",0);
// 添加數(shù)據(jù)
Label label = null;
// 第一行設(shè)置列名
for (int i = 0; i < title.length; i++) {
label = new Label(i,0,title[i]);
sheet.addCell(label);
}
// 追加數(shù)據(jù) 從第二行開始 i從1開始
for (int i = 1; i < 9; i++) {
label = new Label(0,i,"id:"+i);
sheet.addCell(label);
label = new Label(1,i,"user");
sheet.addCell(label);
label = new Label(2,i,"男");
sheet.addCell(label);
}
// 寫入 并在最后關(guān)閉流
workbook.write();
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
導(dǎo)入:
public class JxlReadExcel {
public static void main(String[] args) {
try {
// 創(chuàng)建 Workbook
Workbook workbook = Workbook.getWorkbook(new File("d:/jxl.xls"));
// 獲取工作表sheet
Sheet sheet = workbook.getSheet(0);
// 獲取數(shù)據(jù)
for (int i = 0; i < sheet.getRows(); i++) {// 獲取行
for (int j = 0; j < sheet.getColumns(); j++) {// 獲取列
Cell cell = sheet.getCell(j,i);
System.out.print(cell.getContents() + " ");// 得到單元格的內(nèi)容
}
System.out.println();
}
workbook.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
到此,代碼可直接部署運行,希望可以幫助到你~
總結(jié)
到此這篇關(guān)于Java實現(xiàn)導(dǎo)入導(dǎo)出Excel文件的方法(poi,jxl)的文章就介紹到這了,更多相關(guān)java實現(xiàn)導(dǎo)入導(dǎo)出excel文件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
SpringBoot淺析緩存機(jī)制之Ehcache?2.x應(yīng)用
EhCache?是一個純Java的進(jìn)程內(nèi)緩存框架,具有快速、精干等特點。它是Hibernate中的默認(rèn)緩存框架。Ehcache已經(jīng)發(fā)布了3.1版本。但是本文的講解基于2.x版本2022-08-08
SpringBoot整合redis中的JSON序列化文件夾操作小結(jié)
在我們?nèi)粘5捻椖块_發(fā)中,使用redis作為緩存,來提高系統(tǒng)訪問速度和緩解系統(tǒng)壓力,在使用中遇到幾個問題,本文給大家詳細(xì)總結(jié)下,對SpringBoot整合redis?JSON序列化相關(guān)知識感興趣的朋友一起看看吧2022-02-02
Java NIO 文件通道 FileChannel 用法及原理
這篇文章主要介紹了Java NIO 文件通道 FileChannel 用法和原理,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-01-01
RestTemplate使用不當(dāng)引發(fā)的問題及解決
這篇文章主要介紹了RestTemplate使用不當(dāng)引發(fā)的問題及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-10-10

