这学期我选修了数据挖掘,期末的考核是用爬虫技术爬1万条数据,于是我将目光瞄向了某招聘网,一顿操作,好像还行?好了数据有了,那接下来就是就是导出数据了。于是又去找有关导出数据到excel的技术。进入正题首先贴上代码:
pom.xml引入poi jar包

<dependency>
  		<groupId>org.apache.poi</groupId>
  		<artifactId>poi-ooxml</artifactId>
  		<version>3.10-FINAL</version>
 </dependency>

创建一个类

package write;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

public class Write {
	private Sheet sheet;
	private XSSFRow row;
	private XSSFWorkbook workbook;
	private File file;
	//行号
	private int i=1;
  //构造函数,传入一个File对象		
	public Write(File f) throws Exception{
		this.file=f;
		//创建workbook实例
		 workbook=new XSSFWorkbook();
		//创建sheet实例
		 this.sheet=workbook.createSheet("sheet1");	
	}
	//设置表头,传入一个数组
	public void setHead(String[] args) {
		//创建第0行
		row= (XSSFRow) sheet.createRow(0);
		//遍历数组,根据数据长度创建单元格
		for(int i=0;i<args.length;i++) {
			//将数组中的内容逐个创建到表头中
		row.createCell(i).
		}
	//写入数据
	public void overWrite(User user) throws IOException {
	
		OutputStream out=new FileOutputStream(file);
		//创建第i行
		row=(XSSFRow) sheet.createRow(i);
		//设置第i行的单元格
		row.createCell(0).setCellValue(user.getName());
		row.createCell(1).setCellValue(user.getAge());
		workbook.write(out);
		i++;
		//关闭流
		out.close();
	}	
}

测试类

package write;
import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Test {

	public static void main(String[] args) throws Exception {
		// TODO Auto-generated method stub
		User user1=new User("张三",18);
		User user2=new User("李四",18);
		User user3=new User("王五",18);
		User user4=new User("赵六",18);
		User user5=new User("田七",18);
		List<User> users=new ArrayList<User>();
		users.add(user1);
		users.add(user2);
		users.add(user3);
		users.add(user4);
		users.add(user5);
		//创建一个表格
		File file=new File("C:\\Users\\ZhangH\\Documents\\123.xlsx");
		if(file.exists()) {
			file.delete();
		}
		Write write=new Write(file);
		write.setHead(new String[] {"姓名","年龄"});
		for(User user:users) {
			write.overWrite(user);
		}
		System.out.println("写入成功!");
		
	}
}

运行截图就不放了,是成功了的。这里只是写出数据的方法,关于读入数据的方式我还没去尝试,而且注意的是这个写出每次执行都会覆盖原表格里面的内容,要想实现追加内容,要获取到原表格的信息,根据表格信息获取到workbook,再根据workbook获取sheet,根据sheet获取到最后一行的行号,后面的操作就和上面的写差不多了,从获取到的行号开始写入就行,具体实现就不多说了,有兴趣的自行了解。
最后大致说下上面的思路,具体细节在代码注释里

  • 先new一个workbook实例对象,根据workbook实例创建sheet表
  • 在创建的sheet表下创建第0行,这一行主要是设置表头字段的,然后在这行逐个创建单元格,往单元格里塞字段
  • 在设置了表头之后就是正式的数据了,同理,创建新的一行,在这行逐个创建单元格,并逐个格子塞数据
  • 最后,数据放完了,调用workbook的write方法,将数据写进,write方法要传个OutPutStream类型的参数,自己弄即可。

最最后,学java也有一段时间了,但有些东西总是学了就忘了,好记性不如烂笔头还是真理啊。这些笔记可能会有错,代码也可能写的很糟糕,但不管怎么说这也是自己努力的痕迹,不过还是要说一下,哪里有错的地方请各位前辈指出。