源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

利用java操作Excel文件的方法

  • 时间:2021-02-10 00:48 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:利用java操作Excel文件的方法
很久以来都想研究一下利用java操作Excel的方法,今天没事,就稍微了解了一下,特总结一下。利用java操作Excel,有个开源的东东-jxl.jar,可以到[url=http://sourceforge.net/projects/jexcelapi/files/]http://sourceforge.net/projects/jexcelapi/files/[/url]下载。 [b]一.读取Excel文件内容 [/b]
[u]复制代码[/u] 代码如下:
/** *//**读取Excel文件的内容      * @param file  待读取的文件      * @return      */     public static String readExcel(File file)...{         StringBuffer sb = new StringBuffer();         Workbook wb = null;         try ...{             //构造Workbook(工作薄)对象             wb=Workbook.getWorkbook(file);         } catch (BiffException e) ...{             e.printStackTrace();         } catch (IOException e) ...{             e.printStackTrace();         }         if(wb==null)             return null;         //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了         Sheet[] sheet = wb.getSheets();         if(sheet!=null&&sheet.length>0)...{             //对每个工作表进行循环             for(int i=0;i<sheet.length;i++)...{                 //得到当前工作表的行数                 int rowNum = sheet[i].getRows();                 for(int j=0;j<rowNum;j++)...{                     //得到当前行的所有单元格                     Cell[] cells = sheet[i].getRow(j);                     if(cells!=null&&cells.length>0)...{                         //对每个单元格进行循环                         for(int k=0;k<cells.length;k++)...{                             //读取当前单元格的值                             String cellValue = cells[k].getContents();                             sb.append(cellValue+" ");                         }                     }                     sb.append(" ");                 }                 sb.append(" ");             }         }         //最后关闭资源,释放内存         wb.close();         return sb.toString();     }
[b]二.写入Excel文件 [/b]这里有很多格式了,比如文本内容加粗,加上某些颜色等,可以参考jxl的api
[u]复制代码[/u] 代码如下:
/**生成一个Excel文件      * @param fileName  要生成的Excel文件名      */     public static void writeExcel(String fileName)...{         WritableWorkbook wwb = null;         try ...{             //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象             wwb = Workbook.createWorkbook(new File(fileName));         } catch (IOException e) ...{             e.printStackTrace();         }         if(wwb!=null)...{             //创建一个可写入的工作表             //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置             WritableSheet ws = wwb.createSheet("sheet1", 0);             //下面开始添加单元格             for(int i=0;i<10;i++)...{                 for(int j=0;j<5;j++)...{                     //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行                     Label labelC = new Label(j, i, "这是第"+(i+1)+"行,第"+(j+1)+"列");                     try ...{                         //将生成的单元格添加到工作表中                         ws.addCell(labelC);                     } catch (RowsExceededException e) ...{                         e.printStackTrace();                     } catch (WriteException e) ...{                         e.printStackTrace();                     }                 }             }             try ...{                 //从内存中写入文件中                 wwb.write();                 //关闭资源,释放内存                 wwb.close();             } catch (IOException e) ...{                 e.printStackTrace();             } catch (WriteException e) ...{                 e.printStackTrace();             }         }     }
注:如果想往一个已经存在的Excel中写入内容,则需按照如下方式进行:
[u]复制代码[/u] 代码如下:
 WritableWorkbook book = null;         try...{             // Excel获得文件             Workbook wb = Workbook.getWorkbook(new File("D:/test.xls"));             // 打开一个文件的副本,并且指定数据写回到原文件             book = Workbook.createWorkbook(new File("D:/test.xls"), wb);             // 添加一个工作表             WritableSheet sheet = book.getSheet("sheet1");             sheet.addCell(new Label(8,3, "第3行第8列新增东西了"));             //TODO 以下部分省略         }catch(Exception e)...{             e.printStackTrace();         }
[b]三.在一个Excel文件中查找是否包含某一个关键字 [/b]
[u]复制代码[/u] 代码如下:
/**搜索某一个文件中是否包含某个关键字      * @param file  待搜索的文件      * @param keyWord  要搜索的关键字      * @return      */     public static boolean searchKeyWord(File file,String keyWord)...{         boolean res = false;         Workbook wb = null;         try ...{             //构造Workbook(工作薄)对象             wb=Workbook.getWorkbook(file);         } catch (BiffException e) ...{             return res;         } catch (IOException e) ...{             return res;         }         if(wb==null)             return res;         //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了         Sheet[] sheet = wb.getSheets();         boolean breakSheet = false;         if(sheet!=null&&sheet.length>0)...{             //对每个工作表进行循环             for(int i=0;i<sheet.length;i++)...{                 if(breakSheet)                     break;                 //得到当前工作表的行数                 int rowNum = sheet[i].getRows();                 boolean breakRow = false;                 for(int j=0;j<rowNum;j++)...{                     if(breakRow)                         break;                     //得到当前行的所有单元格                     Cell[] cells = sheet[i].getRow(j);                     if(cells!=null&&cells.length>0)...{                         boolean breakCell = false;                         //对每个单元格进行循环                         for(int k=0;k<cells.length;k++)...{                             if(breakCell)                                 break;                             //读取当前单元格的值                             String cellValue = cells[k].getContents();                             if(cellValue==null)                                 continue;                             if(cellValue.contains(keyWord))...{                                 res = true;                                 breakCell = true;                                 breakRow = true;                                 breakSheet = true;                             }                         }                     }                 }             }         }         //最后关闭资源,释放内存         wb.close();         return res;     }
[b]四.往Excel中插入图片图标 [/b]插入图片的实现很容易,参看以下代码:
[u]复制代码[/u] 代码如下:
 /** *//**往Excel中插入图片      * @param dataSheet  待插入的工作表      * @param col 图片从该列开始      * @param row 图片从该行开始      * @param width 图片所占的列数      * @param height 图片所占的行数      * @param imgFile 要插入的图片文件      */     public static void insertImg(WritableSheet dataSheet, int col, int row, int width,             int height, File imgFile)...{         WritableImage img = new WritableImage(col, row, width, height, imgFile);         dataSheet.addImage(img);     }
以上代码的注释已经很清楚了,大概也就不用再解释了,我们可以用如下程序验证:
[u]复制代码[/u] 代码如下:
   try ...{             //创建一个工作薄             WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));             //待插入的工作表             WritableSheet imgSheet = workbook.createSheet("Images",0);             //要插入的图片文件             File imgFile = new File("D:/1.png");             //图片插入到第二行第一个单元格,长宽各占六个单元格             insertImg(imgSheet,0,1,6,6,imgFile);             workbook.write();             workbook.close();         } catch (IOException e) ...{             e.printStackTrace();         } catch (WriteException e) ...{             e.printStackTrace();         }
但是jxl只支持png格式的图片,jpg格式和gif格式都不支持 [b]五.插入页眉页脚 [/b]一般的页眉页脚都分为三个部分,左,中,右三部分,利用如下代码可实现插入页眉页脚
[u]复制代码[/u] 代码如下:
   /** *//**向Excel中加入页眉页脚      * @param dataSheet 待加入页眉的工作表      * @param left      * @param center      * @param right      */     public static void setHeader(WritableSheet dataSheet,String left,String center,String right)...{         HeaderFooter hf = new HeaderFooter();         hf.getLeft().append(left);         hf.getCentre().append(center);         hf.getRight().append(right);         //加入页眉         dataSheet.getSettings().setHeader(hf);         //加入页脚         //dataSheet.getSettings().setFooter(hf);     }
我们可以用如下代码测试该方法:
[u]复制代码[/u] 代码如下:
    try ...{             //创建一个工作薄             WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));             //待插入的工作表             WritableSheet dataSheet = workbook.createSheet("加入页眉",0);             ExcelUtils.setHeader(dataSheet, "chb", "2007-03-06", "第1页,共3页");             workbook.write();             workbook.close();         } catch (IOException e) ...{             e.printStackTrace();         } catch (WriteException e) ...{             e.printStackTrace();         }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部