zoukankan      html  css  js  c++  java
  • 使用jxl.jar操作Excel

    在工程的build path中添加jxl.jar,网址:http://www.andykhan.com/jexcelapi/

      1 import java.io.BufferedReader;
      2 import java.io.File;
      3 import java.io.FileInputStream;
      4 import java.io.IOException;
      5 import java.io.InputStreamReader;
      6 import jxl.Workbook;
      7 import jxl.write.Label;
      8 import jxl.write.WritableSheet;
      9 import jxl.write.WritableWorkbook;
     10 
     11 /**
     12  * 将错误码的描述信息导入到表格中
     13  */
     14 public class ErrorsToExcel {
     15     //错误码文件的默认编码格式
     16     private String defaultEncoding = "gb2312";
     17     
     18     private String errorsXls = "errorMessage_batch_template.xls";
     19     private String errorsSrcFile = "error-messages.properties";
     20     
     21     //写入错误码的列
     22     private int errorCodeIndex = 1;
     23     //要写入错误描述的表格的列
     24     private int[] errorDescIndexs = {5,6};
     25     
     26     /**
     27      * 将错误码的相关数据写入到给定的Excel中
     28      */
     29     public boolean appendErrorsToXls(){
     30         boolean flag = true;
     31         
     32         Workbook book = null;
     33         WritableWorkbook writableWorkbook = null;
     34         
     35         try{
     36             File excelFile = new File(errorsXls);
     37             if(!excelFile.exists()){
     38                 System.out.println("要导入的Excel模板不存在");
     39                 return false;
     40             }
     41             
     42             //获取可写入的Excel对象
     43             book = Workbook.getWorkbook(excelFile);
     44             writableWorkbook = Workbook.createWorkbook(excelFile, book);
     45             
     46             //获取可写入的表格对象
     47             WritableSheet targetSheet = writableWorkbook.getSheet(0);
     48             
     49             //添加数据
     50             if(!appendDataToSheet(targetSheet))
     51                 flag = false;
     52             
     53             //将表格中的数据写入Excel中
     54             writableWorkbook.write();
     55             
     56         }catch(Exception e){
     57             System.out.println("将错误码放到Excel时出错");
     58             flag = false;
     59         }finally{
     60             if(book!=null){
     61                 book.close();
     62             }
     63             if(writableWorkbook!=null){
     64                 try {
     65                     writableWorkbook.close();
     66                 } catch (Exception e) {
     67                     e.printStackTrace();
     68                 }
     69             }
     70         }
     71         
     72         return flag;
     73     }
     74     
     75     /**
     76      * 将数据写入到表格Sheet中
     77      * 
     78      * @param targetSheet 要写入数据的表格
     79      * @return true表示写入成功  false表示失败
     80      * @throws IOException
     81      */
     82     private boolean appendDataToSheet(WritableSheet targetSheet) throws IOException{
     83         boolean flag = true;
     84         File file = null;
     85         
     86         file = new File(errorsSrcFile);
     87         
     88         if(!file.exists()){
     89             System.out.println("错误码源文件不存在");
     90             return false;
     91         }
     92         
     93         //进行编码格式的转换
     94         InputStreamReader streamReader = new InputStreamReader(new FileInputStream(file), defaultEncoding);
     95         BufferedReader reader = new BufferedReader(streamReader);
     96         String nextLine = "";
     97         
     98         int row = 1;
     99         
    100         //处理格式
    101         while((nextLine=reader.readLine())!=null){
    102             String[] codeDescs = nextLine.split("=");
    103             if(codeDescs.length<=1){    //非错误码内容行
    104                 continue;
    105             }
    106             
    107             try{
    108                 //插入错误码单元格
    109                 Label codeLabel = generateLabel(errorCodeIndex-1, row, codeDescs[0]);
    110                 targetSheet.addCell(codeLabel);
    111                 
    112                 //插入描述信息单元格
    113                 for(int j=0; j<errorDescIndexs.length; ++j ){
    114                     Label descLabel = generateLabel(errorDescIndexs[j]-1, row, codeDescs[1]);
    115                     targetSheet.addCell(descLabel);
    116                 }
    117             }catch(Exception e){
    118                 System.out.println("插入单元格信息出错");
    119             }
    120             
    121             row++;
    122         }
    123         
    124         return flag;
    125     }
    126     
    127     private Label generateLabel(int col, int row, String contents){
    128         //Label的构造函数中是列序号在前,行序号在后
    129         return new Label(col, row, contents);
    130     }
    131 
    132     public String getErrorsXls() {
    133         return errorsXls;
    134     }
    135     public void setErrorsXls(String errorsXls) {
    136         this.errorsXls = errorsXls;
    137     }
    138     public String getErrorsSrcFile() {
    139         return errorsSrcFile;
    140     }
    141     public void setErrorsSrcFile(String errorsSrcFile) {
    142         this.errorsSrcFile = errorsSrcFile;
    143     }
    144     
    145     public static void main(String[] args){
    146         ErrorsToExcel transformer = new ErrorsToExcel();
    147         
    148         if(transformer.appendErrorsToXls()){
    149             System.out.println("导入Excel成功");
    150         }else{
    151             System.out.println("导入Excel失败");
    152         }
    153     }
    154 }

    遇到的奇葩问题

    在Java工程中使用jxl时,一切正常。但是,日后将相应文件迁移到Spring MVC环境中使用时(且将jxl.jar加到了工程的build path中),但是加载工程时,每次调用到使用jxl的类时,都会报错jxl/write/writableCell类不存在;

    解决方式:将jxl.jar放到WEB-INF/lib下解决;

  • 相关阅读:
    C语言函数sscanf()的用法(转)
    GDB基本命令(整合)(转)
    单元命中率与字节命中率
    rpm安装找不到.so库文件(linux动态库连接的相关知识)(转)
    Linux下的tar压缩解压缩命令详解(转)
    Linux系统如何查看版本信息
    Linux /bin, /sbin, /usr/bin, /usr/sbin 区别(转)
    rsync问题-connection refused(111)、Unknown module
    转: 浅析Fusion-IO和Intel SSD
    转: 从0到1的电商架构应该怎么做?
  • 原文地址:https://www.cnblogs.com/-crazysnail/p/3923099.html
Copyright © 2011-2022 走看看