導航:首頁 > 編程大全 > java讀取excel文件導入資料庫

java讀取excel文件導入資料庫

發布時間:2024-09-22 23:29:48

java項目文件導入導出-EasyExcel的使用

後台管理系統中,Excel文件的導入導出功能十分常見,此功能能有效簡化操作流程,提升工作效率。Java中處理Excel的工具有ApachePoi、Jxl、EasyPoi和EasyExcel。EasyExcel和EasyPoi基於ApachePoi開發,並對其問題進行了優化。每個工具都有優缺點,應根據項目需求選擇。

一、導入依賴(根據項目實際情況導入,避免依賴沖突。以下為springboot單元測試環境下的依賴)

二、創建實體對象,與Excel表格對應

三、創建層或service層,將Excel數據存儲到資料庫。本次測試未使用資料庫,可根據需求修改代碼

四、自定義監聽器,與實體對象對應,後期可使用泛型定義萬能監聽器,避免重復定義

五、讀取數據並保存到資料庫

1、讀取Excel文件

2、讀取Excel文件代碼

3、輸出結果(直接列印數據)

六、將資料庫數據寫入Excel表格(使用假數據簡化流程)

1、寫入文件代碼

2、寫入結果,使用EasyExcel註解設置列寬,或根據需求動態設置列寬

② 從excel表格讀取數據用Java代碼實現批量上傳寫入資料庫

java操作Excel的一種方法:在開源世界中,有兩套比較有影響的API可供使用,一個是POI,一個是jExcelAPI。其中jExcelAPI是一個韓國程序員的作品,雖然沒有POI那樣血統高貴,但是在使用過程中,感覺簡單方便,對中文支持非常好,功能也比較強大。它的下載地址是: http://www.andykhan.com/jexcelapi/ 當前的最高版本是2.4。作者的網站上對它的特徵有如下描述:

● 支持Excel 95-2000的所有版本
● 生成Excel 2000標准格式
● 支持字體、數字、日期操作
● 能夠修飾單元格屬性
● 支持圖像和圖表

搭建環境

將下載後的文件解包,得到jxl.jar,放入classpath,安裝就完成了。

基本操作

一、創建文件

擬生成一個名為「測試數據.xls」的Excel文件,其中第一個工作表被命名為「第一頁」,大致效果如下:

代碼(CreateXLS.java):

//生成Excel的類
import java.io.*;
import jxl.*;
import jxl.write.*;

public class CreateXLS
{
public static void main(String args[])
{
try
{
//打開文件
WritableWorkbook book=
Workbook.createWorkbook(new File(「測試.xls」));

//生成名為「第一頁」的工作表,參數0表示這是第一頁
WritableSheet sheet=book.createSheet(「第一頁」,0);

//在Label對象的構造子中指名單元格位置是第一列第一行(0,0)
//以及單元格內容為test
Label label=new Label(0,0,」test」);

//將定義好的單元格添加到工作表中
sheet.addCell(label);

/*生成一個保存數字的單元格
必須使用Number的完整包路徑,否則有語法歧義
單元格位置是第二列,第一行,值為789.123*/
jxl.write.Number number = new jxl.write.Number(1,0,789.123);
sheet.addCell(number);

//寫入數據並關閉文件
book.write();
book.close();

}catch(Exception e)
{
System.out.println(e);
}
}
}

編譯執行後,會在當前位置產生一個Excel文件。

三、讀取文件

以剛才我們創建的Excel文件為例,做一個簡單的讀取操作,程序代碼如下:

//讀取Excel的類
import java.io.*;
import jxl.*;

public class ReadXLS
{
public static void main(String args[])
{
try
{
Workbook book=
Workbook.getWorkbook(new File(「測試.xls」));

//獲得第一個工作表對象
Sheet sheet=book.getSheet(0);

//得到第一列第一行的單元格
Cell cell1=sheet.getCell(0,0);
String result=cell1.getContents();
System.out.println(result);

book.close();

}catch(Exception e)
{
System.out.println(e);
}
}
}

程序執行結果:test

四、修改文件

利用jExcelAPI可以修改已有的Excel文件,修改Excel文件的時候,除了打開文件的方式不同之外,其他操作和創建Excel是一樣的。下面的例子是在我們已經生成的Excel文件中添加一個工作表:

//修改Excel的類,添加一個工作表
import java.io.*;
import jxl.*;
import jxl.write.*;

public class UpdateXLS
{
public static void main(String args[])
{
try
{
//Excel獲得文件
Workbook wb=Workbook.getWorkbook(new File(「測試.xls」));

//打開一個文件的副本,並且指定數據寫回到原文件
WritableWorkbook book=
Workbook.createWorkbook(new File(「測試.xls」),wb);

//添加一個工作表
WritableSheet sheet=book.createSheet(「第二頁」,1);

sheet.addCell(new Label(0,0,」第二頁的測試數據」));

book.write();
book.close();
}catch(Exception e)
{
System.out.println(e);
}
}
}

執行結果如圖:

高級操作

一、 數據格式化

在Excel中不涉及復雜的數據類型,能夠比較好的處理字串、數字和日期已經能夠滿足一般的應用。

1、 字串格式化

字元串的格式化涉及到的是字體、粗細、字型大小等元素,這些功能主要由WritableFont和WritableCellFormat類來負責。假設我們在生成一個含有字串的單元格時,使用如下語句,為方便敘述,我們為每一行命令加了編號:

WritableFont font1=
new WritableFont(WritableFont.TIMES,16,WritableFont.BOLD); ①

WritableCellFormat format1=new WritableCellFormat(font1); ②

Label label=new Label(0,0,」data 4 test」,format1) ③

其中①指定了字串格式:字體為TIMES,字型大小16,加粗顯示。WritableFont有非常豐富的構造子,供不同情況下使用,jExcelAPI的java-doc中有詳細列表,這里不再列出。

②處代碼使用了WritableCellFormat類,這個類非常重要,通過它可以指定單元格的各種屬性,後面的單元格格式化中會有更多描述。

③處使用了Label類的構造子,指定了字串被賦予那種格式。

在WritableCellFormat類中,還有一個很重要的方法是指定數據的對齊方式,比如針對我們上面的實例,可以指定:

//把水平對齊方式指定為居中
format1.setAlignment(jxl.format.Alignment.CENTRE);

//把垂直對齊方式指定為居中
format1.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);

二、單元格操作

Excel中很重要的一部分是對單元格的操作,比如行高、列寬、單元格合並等,所幸jExcelAPI提供了這些支持。這些操作相對比較簡單,下面只介紹一下相關的API。

1、 合並單元格

WritableSheet.mergeCells(int m,int n,int p,int q);

作用是從(m,n)到(p,q)的單元格全部合並,比如:
WritableSheet sheet=book.createSheet(「第一頁」,0);

//合並第一列第一行到第六列第一行的所有單元格
sheet.mergeCells(0,0,5,0);

合並既可以是橫向的,也可以是縱向的。合並後的單元格不能再次進行合並,否則會觸發異常。

2、 行高和列寬

WritableSheet.setRowView(int i,int height);

作用是指定第i+1行的高度,比如:

//將第一行的高度設為200
sheet.setRowView(0,200); 能夠獲取到java裡面那麼再封裝保存進資料庫也就簡單了,希望這樣可以幫到你。

③ java中怎麼把excel導入資料庫

1、利用Excel第三方工具,將Excel文件讀取到內存中。使用最簡單,方便的工具是apache的poi工具包,自己網上下載http://poi.apache.org/,使用方法網上一搜一大片。

2、如果是對於特別大的excel(大於20M的話),簡單的讀取方法就容易內存溢出了,需要採用流式讀取的方式,參考http://poi.apache.org/spreadsheet/how-to.html#xssf_sax_api

3、將已讀入內存的Excel數據,整理成寫資料庫的數據結構,然後插入資料庫。這部分工作應該不用介紹了,就是基本的資料庫操作方法,與excel無關了

④ 怎麼用java程序把excel導入到mysql資料庫

讀取Excel的第三方工具一般可以用jxl或者poi。jxl比較輕量,poi功能更強大一點。如果數據量較小,推薦jxl,百萬級的推薦poi。
從我代碼中取出來的一部分,你自己參考下吧。
流程就是:
1、創建workbook對象
2、讀取sheet
3、讀取行,循環行讀取列值
4、將列值拼裝成insert語句
5、執行sql
其中要注意的幾個問題是:列值合法驗證,sql語句過長問題(mysql支持的一條sql不能超過1M好像,這個可以配置的)。列值驗證好說,sql語句過長可以循環固定行數分批次執行。整個東西不難,你可以在網上搜索到相關資料。

public void scanXlsx(String path) throws IOException {
log.info("進入Xlsx掃描方法,掃描路徑為:{}", path);
// 初始化文件輸入流
InputStream is = new FileInputStream(path);
// 初始化workbook對象
XSSFWorkbook xssfWorkbook = new XSSFWorkbook(is);

// 定義XLSX行對象
XSSFRow xssfRow;
// 定義XLSX sheet對象
XSSFSheet xssfSheet;
// 獲得sheet數目
int sheet_sum = xssfWorkbook.getNumberOfSheets();
log.info("該excel共有<" + sheet_sum + ">個工作簿!");

// 初始化讀取記錄行數,跳過表頭,默認開始就讀取一行
rows_index = 1;
/*
* 循環遍歷每個工作簿
*/
for (int numSheet = 0; numSheet < sheet_sum; numSheet++) {
log.debug("進入循環讀頁,當前頁為Sheet{}", numSheet + 1);
// 初始化sheet對象
xssfSheet = xssfWorkbook.getSheetAt(numSheet);
// 判斷sheet所在頁內容是否為空
if (xssfSheet == null) {
continue;
}
// 獲得第numSheet個工作表的總行數

rows_sum = xssfSheet.getPhysicalNumberOfRows() - 1;

/*
* 如果工作簿的總行數為0或1,那麼就跳出本次循環,繼續下一個工作簿
*/
if (rows_sum <= 1) {
log.debug("該sheet無有效數據");
continue;
}
// 一次批量插入100條,計算循環次數
int loops = 1;
if (rows_sum % 100 == 0) {
loops = rows_sum / 100;
} else {
loops = rows_sum / 100 + 1;
}
log.debug("循環次數:{}", loops);
// 初始化每個numSheet的成功行數
rows_success = 0;
log.info("第<" + numSheet + ">個工作簿共<" + rows_sum + ">行!");
int m = 0;// 結束條數
int j = 0;// 起始條數
int s = 0;// 起始條數
for (int h = 0; h < loops; h++) {
j = h * 100 + 1;// 開始條數
s = j;
m = (h + 1) * 100 + 1;// 計算結束條數
if (m > rows_sum) {
m = rows_sum;
}
log.info("文件第<" + h + ">次從<" + j + ">行開始讀取,讀取到<" + m + ">行結束");
// 循環遍歷每個sheet的行
out: for (; j < m; j++) {
// 獲得行對象
xssfRow = xssfSheet.getRow(j);
/*
* 遍歷每列的值
*/
for (int i = 0; i < 13; i++) {
// 獲得列值
value = ScanUtils.getValue(xssfRow.getCell(i));
switch (i) {
/*
* 第一列:
*/
case 0:
break;
/*
* 第二列:
*/
case 1:
break;
。。。
default:
break;
}
}
// 增加一條讀取記錄
++rows_index;
}
}
}
is.close();
}

⑤ 如何用java導入Excel數據到資料庫

public static void main(String args[]) throws BiffException, IOException, WriteException{
//1 從Excel文件讀取數據表

//Java Excel API既可以從本地文件系統的一個文件(.xls),也可以從輸入流中讀取Excel數據表。
//讀取Excel數據表的第一步是創建Workbook(術語:工作薄),下面的代碼片段舉例說明了應該如何操作:
//(完整代碼見ExcelReading.java)

try
{
//構建Workbook對象, 只讀Workbook對象
//直接從本地文件創建Workbook
//從輸入流創建Workbook
InputStream is = new FileInputStream("D:/user.xls");
jxl.Workbook rwb = Workbook.getWorkbook(is);

//一旦創建了Workbook,我們就可以通過它來訪問Excel Sheet(術語:工作表)。參考下面的代碼片段:

//獲取第一張Sheet表
Sheet rs = (Sheet) rwb.getSheet(0);
//我們既可能通過Sheet的名稱來訪問它,也可以通過下標來訪問它。如果通過下標來訪問的話,
//要注意的一點是下標從0開始,就像數組一樣。

//一旦得到了Sheet,我們就可以通過它來訪問Excel Cell(術語:單元格)。參考下面的代碼片段:

//獲取第一行,第一列的值
Cell c00 = ((jxl.Sheet) rs).getCell(0, 0);
String strc00 = c00.getContents();

//獲取第一行,第二列的值
Cell c10 = ((jxl.Sheet) rs).getCell(1, 0);
String strc10 = c10.getContents();

//獲取第二行,第二列的值
Cell c11 = ((jxl.Sheet) rs).getCell(1, 1);
String strc11 = c11.getContents();

System.out.println("Cell(0, 0)" + " value : " + strc00 + "; type : " + c00.getType());
System.out.println("Cell(1, 0)" + " value : " + strc10 + "; type : " + c10.getType());
System.out.println("Cell(1, 1)" + " value : " + strc11 + "; type : " + c11.getType());

//如果僅僅是取得Cell的值,我們可以方便地通過getContents()方法,
//它可以將任何類型的Cell值都作為一個字元串返回。示例代碼中Cell(0, 0)是文本型,
//Cell(1, 0)是數字型,Cell(1,1)是日期型,通過getContents(),三種類型的返回值都是字元型。

//如果有需要知道Cell內容的確切類型,API也提供了一系列的方法。參考下面的代碼片段:

String strcc00 = null;
double strcc10 = 0.00;
Date strcc11 = null;

Cell cc00 = ((jxl.Sheet) rs).getCell(0, 0);
Cell cc10 = ((jxl.Sheet) rs).getCell(1, 0);
Cell cc11 = ((jxl.Sheet) rs).getCell(1, 1);

if(c00.getType() == CellType.LABEL)
{
LabelCell labelc00 = (LabelCell)cc00;
strcc00 = labelc00.getString();
}
if(c10.getType() == CellType.NUMBER)
{
NumberCell numc10 = (NumberCell)cc10;
strcc10 = numc10.getValue();
}
if(c11.getType() == CellType.DATE)
{
DateCell datec11 = (DateCell)cc11;
strcc11 = datec11.getDate();
}

System.out.println("Cell(0, 0)" + " value : " + strcc00 + "; type : " + cc00.getType());
System.out.println("Cell(1, 0)" + " value : " + strcc10 + "; type : " + cc10.getType());
System.out.println("Cell(1, 1)" + " value : " + strcc11 + "; type : " + cc11.getType());

//在得到Cell對象後,通過getType()方法可以獲得該單元格的類型,然後與API提供的基本類型相匹配,
//強制轉換成相應的類型,最後調用相應的取值方法getXXX(),就可以得到確定類型的值。
//API提供了以下基本類型,與Excel的數據格式相對應,如下圖所示:

//每種類型的具體意義,請參見Java Excel API Document。

//當你完成對Excel電子表格數據的處理後,一定要使用close()方法來關閉先前創建的對象,
//以釋放讀取數據表的過程中所佔用的內存空間,在讀取大量數據時顯得尤為重要。參考如下代碼片段:

//操作完成時,關閉對象,釋放佔用的內存空間
rwb.close();

}
catch (Exception e)
{
e.printStackTrace();
}

//Java Excel API提供了許多訪問Excel數據表的方法,在這里我只簡要地介紹幾個常用的方法,
//其它的方法請參考附錄中的Java Excel API Document。

//Workbook類提供的方法

//1. int getNumberOfSheets();
//獲得工作薄(Workbook)中工作表(Sheet)的個數,示例:

jxl.Workbook rwb = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
int sheets = rwb.getNumberOfSheets();

//2. Sheet[] getSheets();
//返回工作薄(Workbook)中工作表(Sheet)對象數組,示例:

jxl.Workbook rwb2 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
Sheet[] sheets2 = (Sheet[]) rwb2.getSheets();

//3. String getVersion();
//返回正在使用的API的版本號,好像是沒什麼太大的作用。

jxl.Workbook rwb3 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
String apiVersion = rwb3.getVersion();

//Sheet介面提供的方法

//1) String getName();
//獲取Sheet的名稱,示例:

jxl.Workbook rwb4 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
jxl.Sheet rs = rwb4.getSheet(0);
String sheetName = rs.getName();

//2) int getColumns()
//獲取Sheet表中所包含的總列數,示例:

jxl.Workbook rwb5 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
jxl.Sheet rs2 = rwb5.getSheet(0);
int rsColumns = rs2.getColumns();

//3) Cell[] getColumn(int column)
//獲取某一列的所有單元格,返回的是單元格對象數組,示例:

jxl.Workbook rwb6 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
jxl.Sheet rs3 = rwb6.getSheet(0);
Cell[] cell = rs3.getColumn(0);

//4) int getRows()
//獲取Sheet表中所包含的總行數,示例:

jxl.Workbook rwb7 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
jxl.Sheet rs4 = rwb7.getSheet(0);
int rsRows = rs4.getRows();

//5) Cell[] getRow(int row)
//獲取某一行的所有單元格,返回的是單元格對象數組,示例子:

jxl.Workbook rwb8 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
jxl.Sheet rs5 = rwb8.getSheet(0);
Cell[] cell5 = rs5.getRow(0);

//6) Cell getCell(int column, int row)
//獲取指定單元格的對象引用,需要注意的是它的兩個參數,第一個是列數,第二個是行數,
//這與通常的行、列組合有些不同。

jxl.Workbook rwb9 = jxl.Workbook.getWorkbook(new File("D:/user.xls"));
jxl.Sheet rs6 = rwb9.getSheet(0);
Cell cell6 = rs6.getCell(0, 0);

閱讀全文

與java讀取excel文件導入資料庫相關的資料

熱點內容
ps入門必備文件 瀏覽:348
以前的相親網站怎麼沒有了 瀏覽:15
蘋果6耳機聽歌有滋滋聲 瀏覽:768
怎麼徹底刪除linux文件 瀏覽:379
編程中字體的顏色是什麼意思 瀏覽:534
網站關鍵詞多少個字元 瀏覽:917
匯川am系列用什麼編程 瀏覽:41
筆記本win10我的電腦在哪裡打開攝像頭 瀏覽:827
醫院單位基本工資去哪個app查詢 瀏覽:18
css源碼應該用什麼文件 瀏覽:915
編程ts是什麼意思呢 瀏覽:509
c盤cad佔用空間的文件 瀏覽:89
不銹鋼大小頭模具如何編程 瀏覽:972
什麼格式的配置文件比較主流 瀏覽:984
增加目錄word 瀏覽:5
提取不相鄰兩列數據如何做圖表 瀏覽:45
r9s支持的網路制式 瀏覽:633
什麼是提交事務的編程 瀏覽:237
win10打字卡住 瀏覽:774
linux普通用戶關機 瀏覽:114

友情鏈接