用jxl读Excel文件

    技术2022-05-20  31

    用jxl读Excel文件

    JXL (Java Excel API)是一个用来动态读写Excel文件的开源框架,利用它可以在任何支持Java的操作系统上动态读写Excel文件。JXL 的主页是:http://www.andykhan.com/jexcelapi/,可以在这里下载到它的最新的版本。 你可以分别通过如下命令 java -jar jxl .jar -xml test.xls java -jar jxl .jar -cvs test.xls 以xml和cvs格式查看test.xls,这是因为JXL 作者实现了一个用来演示的jxl .demo.Demo的类。

    当然我们使用JXL 主要是用它来动态读写Excel文件。现在就来看看JXL 在对Excel的读和写上都提供了那些支持。 先来看看Excel文件中都有写上面对象 1 文件对象 2工作簿对象 3 单元格对象。 相应的在JXL 中就有Workbook,Sheet ,Cell 。通过这三个对象我们就可以实现Excel文件的读取工作。 我们先想想一下读取步骤,不管是什么样的Excel操作框架必定都要经历 1选取Excel文件,2选择工作簿,3选择Cell,4读取信息。

     

     

    Java代码 public   static  List<Map<String, String>> readExcelFile(String filePath, int  sheetNum){           List<Map<String, String>> ls = new  ArrayList<Map<String,String>>();           Workbook book=null ;           try {               //读Excel文件                book=Workbook.getWorkbook(new  File(filePath));               //获得工作表个数                Sheet sheet=book.getSheet(sheetNum);               for  ( int  i =  0 ; i < sheet.getRows(); i++) {                   //获得行                    Cell[] row = sheet.getRow(i);                   Map<String, String> rowMap=new  HashMap<String, String>();                   for  ( int  j =  0 ; j < row.length; j++) {                       //获得单元格内容                        String content=row[j].getContents();                       if (StringUtils.isNotBlank(content)){                           //因为从0开始,所以要+1                            rowMap.put(String.valueOf(j+1 ),content);                       }                   }                   if (!rowMap.isEmpty()){                       ls.add(rowMap);                   }               }           }catch  (BiffException e) {               e.printStackTrace();           }catch  (IOException e) {               e.printStackTrace();           }finally {               if (book!= null ){                   book.close();               }           }           return  ls;       }   public static List<Map<String, String>> readExcelFile(String filePath,int sheetNum){ List<Map<String, String>> ls = new ArrayList<Map<String,String>>(); Workbook book=null; try{ //读Excel文件 book=Workbook.getWorkbook(new File(filePath)); //获得工作表个数 Sheet sheet=book.getSheet(sheetNum); for (int i = 0; i < sheet.getRows(); i++) { //获得行 Cell[] row = sheet.getRow(i); Map<String, String> rowMap=new HashMap<String, String>(); for (int j = 0; j < row.length; j++) { //获得单元格内容 String content=row[j].getContents(); if(StringUtils.isNotBlank(content)){ //因为从0开始,所以要+1 rowMap.put(String.valueOf(j+1),content); } } if(!rowMap.isEmpty()){ ls.add(rowMap); } } }catch (BiffException e) { e.printStackTrace(); }catch (IOException e) { e.printStackTrace(); }finally{ if(book!=null){ book.close(); } } return ls; }

     Cell提供了一个getType方法能够返回单元格的类型信息,同时JXL 提供了一个CellType类用来预设Excel中的类型信息,而且JXL 提供了一些Cell类的子类用来分别用来表示各种类型的单元格,如LabelCell,NumberCell,DateCell分别表示字符、数值、日期类型的单元格。所以我们可以这样写: if (c2.getType() == CellType.NUMBER) {   NumberCell nc = (NumberCell) c2;   numberb2 = nc.getValue(); }

    如果你是要读取Excel中的图片,那么可以用Sheet的getDrawing(int i)方法返回一个Image对象,通过Image对象的 getImageData()或者getImageFile()即可访问到你需要的图片。 如过你是要把图片写入到Excel中,那么可以用WritableSheet的addImage(WritableImage image) 方法写入,其中WritableImage可以用构造函数直接构造。 (WritableImage(double x, double y, double width, double height, java.io.File image)


    最新回复(0)