文档章节

使用java读取Excel表格中的数据 ,解决方案搜集

不最醉不龟归
 不最醉不龟归
发布于 2016/11/01 16:21
字数 1038
阅读 145
收藏 0

Java EXCEL API简介 
Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。使用该API非Windows操作系统也可以通过纯Java应用来处理Excel数据表。因为是使用Java编写的,所以我们在Web应用中可以通过JSP、Servlet来调用API实现对Excel数据表的访问。

应用示例 
从Excel文件读取数据表 

Java Excel API既可以从本地文件系统的一个文件(.xls),也可以从输入流中读取Excel数据表。读取Excel数据表的第一步是创建Workbook(术语:工作薄),下面的代码片段举例说明了应该如何操作:  需要用到一个开源的jar包,jxl.jar。   下载地址


File file = new File("c:\\a.xls");  
InputStream in = new FileInputStream(file);  
Workbook workbook = Workbook.getWorkbook(in);  
//获取第一张Sheet表  
Sheet sheet = workbook.getSheet(0);  
  
//我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。  
//获取第一行,第一列的值   
Cell c00 = rs.getCell(0, 0);   
String strc00 = c00.getContents();   
//获取第一行,第二列的值   
Cell c10 = rs.getCell(1, 0);   
String strc10 = c10.getContents();   
//我们可以通过指定行和列得到指定的单元格Cell对象  
  Cell cell = sheet.getCell(column, row);  
  //也可以得到某一行或者某一列的所有单元格Cell对象  
  Cell[] cells = sheet.getColumn(column);  
  Cell[] cells2 = sheet.getRow(row);  
  //然后再取每一个Cell中的值  
  String content = cell.getContents();  

这个jar包中还有很多其他的方法,就需要自己去摸索了。

 

===========================================以下为自己调试后的代码

1.如图,添加jxl.jar文件

创建excelReader类

package excelReader;

import java.io.*;
import jxl.*;
import jxl.read.biff.BiffException;

public class ExcelReader {
	String path = "C:\\data.xlsx";
	public ExcelReader(String path){
		this.path = path;
	}
	
	public String readExcel(int sheetNum,int col,int row) throws BiffException, IOException{
		File file = new File(path);  
		InputStream in = new FileInputStream(file);  
		Workbook workbook = Workbook.getWorkbook(in);  
		//获取第一张Sheet表  
		Sheet sheet = workbook.getSheet(sheetNum);  
		//我们既可能通过Sheet的名称来访问它,也可以通过下标来访问它。如果通过下标来访问的话,要注意的一点是下标从0开始,就像数组一样。  
		//获取第一行,第一列的值   
		Cell celV = sheet.getCell(col, row);   
		String strv = celV.getContents();   
		return strv;
	}
	
	public String getValue(int sheetNum,int col,int row) throws BiffException, IOException{
		return readExcel(sheetNum,col,row);
	}
	
}

 

创建Test类

import java.io.IOException;
import jxl.read.biff.BiffException;
import com.sun.org.apache.bcel.internal.generic.NEW;
import excelReader.*;


public class Test {
	public static void main(String[] args) throws BiffException, IOException {
		System.out.println(new ExcelReader("C:\\jxlrwtest.xls").getValue(0, 1, 13));//sheet,col,row
	}
}

 

===============================================================================

最近做自动化需要从文件读取数据做参数化,网上发现一个不错的解决方案。

准备:新建一个excel文件,文件名为测试类名,sheet名为测试方法名

        excel第一行为标题,从第二行开始为测试数据

        build path:jxl.jar

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

import org.testng.Assert;

import jxl.*;

/**
 * Excel放在Data文件夹下</p>
 * Excel命名方式:测试类名.xls</p>
 * Excel的sheet命名方式:测试方法名</p>
 * Excel第一行为Map键值</p>
 * 代码参考郑鸿志的Blog
 * {@link www.zhenghongzhi.cn/post/42.html}
 * @ClassName: ExcelDataProvider
 * @Description: TODO(读取Excel数据)
 */
public class ExcelDataProvider implements Iterator<Object[]> {

    private Workbook book         = null;
    private Sheet    sheet        = null;
    private int      rowNum       = 0;
    private int      currentRowNo = 0;
    private int      columnNum    = 0;
    private String[] columnnName;

    public ExcelDataProvider(String classname, String methodname) {

        try {

            int dotNum = classname.indexOf(".");

            if (dotNum > 0) {
                classname = classname.substring(classname.lastIndexOf(".") + 1,
                        classname.length());
            }
            //从/data文件夹下读取以类名命名的excel文件
            String path = "data/" + classname + ".xls";
            InputStream inputStream = new FileInputStream(path);

            book = Workbook.getWorkbook(inputStream);
            //取sheet
            sheet = book.getSheet(methodname);
            rowNum = sheet.getRows();
            Cell[] cell = sheet.getRow(0);
            columnNum = cell.length;
            columnnName = new String[cell.length];

            for (int i = 0; i < cell.length; i++) {
                columnnName[i] = cell[i].getContents().toString();
            }
            this.currentRowNo++;

        } catch (Exception e) {
            e.printStackTrace();
            Assert.fail("unable to read Excel data");
        }
    }

    public boolean hasNext() {

        if (this.rowNum == 0 || this.currentRowNo >= this.rowNum) {

            try {
                book.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
            return false;
        } else {
            // sheet下一行内容为空判定结束
            if ((sheet.getRow(currentRowNo))[0].getContents().equals(""))
                return false;
            return true;
        }
    }

    public Object[] next() {

        Cell[] c = sheet.getRow(this.currentRowNo);
        Map<String, String> data = new HashMap<String, String>();
        // List<String> list = new ArrayList<String>();

        for (int i = 0; i < this.columnNum; i++) {

            String temp = "";

            try {
                temp = c[i].getContents().toString();
            } catch (ArrayIndexOutOfBoundsException ex) {
                temp = "";
            }

            // if(temp != null&& !temp.equals(""))
            // list.add(temp);
            data.put(this.columnnName[i], temp);
        }
        Object object[] = new Object[1];
        object[0] = data;
        this.currentRowNo++;
        return object;
    }

    public void remove() {
        throw new UnsupportedOperationException("remove unsupported.");
    }
}

 

本文转载自:http://blog.csdn.net/centralperk/article/details/8209041

不最醉不龟归
粉丝 23
博文 435
码字总数 454608
作品 0
深圳
程序员
私信 提问
Java读取Excel数据:基于Apache POI(一)

版权声明:本文为Zhang Phil原创文章,请不要转载! https://blog.csdn.net/zhangphil/article/details/85302347 Java读取Excel数据:基于Apache POI(一) Java本身不支持直接读取微软的Exc...

zhangphil
2018/12/27
0
0
使用 Apache 的 POI 和 HSSF 将 Excel 电子表格数据加载到 DB2

简介 在 developerWorks DB2 上本文的 先行篇 中,我们研究了 Apache 的 POI 项目的开放源代码产品。期间,我们开始在了解 SQL 的技术专家和通常将电子表格选作工具的商务专家之间架起一座桥...

红薯
2008/12/05
922
0
Aspose.Cells for Java 7.7.1 发布

Aspose.Cells for Java 7.7.1 发布,此版本更新内容如下: LightCells API 可以利用更少的内存区读取超大型的 Excel 表格 用户现在可以在 Excel 工作表中创建透明的图像 解决了表和形状控制的...

oschina
2014/02/16
728
1
PageOffice V4.0 Excel常用的接口对象---Workbook类

Workbook 类代表一个Excel文档,用来动态输出数据到Excel文档并且控制其表格格式及编辑功能。Workbook 对象是PageOffice开发平台定义的Excel数据输出对象,可作为PageOfficeCtrl.SetWriter ...

山里的红杏
2018/09/11
0
0
PageOffice V4.0 Excel常用的接口对象---Table类

Table 类,代表PageOffice中定义的Excel表格对象。 在PageOffice中,我们把Excel工作表上的任意一块连续的单元格区域定义为一个Table对象。Table 类按照常用的数据库组件中的数据表的概念封装...

山里的红杏
2018/09/11
0
0

没有更多内容

加载失败,请刷新页面

加载更多

gradle grovvy中的闭包

1. 无参数的闭包 //这b1就是一个闭包def b1={ println "hello b1"}//定义方法,包含闭包类型的参数def method1(Closure closure){closure()}//执行method1method1(b1) 执行结果 ...

edison_kwok
44分钟前
3
0
基于Spring Boot + Dubbo的全链路日志追踪(一)

一、 概要 当前公司后端整体架构为:Spring Boot + Dubbo。由于早期项目进度等原因,对日志这块没有统一的规范,基本上是每个项目自己管自己的日志。这也对后面的问题排查带来了很大的困难,...

明天以后
今天
7
0
安装fastdfs文件服务器步骤

1、安装libfastcommon wget https://github.com/happyfish100/libfastcommon/archive/master.zip 解压后安装 cd fastcommon-master ./make.sh ./make.sh install 2、安装 FastDFS,从sourcef......

lsjlgo
今天
3
0
MySQL 5.7 免安装版配置

下载地址:https://dev.mysql.com/downloads/mysql/ 安装步骤 1.下载zip解压到目录下 2.配置环境变量 新建系统变量:MYSQL_HOME,值:D:\DevelopmentTool\Mysql-5.7.26-winx64 修改path变量:...

华山猛男
今天
7
0
java map的遍历

//从大的角度可以分为两类Set<String> set=map.keySet();这里面还可以分为3类, 从set的角度来分 //Set<Map.Entry<String, String>> entery=map.entrySet(); public class Test { public sta......

南桥北木
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部