由于公司,有时候涉及到Excel的操作,所以特意看看这个jxl
在网上看了半天都没有能用的使用jxl合并多个excel的例子,大多数都是复制粘贴,我的天!,只好自己写一个
一:大概思路如下:
1. 获取想追加的文件列表
2. 然后依次打开,获取sheet
3.通过sheet 获取该Excel文件中的行数
4. 然后根据行数 和 Cell[] getRows(int i) 方法, 可以将每行的单元格,作为元素存入到 Cell[] 中
5. 然后遍历cell[], 得到每一行的单元格,再根据cell.getContents() 获取到内容,添加到自己目标文件的指定位置!!
注意点 :
a. 目标文件的行数是要变化的,所以每次追加完之后,再去读取一下目标文件的行数
b. 列数就不用管了,这个cell[] 有多长,就追加几列
其实下面代码,可以 稍微重构一下,我这里就懒得动手了
import java.io.File;
import jxl.Cell;
import jxl.Sheet;
import jxl.Workbook;
import jxl.write.Label;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
//可以把一个目录下的多个Excel文件内容合并成一个!!
public class Demo1 {
public static void main(String[] args) throws Exception {
//将test.xls 中的数据追加到result.xls中
File file = new File("D:\\TestIo\\result.xls");
Workbook workbook = Workbook.getWorkbook(file);
//创建一个副本
WritableWorkbook workbook2 = Workbook.createWorkbook(file, workbook);
WritableSheet sheet2 = workbook2.getSheet(0);
int columns2 = sheet2.getColumns();
//获取数据的来源
File srcFile = new File("D:\\TestIo\\jxl");
File[] listFiles = srcFile.listFiles();
for (File file2 : listFiles) {
//获取工作薄
Workbook workbook3 = Workbook.getWorkbook(file2);
//获取第一个工作表
Sheet sheet = workbook3.getSheet(0);
//获取该工作薄里面的有效行数
int rows = sheet.getRows();
int columns = sheet.getColumns();
System.out.println(rows + " "+ columns);
for (int i = 0; i < rows; i++) {
//被追加的excel中的行数
int rows2 = sheet2.getRows();
Cell[] cells = sheet.getRow(i);
for (int j = 0; j < cells.length; j++) {
String contents = cells[j].getContents();
//列其实就是这个一维数组的依次的个数
sheet2.addCell(new Label(j, rows2, contents));
}
}
}
workbook2.write();
workbook2.close();
workbook.close();
}
}
二:注意事项
1. jxl不可以读取.xlsx文件, 只能读取.xls, 想读取.xlsx文件的话,去学习一下poi
2.Exception in thread "main" jxl.read.biff.BiffException: The input file was not found
( java对它写了一次导致损失:新建一个Excel就好了)
3. 运行jxl程序的时候,输出的这一个 .xsl文件不能打开!