做商品评论的爬虫的时候,最后决定输出excel文件,一个商品对应一个表单,一行是一个评论,记录一下java excel的基本用法。

最开始要下载jxl.jar,导入到工程里面,然后才能处理excel。
参考的程序如下,总结一下,就是先根据文件名创建WriteableWorkbook,然后获取表单,创建要写的Label,加入表单中,最后是写入并关闭文件。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
public class CreateExcel {
public static void main(String args[]) {
try {
// 打开文件
WritableWorkbook book = Workbook.createWorkbook(new File("test.xls"));
// 生成名为“第一页”的工作表,参数0表示这是第一页
WritableSheet sheet = book.createSheet("第一页", 0);
// 在Label对象的构造子中指名单元格位置是第一列第一行(0,0)
// 以及单元格内容为test
Label label = new Label(0, 0, "test");

// 将定义好的单元格添加到工作表中
sheet.addCell(label);

jxl.write.Number number = new jxl.write.Number(1, 0, 555.12541);
sheet.addCell(number);

// 写入数据并关闭文件
book.write();
book.close();

} catch (Exception e) {
System.out.println(e);
}
}
}

但是我需要把打开文件和写文件分开,所以是下面的样子:
打开文件是这样的:

1
2
3
4
5
6
7
8
9
10
private WritableWorkbook book;
public void openFile(String fileName) {
File file = new File(fileName);
try {
book = Workbook.createWorkbook(file);
} catch (IOException e) {
System.err.println("excel表打开失败");
e.printStackTrace();
}
}

打印文件,要通过label:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public void printReviews(Vector<Review> reviews, WritableSheet sheet)
throws RowsExceededException, WriteException {
int col = 0;
Label newLabel;
for (Review review : reviews) {
newLabel = new Label(0,col, review.getText());
sheet.addCell(newLabel);
newLabel = new Label( 1,col, review.getLevel() + "");
sheet.addCell(newLabel);
newLabel = new Label( 2,col, review.getReTitle());
sheet.addCell(newLabel);
newLabel = new Label( 3,col, review.getTime().toString());
sheet.addCell(newLabel);
newLabel = new Label(4,col, review.getUserName());
sheet.addCell(newLabel);
col++;
System.out.println("excel--------------------------------" + col);
}
}

最后不要忘了关闭文件,先写数据,然后关闭:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void closeFile() {
try {
book.write();
book.close();
} catch (IOException e) {
System.err.println("excel表写入失败");
e.printStackTrace();
} catch (WriteException e) {
System.err.println("excel表关闭失败");
e.printStackTrace();
}
}
public WritableWorkbook getBook() {
return book;
}

调用打印的方法如下:

1
2
3
4
5
6
7
8
9
WritableSheet sheet = book.createSheet(url, productNum);//设置表单名字和编号
try {
printReviews(crawler1.getReviews(), sheet);//将所有的评论打印到表格中
} catch (RowsExceededException e) {
e.printStackTrace();
} catch (WriteException e) {
e.printStackTrace();
}
productNum++;

另外,excel处理还有修改数据格式,设置单元格长宽高等数值和颜色,这些目前没有用到,以后用到再说吧。



编程语言      Java IO

本博客所有文章除特别声明外,均采用 CC BY-SA 3.0协议 。转载请注明出处!