做商品评论的爬虫的时候,最后决定输出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")); WritableSheet sheet = book.createSheet("第一页", 0); 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处理还有修改数据格式,设置单元格长宽高等数值和颜色,这些目前没有用到,以后用到再说吧。