转自:aking21alinjuju:《Java开发有一说一》——Java读取Excel文件中的数据
在日常工作中,我们常常会进行文件读写操作,除去我们最常用的纯文本文件读写,更多时候我们需要对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 jxl.Workbook;
- import jxl.read.biff.BiffException;
- public class GetExcelInfo {
- public static void 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对象
- public void 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;
- public class GetExcelInfo {
- public static void 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对象
- public void 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++) {
- // sheet.getColumns()返回该页的总列数
- for (int j = 0; j < sheet.getColumns(); j++) {
- String cellinfo = sheet.getCell(j, i).getContents();
- // 将从Excel中读取的数据写入到txt中
- out.println(cellinfo);
- }
- }
- }
- } catch (FileNotFoundException e) {
- e.printStackTrace();
- } catch (BiffException e) {
- e.printStackTrace();
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- try {
- // 记得关闭流
- out.close();
- fw.close();
- // 由于此处用到了缓冲流,如果数据量过大,不进行flush操作,某些数据将依旧
- // 存在于内从中而不会写入文件,此问题一定要注意
- out.flush();
- } catch (IOException e) {
- e.printStackTrace();
- }
- }
- }
- }
下面我们来一起对Java读取Excel流程做一个总结:
1、打开工作文件Workbook,在此之前先用java的io流创建或者读取文件
2、打开工作表Sheet
3、读行,然后读列(行和列是从0开始的)
4、进行数据进行操作
本次Java读取Excel文件数据暂时介绍到这,下期将会继续讲解通过Java程序将数据写入Excel,以及如何读取及处理Excel中的合并单元格等相关问题,咱们下期再见!