`
yuexiaowen
  • 浏览: 124712 次
  • 性别: Icon_minigender_2
  • 来自: 咸阳
社区版块
存档分类
最新评论

JAVA操作Excel参考

阅读更多

Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。

 

   今天突然翻到了以前的一个测试,好像也是从哪里拷贝修改改过的,注释里有个IBM的链接 http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10,贴上来当作一个入门参考资料吧。

 

Java代码 复制代码
  1. import java.io.File;   
  2. import java.io.IOException;   
  3.   
  4. import jxl.Cell;   
  5. import jxl.HeaderFooter;   
  6. import jxl.Sheet;   
  7. import jxl.Workbook;   
  8. import jxl.format.VerticalAlignment;   
  9. import jxl.read.biff.BiffException;   
  10. import jxl.write.Label;   
  11. import jxl.write.WritableCellFormat;   
  12. import jxl.write.WritableImage;   
  13. import jxl.write.WritableSheet;   
  14. import jxl.write.WritableWorkbook;   
  15. import jxl.write.WriteException;   
  16. import jxl.write.biff.RowsExceededException;   
  17.   
  18. /**  
  19.  * @author cjj 2008-12-22 参考:  
  20.  *         http://www.ibm.com/developerworks/cn/java/l-javaExcel/?ca=j-t10  
  21.  *   
  22.  *   
  23.  */  
  24. public class ExcelUtils   
  25. {   
  26.     /**  
  27.      * 读取Excel文件的内容  
  28.      *   
  29.      * @param file  
  30.      *            待读取的文件  
  31.      * @return  
  32.      */  
  33.     public static String readExcel(final File file)   
  34.     {   
  35.         final StringBuffer sb = new StringBuffer();   
  36.   
  37.         Workbook wb = null;   
  38.         try  
  39.         {   
  40.             //构造Workbook(工作薄)对象      
  41.             wb = Workbook.getWorkbook(file);   
  42.         }   
  43.         catch (final BiffException e)   
  44.         {   
  45.             e.printStackTrace();   
  46.         }   
  47.         catch (final IOException e)   
  48.         {   
  49.             e.printStackTrace();   
  50.         }   
  51.   
  52.         if (wb == nullreturn null;   
  53.   
  54.         //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了      
  55.         final Sheet[] sheet = wb.getSheets();   
  56.   
  57.         if (sheet != null && sheet.length > 0)   
  58.         {   
  59.             //对每个工作表进行循环      
  60.             for (int i = 0; i < sheet.length; i++)   
  61.             {   
  62.                 //得到当前工作表的行数      
  63.                 final int rowNum = sheet[i].getRows();   
  64.                 for (int j = 0; j < rowNum; j++)   
  65.                 {   
  66.                     //得到当前行的所有单元格      
  67.                     final Cell[] cells = sheet[i].getRow(j);   
  68.                     if (cells != null && cells.length > 0)   
  69.                     {   
  70.                         //对每个单元格进行循环      
  71.                         for (int k = 0; k < cells.length; k++)   
  72.                         {   
  73.                             //读取当前单元格的值      
  74.                             final String cellValue = cells[k].getContents();   
  75.                             sb.append(cellValue + "\t");   
  76.                         }   
  77.                     }   
  78.                     sb.append("\r\n");   
  79.                 }   
  80.                 sb.append("\r\n");   
  81.             }   
  82.         }   
  83.         //最后关闭资源,释放内存      
  84.         wb.close();   
  85.         return sb.toString();   
  86.     }   
  87.   
  88.     /**  
  89.      * 生成一个Excel文件  
  90.      *   
  91.      * @param fileName  
  92.      *            要生成的Excel文件名  
  93.      */  
  94.     public static void writeExcel(final String fileName)   
  95.     {   
  96.         WritableWorkbook wwb = null;   
  97.         //格式化   
  98.         final WritableCellFormat totalFormat = new WritableCellFormat();   
  99.         try  
  100.         {   
  101.             //首先要使用Workbook类的工厂方法创建一个可写入的工作薄(Workbook)对象      
  102.             wwb = Workbook.createWorkbook(new File(fileName));   
  103.             //格式化剧中   
  104.             totalFormat.setVerticalAlignment(VerticalAlignment.CENTRE);   
  105.   
  106.         }   
  107.         catch (final IOException e)   
  108.         {   
  109.             e.printStackTrace();   
  110.         }   
  111.         catch (final WriteException e)   
  112.         {   
  113.             e.printStackTrace();   
  114.         }   
  115.         if (wwb != null)   
  116.         {   
  117.             //创建一个可写入的工作表      
  118.             //Workbook的createSheet方法有两个参数,第一个是工作表的名称,第二个是工作表在工作薄中的位置      
  119.             final WritableSheet ws = wwb.createSheet("sheet1"0);   
  120.   
  121.             //下面开始添加单元格      
  122.             for (int i = 0; i < 10; i++)   
  123.             {   
  124.                 for (int j = 0; j < 5; j++)   
  125.                 {   
  126.                     //这里需要注意的是,在Excel中,第一个参数表示列,第二个表示行      
  127.                     final Label labelC = new Label(j, i, "这是第" + (i + 1) + "行,第" + (j + 1) + "列", totalFormat);   
  128.                     try  
  129.                     {   
  130.                         //将生成的单元格添加到工作表中      
  131.                         ws.addCell(labelC);   
  132.                     }   
  133.                     catch (final RowsExceededException e)   
  134.                     {   
  135.                         e.printStackTrace();   
  136.                     }   
  137.                     catch (final WriteException e)   
  138.                     {   
  139.                         e.printStackTrace();   
  140.                     }   
  141.   
  142.                 }   
  143.             }   
  144.   
  145.             try  
  146.             {   
  147.                 //把 单元格(column, row)到单元格(column1, row1)进行合并。   
  148.                 ws.mergeCells(6063);   
  149.                 //从内存中写入文件中      
  150.                 wwb.write();   
  151.                 //关闭资源,释放内存      
  152.                 wwb.close();   
  153.             }   
  154.             catch (final IOException e)   
  155.             {   
  156.                 e.printStackTrace();   
  157.             }   
  158.             catch (final WriteException e)   
  159.             {   
  160.                 e.printStackTrace();   
  161.             }   
  162.         }   
  163.     }   
  164.   
  165.     /**  
  166.      * 搜索某一个文件中是否包含某个关键字  
  167.      *   
  168.      * @param file  
  169.      *            待搜索的文件  
  170.      * @param keyWord  
  171.      *            要搜索的关键字  
  172.      * @return  
  173.      */  
  174.     public static boolean searchKeyWord(final File file, final String keyWord)   
  175.     {   
  176.         boolean res = false;   
  177.   
  178.         Workbook wb = null;   
  179.         try  
  180.         {   
  181.             //构造Workbook(工作薄)对象      
  182.             wb = Workbook.getWorkbook(file);   
  183.         }   
  184.         catch (final BiffException e)   
  185.         {   
  186.             return res;   
  187.         }   
  188.         catch (final IOException e)   
  189.         {   
  190.             return res;   
  191.         }   
  192.   
  193.         if (wb == nullreturn res;   
  194.   
  195.         //获得了Workbook对象之后,就可以通过它得到Sheet(工作表)对象了      
  196.         final Sheet[] sheet = wb.getSheets();   
  197.   
  198.         boolean breakSheet = false;   
  199.   
  200.         if (sheet != null && sheet.length > 0)   
  201.         {   
  202.             //对每个工作表进行循环      
  203.             for (int i = 0; i < sheet.length; i++)   
  204.             {   
  205.                 if (breakSheet) break;   
  206.   
  207.                 //得到当前工作表的行数      
  208.                 final int rowNum = sheet[i].getRows();   
  209.   
  210.                 boolean breakRow = false;   
  211.   
  212.                 for (int j = 0; j < rowNum; j++)   
  213.                 {   
  214.                     if (breakRow) break;   
  215.                     //得到当前行的所有单元格      
  216.                     final Cell[] cells = sheet[i].getRow(j);   
  217.                     if (cells != null && cells.length > 0)   
  218.                     {   
  219.                         boolean breakCell = false;   
  220.                         //对每个单元格进行循环      
  221.                         for (int k = 0; k < cells.length; k++)   
  222.                         {   
  223.                             if (breakCell) break;   
  224.                             //读取当前单元格的值      
  225.                             final String cellValue = cells[k].getContents();   
  226.                             if (cellValue == nullcontinue;   
  227.                             if (cellValue.contains(keyWord))   
  228.                             {   
  229.                                 res = true;   
  230.                                 breakCell = true;   
  231.                                 breakRow = true;   
  232.                                 breakSheet = true;   
  233.                             }   
  234.                         }   
  235.                     }   
  236.                 }   
  237.             }   
  238.         }   
  239.         //最后关闭资源,释放内存      
  240.         wb.close();   
  241.   
  242.         return res;   
  243.     }   
  244.   
  245.     /**  
  246.      * 往Excel中插入图片  
  247.      *   
  248.      * @param dataSheet  
  249.      *            待插入的工作表  
  250.      * @param col  
  251.      *            图片从该列开始  
  252.      * @param row  
  253.      *            图片从该行开始  
  254.      * @param width  
  255.      *            图片所占的列数  
  256.      * @param height  
  257.      *            图片所占的行数  
  258.      * @param imgFile  
  259.      *            要插入的图片文件  
  260.      */  
  261.     public static void insertImg(   final WritableSheet dataSheet,   
  262.                                     final int col,   
  263.                                     final int row,   
  264.                                     final int width,   
  265.                                     final int height,   
  266.                                     final File imgFile)   
  267.     {   
  268.         final WritableImage img = new WritableImage(col, row, width, height, imgFile);   
  269.         dataSheet.addImage(img);   
  270.     }   
  271.   
  272.     /**  
  273.      * 向Excel中加入页眉页脚  
  274.      *   
  275.      * @param dataSheet  
  276.      *            待加入页眉的工作表  
  277.      * @param left  
  278.      * @param center  
  279.      * @param right  
  280.      */  
  281.     public static void setHeader(   final WritableSheet dataSheet,   
  282.                                     final String left,   
  283.                                     final String center,   
  284.                                     final String right)   
  285.     {   
  286.         final HeaderFooter hf = new HeaderFooter();   
  287.         hf.getLeft().append(left);   
  288.         hf.getCentre().append(center);   
  289.         hf.getRight().append(right);   
  290.         //加入页眉      
  291.         dataSheet.getSettings().setHeader(hf);   
  292.         //加入页脚      
  293.         //dataSheet.getSettings().setFooter(hf);      
  294.     }   
  295.   
  296.     //测试   
  297.     public static void main(final String[] arts)   
  298.     {   
  299.   
  300.         //测试写   
  301.         ExcelUtils.writeExcel("test.xls");   
  302.   
  303.         if (false)   
  304.         {   
  305.             //测试插入页眉页脚   
  306.             try  
  307.             {   
  308.                 //创建一个工作薄      
  309.                 final WritableWorkbook workbook = Workbook.createWorkbook(new File("test.xls"));   
  310.                 //待插入的工作表      
  311.                 final WritableSheet dataSheet = workbook.createSheet("加入页眉"0);   
  312.                 ExcelUtils.setHeader(dataSheet, "chb""2007-03-06""第1页,共3页");   
  313.                 workbook.write();   
  314.                 workbook.close();   
  315.             }   
  316.             catch (final IOException e)   
  317.             {   
  318.                 e.printStackTrace();   
  319.             }   
  320.             catch (final WriteException e)   
  321.             {   
  322.                 e.printStackTrace();   
  323.             }   
  324.         }   
  325.   
  326.         if (false)   
  327.         {   
  328.             //测试插入图片   
  329.             try  
  330.             {   
  331.                 //创建一个工作薄      
  332.                 final WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/testxls"));   
  333.                 //待插入的工作表      
  334.                 final WritableSheet imgSheet = workbook.createSheet("Images"0);   
  335.                 //要插入的图片文件      
  336.                 final File imgFile = new File("D:/png");   
  337.                 //图片插入到第二行第一个单元格,长宽各占六个单元格      
  338.                 insertImg(imgSheet, 0166, imgFile);   
  339.                 workbook.write();   
  340.                 workbook.close();   
  341.             }   
  342.             catch (final IOException e)   
  343.             {   
  344.                 e.printStackTrace();   
  345.             }   
  346.             catch (final WriteException e)   
  347.             {   
  348.                 e.printStackTrace();   
  349.             }   
  350.         }   
  351.   
  352.     }   
  353. }  
分享到:
评论

相关推荐

    java操作excel,函数计算

    java是不能提供java调用excel里的函数的,所以我提供这个例子,让大家参考,必须导入jxl.jar包哦!

    最全最实用的Java操作Excel教程

    ### Java操作Excel教程详解 #### 一、POI简介与背景 **Jakarta POI** 是Apache的一个子项目,它的主要目标是处理OLE2对象。POI提供了一组用于操作Microsoft Office文件(如Word和Excel)的Java API。其中,**HSSF*...

    Java操作Excel表两种方式

    POI提供了HSSF(用于旧的BIFF格式,适用于Excel 97-2003)和XSSF(用于新的XML格式,适用于Excel 2007及以上版本)两个接口来操作Excel。 1. **Apache POI(HSSF/XSSF)操作Excel:** - **创建Excel文件:** 可以...

    Java操作Excel和Word

    首先,我们关注的标题"Java操作Excel和Word"涉及到两个主要部分:Excel和Word的API接口。对于Excel,Java中最常用的是Apache POI库,它是一个开源项目,提供了读取、写入Microsoft Office格式文件的能力,包括Excel...

    利用 JAVA 操作 EXCEL 文件

    这篇博文"利用JAVA操作EXCEL文件"很可能是介绍如何使用Java API来读写Excel文件的方法。以下是对这个主题的详细讲解: 1. **Java与Excel交互的库** - **Apache POI**:Apache POI是一个流行的开源项目,提供了API...

    java 操作 excel教程

    ### Java操作Excel教程知识点梳理 #### 一、引言 在日常工作中,Excel作为一种常见的数据存储和处理工具,被广泛应用于各个领域。然而,在需要批量处理大量Excel文件时,手动操作变得不再可行。这时,利用Java编程...

    java实现excel转csv

    在压缩包文件"excelToCsv"中,通常会包含一个示例Java程序,该程序实现了上述步骤,你可以参考它来理解和实践这个过程。通过这个程序,你可以将任意的Excel文件转换为CSV格式,方便后续的数据处理和分析。

    Java对Excel表格的操作

    #### 1.1 JSP操作Excel工具汇总 在Java生态中,处理Excel文档有几种流行的开源解决方案,其中最为知名的有两种:Apache POI 和 JExcelApi (jxl)。 - **Apache POI**: - **简介**:Apache POI 是 Apache Software...

    java导出excel POI jar包

    Java导出Excel是Java开发中常见的需求,尤其是在数据处理和报表生成方面。Apache POI库是Java领域中广泛使用的工具,它允许开发者读写Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。本篇文章将深入讲解...

    jxljar.zip用于java操作Excel表格

    Java操作Excel表格主要依赖于第三方库,如"jxl",这是一个非常流行的库,使得Java开发者可以方便地读取、写入以及修改Excel文件。在本案例中,提供的压缩包"jxljar.zip"中包含的就是这个库的JAR文件,名为"jxljar",...

    java操作excel工作表类库和chm格式的帮助文档

    总结来说,"java操作excel工作表类库和chm格式的帮助文档"提供了使用Java处理Excel文件的工具和参考资料。Apache POI和JExcelAPI提供了强大的Excel操作能力,而CHM格式的帮助文档则作为开发过程中的指南,辅助开发者...

    java的poi生成excel图表demo

    Java的Apache POI库是一个强大的工具,用于读取、创建和修改Microsoft Office格式的文件,尤其是Excel(.xlsx)文档。...这个压缩包中的“EexcelChart”可能是示例代码、测试数据或生成的Excel文件,供用户参考和实践。

    Java操作Excel之Poi视频教程 java1234出品

    本教程“Java操作Excel之Poi视频教程”由java1234出品,旨在深入讲解如何使用Java POI进行Excel处理。 1. **什么是Apache POI?** Apache POI 是一个开源项目,它提供了API,使得Java程序能够处理Microsoft Office...

    java poi 操作Excel

    下面将详细介绍如何使用Java POI来操作Excel以及相关的知识点。 1. **基本概念** - HSSF(Horrible Spreadsheet Format):这是POI库处理Excel 97-2003(.xls)格式的部分。HSSF提供了一套API,可以创建、修改和...

    java导入excel表格

    通过以上步骤,你可以轻松地在Java项目中导入和操作Excel表格。结合源码和工具,可以构建出高效的数据处理系统。在开发过程中,参考Apache POI的官方文档和相关博客文章(如给出的链接),可以帮助你解决具体问题并...

    excel转换html类(Excel2HtmlUtil的JAVA类)

    Apache POI提供了丰富的API,使得开发者能够使用Java处理Excel文件的各种操作,如读取、写入、修改等。描述中还提到,这个资源来自于CSDN(Chinese Software Developer Network)网上平台,一个中国程序员交流和学习...

    JAVA实现excel的导出.zip

    用Java语言采用接口设计模式、代理设计模式、工厂设计模式实现对excel中的表实现基本的...使用Java内置的poi jar包实现excel的操作,使用工厂模式、DAO设计模式等,思想很简单,可供设计模式参考,包括代码+文档+jar包

    Java数据导出到Excel模板

    本项目就是这样一个示例,它利用了Apache POI库来处理Excel文件的生成,使得Java程序能够方便地操作Excel数据。下面将详细阐述相关知识点。 1. **Apache POI**:Apache POI是一个开源项目,它提供了Java API来读写...

    Java Excel Api及详细教程

    Java Excel API是一个强大的工具,允许Java开发者方便地读取、写入和操作Microsoft Excel文件。在Eclipse这样的集成开发环境中,使用Java Excel API可以轻松处理各种Excel数据操作任务。本教程将详细介绍如何在...

    java excel生成二维码(可以添加图标和文字).zip

    3. **Excel操作**: 生成的二维码需要存储到Excel文件中,这通常需要用到Apache POI库。POI是用于读写Microsoft Office格式档案的Java API,可以方便地创建、修改Excel工作簿。你需要创建一个Workbook对象,添加...

Global site tag (gtag.js) - Google Analytics