这学期我选修了数据挖掘,期末的考核是用爬虫技术爬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也有一段时间了,但有些东西总是学了就忘了,好记性不如烂笔头还是真理啊。这些笔记可能会有错,代码也可能写的很糟糕,但不管怎么说这也是自己努力的痕迹,不过还是要说一下,哪里有错的地方请各位前辈指出。