说明
帮助测试做的工具。
测试需要对多个导出的结果进行比较,并将比较的结果写入到一个Excel中。
导出的文件格式包括:txt, csv, xls, xlxs
写入的文件格式为:xlxs
由于最终的写入方式是一致的,先说写入。
涉及到客户产品信息,代码仅举例子说明,具体的逻辑嵌套请自行处理(测试组要求比较数据的时候需要读取的时候同步写入)。
写入XLXS
由于写入的数据量不确定,最少的时候可能只有几条,最多的时候将近两千万。因此,只需要考虑最多就行了,根据测试组要求,运行时间不是问题,但是数据记录要齐全(代码为将100000000个左右的数字写入Excel中)。
写入一个Excel
public void writeInOneFile(String path, String name) throws IOException {
Workbook wb = new SXSSFWorkbook(3000);
int number = 0;
int count = 1;
Sheet sheet = wb.createSheet("result " + count);
Row row = sheet.createRow(number);
for (int i = 0; i < 10001; i++) {
for (int j = 0; j < 1001; j++) {
for (int k = 0; k < 10; k++) {
Cell cell= row.createCell(k);
cell.setCellValue("" + (i + j + k));
}
number = number + 1;
//单个Sheet页的最大写入数量约为104W行,这里写入100W行就结束一个Sheet页
if (number >= 1000000) {
count = count + 1;
sheet = wb.createSheet("result " + count);
System.out.println(sheet.getSheetName());
number = 0;
}
row = sheet.createRow(number);
}
}
FileOutputStream fos = new FileOutputStream(path + "\\" + name + ".xlsx");
wb.write(fos);
fos.flush();
fos.close();
wb.close();
}
写入多个excel
public String createExcel(String path, String name) {
return path + "\\" + name + ".xlsx";
}
public void writeInMoreFile(String path, String name) throws IOException, InterruptedException {
int index = 0;
String fileName = createExcel(path, name + " " + index);
Workbook wb = new SXSSFWorkbook(5000);
;
int number = 0;
Sheet sheet = wb.createSheet();
Row row = sheet.createRow(number);
for (int i = 0; i < 10001; i++) {
for (int j = 0; j < 1001; j++) {
for (int k = 0; k < 10; k++) {
Cell cell= row.createCell(k);
cell.setCellValue("" + (i + j + k));
}
number = number + 1;
//单个Sheet页的最大写入数量约为104W行,这里写入100W行就结束一个Excel
if (number >= 1000000) {
FileOutputStream fos = new FileOutputStream(fileName);
wb.write(fos);
fos.flush();
fos.close();
Thread.sleep(1000);
index = index + 1;
fileName = createExcel(path, name + " " + index);
wb = new SXSSFWorkbook(5000);
sheet = wb.createSheet();
System.out.println(fileName);
number = 0;
}
row = sheet.createRow(number);
}
}
FileOutputStream fos = new FileOutputStream(fileName);
wb.write(fos);
fos.flush();
fos.close();
wb.close();
}
最终的结果为写入一个excel的文件大小为380M左右,分开的文件一个为38M左右。
读取
对于不同的文件采取不同的读取方式
txt和csv
属于简单的文本读取,直接使用BufferedReader就可以了,这一类的代码很多,也是很基础的功能,这里不展示代码了。
xls 和 xlsx
先准备一些载体对象
载体对象
class CustomSheet {
private String name;
private List<CustomRow> rows;
public CustomSheet(String name, List<CustomRow> rows) {
this.name = name;
this.rows = rows;
}
public CustomSheet() {
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public List<CustomRow> getRows() {
return rows;
}
public void setRows(List<CustomRow> rows) {
this.rows = rows;
}
@Override
public boolean equals(Object o) {