Java对excel操作

简介:

1、Java工程

在pom.xml中添加依赖
< parent >
     < groupId >com.alibaba </ groupId >
     < artifactId >pampas </ artifactId >
     < version >3-RC1 </ version >
   </ parent >

< dependency >
       < groupId >com.alibaba.external </ groupId >
       < artifactId >jakarta.jxl </ artifactId >
       < version >2.6.12 </ version >
   </ dependency >

2、执行的例子

import java.io.File;
import java.io.IOException;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableImage;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

public  class ExcelUtils {

   /**读取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+ "\t");
            }
          }
          sb.append( "\r\n");
        }
        sb.append( "\r\n");
      }
    }
     //最后关闭资源,释放内存
    wb.close();
     return sb.toString();
  }
   /**生成一个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();
      }
    }
  } 
   /**搜索某一个文件中是否包含某个关键字
    * @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;
  }
         /**往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);
        } 
        
        
         public  static  void main(String[] args) {
            
     /*      try {
            //创建一个工作薄
      WritableWorkbook workbook = Workbook.createWorkbook(new File("D:/test1.xls"));
      //待插入的工作表
      WritableSheet imgSheet = workbook.createSheet("Images",0);
      //要插入的图片文件
      File imgFile = new File("d:/code/Winter.PNG");
      //图片插入到第二行第一个单元格,长宽各占六个单元格
      insertImg(imgSheet,0,1,6,6,imgFile);
      workbook.write();
      workbook.close();
    } catch (IOException e) {
      e.printStackTrace();
    } catch (WriteException e) {
      e.printStackTrace();
    }          */

          System.out.println(ExcelUtils.readExcel( new File( "d:/test1.xls")));
          ExcelUtils.writeExcel( "d:/abc.xls");
          System.out.println(ExcelUtils.searchKeyWord( new File( "d:/test1.xls"),  "aksjdha"));
        } 
  
}


本文转自 tianya23 51CTO博客,原文链接:http://blog.51cto.com/tianya23/382162,如需转载请自行联系原作者
相关文章
|
5天前
|
分布式计算 DataWorks Java
DataWorks操作报错合集之在使用MaxCompute的Java SDK创建函数时,出现找不到文件资源的情况,是BUG吗
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
19 0
|
27天前
|
SQL Java 数据库连接
java使用jdbc操作数据库
java使用jdbc操作数据库
|
12天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(二十九)-java+ selenium自动化测试- Actions的相关操作上篇(详解教程)
【4月更文挑战第21天】本文介绍了Selenium中处理特殊测试场景的方法,如鼠标悬停。Selenium的Actions类提供了鼠标悬停功能,用于模拟用户在网页元素上的悬停行为。文中通过实例展示了如何使用Actions悬停并展开下拉菜单,以及在搜索时选择自动补全的字段。代码示例包括了打开百度首页,悬停在“更多”元素上显示下拉菜单并点击“音乐”,以及在搜索框输入关键词并自动补全的过程。
35 0
|
5天前
|
Java 测试技术 Python
《手把手教你》系列技巧篇(三十六)-java+ selenium自动化测试-单选和多选按钮操作-番外篇(详解教程)
【4月更文挑战第28天】本文简要介绍了自动化测试的实战应用,通过一个在线问卷调查(&lt;https://www.sojump.com/m/2792226.aspx/&gt;)为例,展示了如何遍历并点击问卷中的选项。测试思路包括找到单选和多选按钮的共性以定位元素,然后使用for循环进行点击操作。代码设计方面,提供了Java+Selenium的示例代码,通过WebDriver实现自动答题。运行代码后,可以看到控制台输出和浏览器的相应动作。文章最后做了简单的小结,强调了本次实践是对之前单选多选操作的巩固。
15 0
|
3天前
|
XML 前端开发 Oracle
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
16:JSP简介、注释与Scriptlet、Page指令元素、Include操作、内置对象、四种属性-Java Web
9 2
|
5天前
|
存储 NoSQL 安全
java 中通过 Lettuce 来操作 Redis
java 中通过 Lettuce 来操作 Redis
java 中通过 Lettuce 来操作 Redis
|
6天前
|
分布式计算 DataWorks 监控
DataWorks操作报错合集之DataWorks在调用java sdk的createFile功能时报错com.aliyuncs.exceptions.ClientException: 1201111000 如何解决
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
10 1
|
6天前
|
存储 前端开发 测试技术
《手把手教你》系列技巧篇(三十五)-java+ selenium自动化测试-单选和多选按钮操作-下篇(详解教程)
【4月更文挑战第27天】本文介绍了使用Java+Selenium进行Web自动化测试时,如何遍历和操作多选按钮的方法。文章分为两个部分,首先是一个本地HTML页面的示例,展示了多选按钮的HTML代码和页面效果,并详细解释了遍历多选按钮的思路:找到所有多选按钮的共同点,通过定位这些元素并放入list容器中,然后使用for循环遍历并操作。 第二部分介绍了在JQueryUI网站上的实战,给出了被测网址,展示了代码设计,同样使用了findElements()方法获取所有多选按钮并存储到list中,然后遍历并进行点击操作。最后,文章对整个过程进行了小结,并推荐了作者的其他自动化测试教程资源。
15 0
|
7天前
|
数据挖掘 数据库连接 数据处理
精通Excel意味着熟练掌握基础及进阶操作
精通Excel意味着熟练掌握基础及进阶操作,如数据透视表、VBA编程和自定义公式。提升效率的技巧包括善用快捷键、自动化重复任务、巧用公式与函数(如SUM和VLOOKUP)、利用数据透视表分析数据、设置条件格式、建立数据库连接、编写自定义函数、创建数据图表、使用模板和进行分组汇总。这些方法能有效提升数据分析和处理能力,优化工作效率。
16 2
|
8天前
|
前端开发 测试技术 Python
《手把手教你》系列技巧篇(三十三)-java+ selenium自动化测试-单选和多选按钮操作-上篇(详解教程)
【4月更文挑战第25天】本文介绍了自动化测试中如何处理单选和多选按钮的操作,包括它们的定义、HTML代码示例以及如何判断和操作这些元素。文章通过一个简单的HTML页面展示了单选和多选框的示例,并提供了Java+Selenium实现的代码示例,演示了如何检查单选框是否选中以及如何进行全选操作。
15 0