java通过jxl解析Excel文件

package com.util;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;
 
/** 
 * JAVA 操作 excel 中的 .xls文件格式
 * @author dtb
 * 
 */
public class ExcelUtil {
     
    /** 工作表*/
    private Workbook rwb;
     
    /** 写操作表*/
    private WritableWorkbook wwb;
     
    public ExcelUtil(){}
     
    /**
     * 构造函数
     * @param fileName - 文件名
     */
    public ExcelUtil(String fileName) {
        try {
            rwb = Workbook.getWorkbook(new FileInputStream(fileName));
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
     
    /**
     * 静态工厂方法,返回读操作的ExcelUtil对象
     * @param fileName - 文件名
     * @param fileName - 文件流,如果文件流不等于null,直接使用
     * @return this
     */
    public static ExcelUtil getReadExcelUtil(String fileName,InputStream is) {
        ExcelUtil eu = new ExcelUtil();
        try {
        	if(is != null){
        		eu.rwb = Workbook.getWorkbook(is);
        	}else{
        		eu.rwb = Workbook.getWorkbook(new FileInputStream(fileName));
        	}
        } catch (BiffException e) {
            e.printStackTrace();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return eu;
    }
     
    /**
     * 静态工厂方法,返回写操作的ExcelUtil对象
     * @param fileName - 文件名
     * @return this
     */
    public static ExcelUtil getWriteExcelUtil(String fileName) {
        ExcelUtil eu = new ExcelUtil();
        try {
            eu.wwb = Workbook.createWorkbook(new FileOutputStream(fileName));
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return eu;
    }
     
    /**
     * 读取给定.xls文件的给定工作表
     * @param sheet - 工作表
     * @param sheetLen - 要读的列数集合(索引从0开始)
     * @return - String[] 返回读到的数组
     */
    public List<String[]> readExcel(int sheet, int[] needSheets) {
        sheet = sheet < 0 ? 0 : sheet;
        List<String[]> list = new ArrayList<String[]>();
        Sheet[] sheets = rwb.getSheets();
        int sheetsLen = sheets.length;
        //判断要处理的工作表是否存在
        if(sheetsLen < sheet + 1) {
            return list;
        }
        //获得指定Sheet含有的行数
        Sheet rs = rwb.getSheet(sheet);
        int num = rs.getRows();
        //循环读取数据
        for(int i=0;i<num;i++) {
            //得到第i行的数据..返回cell数组
            Cell[] cell = rs.getRow(i);
            //装载读取数据的集合
            String[] results = new String[needSheets.length];
            for(int j = 0; j < needSheets.length && j < cell.length; j++) {
                results[j] = cell[needSheets[j]].getContents();
            }
            list.add(results);
        }
        return list;
    }
     
    /**
     * 读取文件某工作表的第N列
     * @param sheet - 工作表
     * @param rowNum - 列数(索引从0开始)
     * @return - List<String>
     */
    public List<String> readExcelList(int sheet, int listNum) {
        listNum = listNum < 0 ? 0 : listNum;
        List<String> list = new ArrayList<String>();
        try {
            //获得所有的工作表数
            Sheet[] sheets = rwb.getSheets();
            int sheetsLen = sheets.length;
            //判断要处理的工作表是否存在
            if(sheetsLen < sheet) {
                list.add("no such sheet!");
                return list;
            }
            //获得指定Sheet含有的行数
            Sheet rs = rwb.getSheet(sheet);
            int num = rs.getRows();
            //循环读取数据
            for(int i=0;i<num;i++) {
                Cell[] cell = rs.getRow(i);
                if(listNum + 1 <= cell.length) {
                    list.add(cell[listNum].getContents());
                }
            }
            return list;
        } catch(Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
     
    /**
     * 读取给定工作表指定列数的数据
     * @param sheet - 工作表
     * @param start - 读取的开始列数(start >= 0)
     * @param len - 读取的列数
     * @return - List<String[]>
     */
    public List<String[]> readExcelLists(int sheet, int start, int len){
        start = start < 0 ? 0 : start;
        if(len <= 0) {
            return null;
        }
        List<String[]> list = new ArrayList<String[]>();
        try {
            //获得总 Sheets(所有的工作表)
            Sheet[] sheets = rwb.getSheets();
            int sheetsLen = sheets.length;
            //判断要处理的工作表是否存在
            if(sheetsLen == 0) {
                String[] results = new String[len];
                results[0] = "no such sheet!";
                list.add(results);
                return list;
            }
            //获得指定Sheet含有的行数
            Sheet rs = rwb.getSheet(sheet);
            int num = rs.getRows();
            //循环读取数据
            for(int i=0;i<num;i++) {
                //得到第i行的数据..返回cell数组
                Cell[] cell = rs.getRow(i);
                //装载读取数据的集合
                String[] results = new String[len];
                for(int j = 0; j < len; j++) {
                    int need = start + j;
                    if(need <= cell.length) {
                        results[j] = cell[need].getContents();
                    }
                }
                list.add(results);
            }
            return list;
        } catch(Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
     
    /**
     * 读取给定工作表,m行,n列对应的字符值
     * @param sheet - 工作表
     * @param lineNum - 读取的行
     * @param listNum - 读取的列
     * @return - String 该行该列对应的字符串
     */
    public String readString(int sheet, int lineNum, int listNum) {
        if(lineNum < 0 || listNum < 0) {
            return null;
        }
        try {
            //获得总 Sheets(所有的工作表)
            Sheet[] sheets = rwb.getSheets();
            int sheetsLen = sheets.length;
            //判断要处理的工作表是否存在
            if(sheetsLen < sheet + 1) {
                return null;
            }
            //获得指定Sheet含有的行数
            Sheet rs = rwb.getSheet(sheet);
            if(lineNum + 1 > rs.getRows()) {
                return null;
            }
             
            //获取m行,n列的值 
            return rs.getCell(lineNum, listNum).getContents();
        } catch(Exception ex) {
            ex.printStackTrace();
            return null;
        }
    }
     
    /**
     * 以文本方式,将数据写入到excel表中
     * @param sheetName - 工作表名
     * @param sheet - 工作表索引 从0开始
     * @param labels - 工作表目录(目录可以为null,为null时,内容从第一行开始)
     * @param sources - 工作表内容(元素)
     */
    public void writeExcel(String sheetName, int sheet, String[] labels, List<String[]> sources) {
        //创建Excel工作表
        WritableSheet ws = wwb.createSheet(sheetName, sheet);
         
        int i = 0; // 行索引
        Label label; 
        try {
            //添加目录Label
            if (labels != null && labels.length > 0) {
                for (int j = 0; j < labels.length; j++) {
                    label = new Label(j, i, labels[j]);
                    ws.addCell(label);
                }
                i++;
            }
             
            //添加元素
            if (sources != null && !sources.isEmpty()) {
                for (String[] source : sources) {
                    int j = 0;
                    for (String s : source) {
                        label = new Label(j++, i, s);
                        ws.addCell(label);
                    }
                    i++;
                }
            }
            wwb.write(); // 写文件
            wwb.close(); // 关闭文件
        } catch (RowsExceededException e) {
            e.printStackTrace();
        } catch (WriteException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    
    
    public static void main(String[] args) {
        ExcelUtil eu = ExcelUtil.getReadExcelUtil("E:\\邮件地址列表模版.xls",null);
        int[] needSheets = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14};
         
        int sheet = 0;
        List<String[]> listStr = eu.readExcel(sheet, needSheets);
        boolean doit = false;
        if(listStr != null && !listStr.isEmpty()) {
            for(String[] strs : listStr) {
            	System.out.println(strs[0]+" "+strs[10]);
                
            }
        }
    }
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值