Android/Java使用Jxl解析excel文件

来源:互联网 发布:怎么用网络连接打印机 编辑:程序博客网 时间:2024/04/24 14:21
Jxl wiki:
https://en.wikipedia.org/wiki/JXL_(API)

Jxl jar download:
http://mvnrepository.com/artifact/net.sourceforge.jexcelapi/jxl/2.6.12
备份一份:
链接: https://pan.baidu.com/s/1nuEQxux 密码: 47bw

wiki中给出了一个完整的使用Jxl的demo,代码如下:


import java.io.File;import jxl.Workbook;import jxl.write.WritableSheet;import jxl.write.WritableWorkbook;import jxl.write.Label;import jxl.write.WriteException;public class dataSheet {    static Workbook wbook;    static WritableWorkbook wwbCopy;    static String ExecutedTestCasesSheet;    static WritableSheet shSheet;       public void readExcel()    {    try{    wbook = Workbook.getWorkbook(new File("path\\testSampleData.xls"));    wwbCopy = Workbook.createWorkbook(new File("path\\testSampleDataCopy.xls"), wbook);    shSheet = wwbCopy.getSheet(0);    }    catch(Exception e)    {        e.printStackTrace();    }    }       public void setValueIntoCell(String strSheetName,int iColumnNumber, int iRowNumber,String strData) throws WriteException    {        WritableSheet wshTemp = wwbCopy.getSheet(strSheetName);        Label labTemp = new Label(iColumnNumber, iRowNumber, strData);                       try {            wshTemp.addCell(labTemp);             }            catch (Exception e)            {                e.printStackTrace();            }    }       public void closeFile()    {        try {            // Closing the writable work book            wwbCopy.write();            wwbCopy.close();            // Closing the original work book            wbook.close();        } catch (Exception e)        {            e.printStackTrace();        }    }       public static void main(String[] args) throws WriteException    {        dataSheet ds = new dataSheet();        ds.readExcel();        ds.setValueIntoCell("sheet1", 5, 1, "PASS");        ds.setValueIntoCell("sheet1", 5, 2, "FAIL");        ds.setValueIntoCell("sheet1", 5, 3, "PASS");        ds.closeFile();    }}

这个版本的jar以及demo实际测试过,可以使用,需要注意:
(1)各个类与excel对应的关系:
Workbook:excel文件
Sheet:excel中的各个sheet,使用Workbook.getSheets()得到
Cell:excel中的某个Sheet中的一个数据单元,可以通过Sheet.getColumn(int)/getRow(int)这两个api得到某一列或者某一行的数据,返回类型是Cell[]。通过Cell.getContents()得到内容String
(2)实际使用中遇到的问题:
问题1:用一个5000+行的excel做测试,按照demo的使用方法,在一次readExcel()/closeExcel()之间读取全部的Cell,发现会有String数据丢失。怀疑是jxl内部数据处理上面没有做大数据量的优化。尝试采用窗口,每次readExcel()/closeExcel()之间读取200行数据,数据丢失问题不再出现。以后如果有时间,详细研究一下源代码。
问题2:目前我只在xls格式上调试成功,即微软excel97-2003版的格式,如果是其他版本的格式,可以“另存为xls”转化格式之后使用。
0 0