Java 读取excel指定行列数据以及将数据保存到txt文件中

在使用的软件中经常要用到一些数据的导入导出,以及准确的定位数据,这些经常会涉及excle表格,因此把今天学习到的关于如何利用Java准确获取到excle中的某一列数据,同时将此列数据输出到txt文件格式中。

使用的jar包:jxl.jar 

相关的API:http://jxl.sourceforge.net/javadoc/index.html(还是比较强大的,感兴趣的可以学一下)

1.首先是测试用的excle

Java 读取excel指定行列数据以及将数据保存到txt文件中_第1张图片

2.要求:可以获取到第一列或者第二列有效数据,即“人物”、“年龄”等标题字符滤去。

jxl的用法在网上有很多,要获取到全部信息很简单,只需要嵌套两个for循环遍历excel中的每一个元素。

下面来获取第二列的年龄,只获取数字,代码如下:

public static void readSpecify(File file)throws Exception{
	ArrayList columnList = new ArrayList();
	Workbook readwb = null;
	InputStream io = new FileInputStream(file.getAbsoluteFile());
	readwb = Workbook.getWorkbook(io);
	Sheet readsheet = readwb.getSheet(0);
	int rsRows = readsheet.getRows();
	int rsColumns = readsheet.getColumns();
	for (int i = 1; i < rsRows; i++) {
		Cell cell = readsheet.getCell(1, i);
		columnList.add(cell.getContents());
		System.out.println(columnList);
	}
	String[] ageString = new String[columnList.size()];
	int[] age = new int[ageString.length];
	for (int i = 0; i < columnList.size(); i++) {
		ageString[i] = columnList.get(i);
		age[i] = Integer.parseInt(ageString[i]);
		System.out.println(age[i]);
	}		
}
这段代码需要注意的地方是,在第一个for循环中,这里并没有全部遍历元素,因为我们明确的知道,需要获取的是第二列第二行的元素一直到最后一行的元素,所以,for循环里的 i = 1 是代表从第二列开始,readsheet.getCell(1,i)里的1则表示从第二行开始。这种方式的优点在于能够快速准确的获取到值,缺点在于必须得确定起始位置,因为excel的行跟列都是从0开始的。同时cell.getContents返回值类型为java.lang.string,所以需要根据具体的数据类型进行转换。

效果如下:

Java 读取excel指定行列数据以及将数据保存到txt文件中_第2张图片

3.要求:将excle文件中需要的行列数据导出到另一个excel或者txt文本中。

具体到这个例子,将第二列数据导出到excel和txt文件中,存储位置为当期文件夹,代码如下:

public static void copy_excel(File file) throws Exception {
	FileWriter fWriter = null;
	PrintWriter out = null;
	String fliename = file.getName().replace(".xls", "");
	fWriter = new FileWriter(file.getParent() + "/" + fliename + ".txt");//输出格式为.txt
	fWriter = new FileWriter(file.getParent()+ "/agetwo.xls");//输出格式为.xls
	out = new PrintWriter(fWriter);
	InputStream is = new FileInputStream(file.getAbsoluteFile());
	Workbook wb = null;
	wb = Workbook.getWorkbook(is);
	int sheet_size = wb.getNumberOfSheets();
	Sheet sheet = wb.getSheet(0);
	for (int j = 1; j < sheet.getRows(); j++) {
		String cellinfo = sheet.getCell(1, j).getContents();//读取的是第二列数据,没有标题,标题起始位置在for循环中定义
		out.println(cellinfo);
	}
	out.close();//关闭流
	fWriter.close();
	out.flush();//刷新缓存
	System.out.println("输出完成!");
}
这段代码同样需要注意具体到行列,输出的文本名称可以自定义设置,这里取和原文件相同名字。但是要注意,out.println()一次只能写入一个文本,所以要确定写入的是txt还是excel,否则会出现文本生成了,但是却是空文本的情况。

效果如下:

Java 读取excel指定行列数据以及将数据保存到txt文件中_第3张图片





你可能感兴趣的:(Java)