Java 读写 Excel

Posted yqcf

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java 读写 Excel相关的知识,希望对你有一定的参考价值。

 

 

目前主要有两种常用的方式,jxl和POI。因为POI功能更加强大,面对大量数据时操作性能更加优于jxl,因此,在工作中一般使用POI来操作excel。

      POI是Apache下的开放源码函数库,POI提供了一系列的api来供java程序员对Microsoft Office格式的文档提供读写功能。

 

本片中就用

POI模式进行举例:

首先工具类,读写Excel的类,Excelutil1

技术图片

 

 代码如下,代码基本上都是从网上抄写的,只是调试了一下,让他能使用:

 

package com.cailian.test.framework.utils;

import java.io.FileInputStream;
import java.io.FileOutputStream;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
*
*
* @author
* @version 2019年5月7日
*/
public class ExcelUtill1

public static void setExcleFile(String filePath, int rowNumber,int colNumber,int result, String sheetName) throws Exception
FileInputStream ExcleFile;
System.out.println(333);


try
// 实例化Excle文件的FileInputStream 对象;
ExcleFile = new FileInputStream(filePath);
// 实例化Excle文件的XSSFWorkbook 对象;


XSSFWorkbook ExcelWBook = new XSSFWorkbook(ExcleFile);
/*
* 实例化XSSFSheet 对象,指定ExcelFile中的sheet名称,用于后续对sheet中行和列的操作;
*
*/
XSSFSheet ExcelWSheet = ExcelWBook.getSheet(sheetName);
// 通过函数参数指定单元格的行号和列,获取指定单元格的对象;
//Cell = ExcelWSheet.getRow(row).getCell(col);
XSSFRow row = ExcelWSheet.getRow(rowNumber);
XSSFCell col =row.getCell(colNumber);

/*
* 1.如果单元格的类型为字符串类型,使用getStringCellValue();来获取单元格的内容;
* 2.如果单元格的类型为数字类型,使用getNumberricCellValue();来获取单元格的内容;
* 注意:getNumberricCellValue();返回的值为double类型,转为为字符串类型,必须在
* getNumberricCellValue();前面加上(" ")双引号,用于强制转换为String类型,不加双引号
* 则会抛错;double类型无法转换为String类型的异常;
*
*/
String CellData = col.getCellType() == XSSFCell.CELL_TYPE_STRING ? col.getStringCellValue() + ""
: String.valueOf(Math.round(col.getNumericCellValue()));


// 单元格中有内容,则可以直接调用seCellValue方法设定单元格的值
col.setCellValue(result);

// 实例化写入Excel文件的文件输出流对象
FileOutputStream fileOut = new FileOutputStream(filePath);
// 将内容写入Excel中
ExcelWBook.write(fileOut);
fileOut.flush();
fileOut.close();
catch (Exception e)
e.printStackTrace();



public static void setExcleFile1(String filePath, int rowNumber,int colNumber,String result, String sheetName) throws Exception
FileInputStream ExcleFile;
System.out.println(333);


try
// 实例化Excle文件的FileInputStream 对象;
ExcleFile = new FileInputStream(filePath);
// 实例化Excle文件的XSSFWorkbook 对象;


HSSFWorkbook ExcelWBook = new HSSFWorkbook(ExcleFile);
/*
* 实例化XSSFSheet 对象,指定ExcelFile中的sheet名称,用于后续对sheet中行和列的操作;
*
*/
HSSFSheet ExcelWSheet = ExcelWBook.getSheetAt(0);
// 通过函数参数指定单元格的行号和列,获取指定单元格的对象;
//Cell = ExcelWSheet.getRow(row).getCell(col);
HSSFRow row = ExcelWSheet.getRow(rowNumber);
HSSFCell col =row.getCell(colNumber);

/*
* 1.如果单元格的类型为字符串类型,使用getStringCellValue();来获取单元格的内容;
* 2.如果单元格的类型为数字类型,使用getNumberricCellValue();来获取单元格的内容;
* 注意:getNumberricCellValue();返回的值为double类型,转为为字符串类型,必须在
* getNumberricCellValue();前面加上(" ")双引号,用于强制转换为String类型,不加双引号
* 则会抛错;double类型无法转换为String类型的异常;
*
*/
String CellData = col.getCellType() == XSSFCell.CELL_TYPE_STRING ? col.getStringCellValue() + ""
: String.valueOf(Math.round(col.getNumericCellValue()));


// 单元格中有内容,则可以直接调用seCellValue方法设定单元格的值
col.setCellValue(result);

// 实例化写入Excel文件的文件输出流对象
FileOutputStream fileOut = new FileOutputStream(filePath);
// 将内容写入Excel中
ExcelWBook.write(fileOut);
fileOut.flush();
fileOut.close();



catch (Exception e)
e.printStackTrace();






// 测试了可以使用,也可以自己用自己的文件去测试
// public static void main(String[] args)
// try
// setExcleFile1("D:/cailian_pg/测试脚本/功能测试/pg3.0/src/test/resources/data/ui/d1value/cityDataBeijing.xls",
// 2,2,"3","Sheet");
// catch (Exception e)
// // TODO Auto-generated catch block
// e.printStackTrace();
//
// System.out.println(333);
//



第二步使用工具类进行测试:

UI自动化测试时,要把页面上获取的某个值写入Excel中,需要获取这个值后,然后调用写入Excel的方法setExcleFile1就可以了。
调用方法时参数依次是:文件名,行数,列数,写入的值,sheet单的名字。

技术图片

 

 需求是:Excel的每条用例执行后,需要把一个值写入到每一行的固定的列中。比如说是每一行的30列中。

可以方法的行用caseID,列是固定的,文件名是写死的。

如果文件名也要求是变化的,可以用配置文件。下期介绍。。。。。


第三步:运行完成时,发现那个值已经写入文件中了,





 

以上是关于Java 读写 Excel的主要内容,如果未能解决你的问题,请参考以下文章

java Workbook 读写excel

如何用DELPHI读写EXCEL文件

问题集录--java读写Excel

Java操作Excel之POI:java读写excel文件以及打印设置

Java 使用POI对Excel进行读写操作

Java简单使用EasyExcel操作读写excel