Java讀取、寫入、處理Excel檔案中的資料
阿新 • • 發佈:2019-01-27
在日常工作中,我們常常會進行檔案讀寫操作,除去我們最常用的純文字檔案讀寫,更多時候我們需要對Excel中的資料進行讀取操作,本文將介紹Excel讀寫的常用方法,希望對大家學習Java讀寫Excel會有幫助。
在開始進行Java讀寫Excel前,我們需要先下一個jxl的jar包,這個jar包中提供了相關讀寫Excel的方法,在百度裡所搜一下jxl.jar下載就會出現很多下載地址了,這裡不再累述。隨後我們將jxl.jar放到classpath下或者在工程的buildpath中新增jxl.jar後,便可以開始Java讀寫Excel的神祕之旅了。
1、Java讀取Excel資料
首先,建立一個xls檔案(如:jxltest.xls),然後在檔案中新增一些資料,Excel檔案建立完成後,我們便可以開始寫程式碼讀取了:
程式碼如下:
- package jxl.zhanhj;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.io.InputStream;
- import jxl.Sheet;
-
import
- import jxl.read.biff.BiffException;
- publicclass GetExcelInfo {
- publicstaticvoid main(String[] args) {
- GetExcelInfo obj = new GetExcelInfo();
- // 此處為我建立Excel路徑:E:/zhanhj/studysrc/jxl下
- File file = new File("E:/zhanhj/studysrc/jxl/getExcleinfo.xls");
-
obj.readExcel(file);
- }
- // 去讀Excel的方法readExcel,該方法的入口引數為一個File物件
- publicvoid readExcel(File file) {
- try {
- // 建立輸入流,讀取Excel
- InputStream is = new FileInputStream(file.getAbsolutePath());
- // jxl提供的Workbook類
- Workbook wb = Workbook.getWorkbook(is);
- // Excel的頁籤數量
- int sheet_size = wb.getNumberOfSheets();
- for (int index = 0; index < sheet_size; index++) {
- // 每個頁籤建立一個Sheet物件
- Sheet sheet = wb.getSheet(index);
- // sheet.getRows()返回該頁的總行數
- for (int i = 0; i < sheet.getRows(); i++) {
- // sheet.getColumns()返回該頁的總列數
- for (int j = 0; j < sheet.getColumns(); j++) {
- String cellinfo = sheet.getCell(j, i).getContents();
- System.out.println(cellinfo);
- }
- }
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (BiffException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
上面這個例子是一個很簡單讀取Excel並將各單元格的資料列印到控制檯上,更多Excel操作方法,請參加jxl API。
下面我們再對上面的例子進行一個小小的擴充套件:
1、讀取一個目錄下的所有Excel檔案
2、讀取的每個Excel檔案的資料寫入到不同的txt中
程式碼如下:
- package jxl.zhanhj;
- import java.io.File;
- import java.io.FileInputStream;
- import java.io.FileNotFoundException;
- import java.io.FileWriter;
- import java.io.IOException;
- import java.io.InputStream;
- import java.io.PrintWriter;
- import jxl.Sheet;
- import jxl.Workbook;
- import jxl.read.biff.BiffException;
- publicclass GetExcelInfo {
- publicstaticvoid main(String[] args) {
- GetExcelInfo obj = new GetExcelInfo();
- // 此處路徑指定到目錄而不是單個檔案
- File file = new File("E:/zhanhj/studysrc/jxl");
- if (file.isDirectory()) {
- File[] files = file.listFiles();
- for (File f : files)
- // 如果還存在子目錄則繼續讀取子目錄下的Excel檔案
- if (f.isDirectory()) {
- File[] subfiles = f.listFiles();
- for (File fi : subfiles) {
- // 對檔案進行過濾,只讀取Excel檔案,非Excel檔案不讀取,否則會出錯
- if (fi.getName().indexOf(".xls") > 0) {
- obj.readExcelWrite2TXT(fi);
- }
- }
- } else {
- // 對檔案進行過濾,只讀取Excel檔案,非Excel檔案不讀取,否則會出錯
- if (f.getName().indexOf(".xls") > 0) {
- obj.readExcelWrite2TXT(f);
- }
- }
- }
- }
- // 去讀Excel的方法readExcel,該方法的入口引數為一個File物件
- publicvoid readExcelWrite2TXT(File file) {
- // 建立檔案輸出流
- FileWriter fw = null;
- PrintWriter out = null;
- try {
- // 指定生成txt的檔案路徑
- String fileName = file.getName().replace(".xls", "");
- fw = new FileWriter(file.getParent() + "/" + fileName + ".txt");
- out = new PrintWriter(fw);
- // 建立輸入流,讀取Excel
- InputStream is = new FileInputStream(file.getAbsolutePath());
- // jxl提供的Workbook類
- Workbook wb = Workbook.getWorkbook(is);
- // Excel的頁籤數量
- int sheet_size = wb.getNumberOfSheets();
- for (int index = 0; index < sheet_size; index++) {
- // 每個頁籤建立一個Sheet物件
- Sheet sheet = wb.getSheet(index);
- // sheet.getRows()返回該頁的總行數
- for (int i = 0; i < sheet.getRows(); i++) {