java poi操作excel_使用POI操作Excel使用小总结

标签:

1.Workbook维护一个调色板,可以自定义设置56种颜色,下标从8到63. 用到颜色的地方,可以输入下标获取颜色,如CellStyle的setFillForegroundColor();

20180110184318828811.png

2.CreateCellStyle 创建之后,会把CellStyle放入到workbook维护的队列中,最多只能创建4000个样式。

因此,CellStyle应尽可能复用,以防创建了4000个之后发生异常。

如果没有显式地给一个Cell设置CellStyle,那么其获取的将是默认的CellStyle,将会影响到全局的样式,慎用。

可以使用一个帮助类,创建常用的CellStyle。

但是有两个要注意的地方:

1)不能使用另一个workbook的CellStyle,应该在本workbook创建一个CellStyle,使用cloneStyleFrom()方法复制样式

2)复制的时候,使用了调色板下标的地方,注意调色板并没有复制过来,因此,应该把本workbook的调色板设置成源workbook的调色板一致。

错误示范:

1)workbook A使用了workbook B的样式,抛出异常

Exception in thread "main" java.lang.IllegalArgumentException: This Style does not belong to the supplied Workbook. Are you trying to assign a style from one workbook to the cell of a differnt workbook?

at org.apache.poi.hssf.usermodel.HSSFCellStyle.verifyBelongsToWorkbook(HSSFCellStyle.java:801)

at org.apache.poi.hssf.usermodel.HSSFCell.setCellStyle(HSSFCell.java:898)

at org.apache.poi.hssf.usermodel.HSSFCell.setCellStyle(HSSFCell.java:894)

at poi.test.App.main(App.java:30)

改正:

1 //复制样式。如果直接使用其他 workbook的样式,会抛出异常

2 CellStyle cellStyle =workbook.createCellStyle();3 cellStyle.cloneStyleFrom(CellStyleHelper.getDefaultCellStyle());4 cell.setCellStyle(cellStyle);

2)workbook A clone了workbook B的样式后,调色板未设置成跟workbook B一致,CellStyle的颜色仍是以workbook A的调色板取色。

3. 与CellStyle一样,不同Workbook的Font复制过来也是无效的,不会抛出异常。

Font在创建后也是会加入队列的,有32767个的限制,虽然很多,但也尽可能复用吧

20180110184318830764.png

错误示范:

1 cellStyle.setFont(CellStyleHelper.getDefaultFont());

改正:

1 Font font =workbook.createFont();2 font.setItalic(CellStyleHelper.getDefaultFont().getItalic());3 cellStyle.setFont(font);

示例代码:

1 packagepoi.test;2

3 importjava.io.File;4 importjava.io.FileNotFoundException;5 importjava.io.FileOutputStream;6 importjava.io.IOException;7 importjava.io.OutputStream;8

9 importorg.apache.poi.hssf.usermodel.HSSFWorkbook;10 importorg.apache.poi.ss.usermodel.Cell;11 importorg.apache.poi.ss.usermodel.CellStyle;12 importorg.apache.poi.ss.usermodel.Font;13 importorg.apache.poi.ss.usermodel.Row;14 importorg.apache.poi.ss.usermodel.Sheet;15 importorg.apache.poi.ss.usermodel.Workbook;16

17 public classApp {18

19 public static void main(String[] args) throwsIOException {20 HSSFWorkbook workbook = newHSSFWorkbook();21 Sheet sheet = workbook.createSheet("Index");22 Row row = sheet.createRow(0);23 Cell cell = row.createCell(0);24 cell.setCellValue("fuck the world");25

26 //使workbook与要复制的workbook的调色板一致。

27 CellStyleHelper.initWorkbookPalette(workbook);28

29 //复制样式。如果直接使用其他 workbook的样式,会抛出异常

30 CellStyle cellStyle =workbook.createCellStyle();31 cellStyle.cloneStyleFrom(CellStyleHelper.getDefaultCellStyle());32

33 //复制字体样式。如果直接使用其他workbook的字体,不会抛出异常,但不会起效果,需要复制其字体样式。

34 Font font =workbook.createFont();35 font.setItalic(CellStyleHelper.getDefaultFont().getItalic());36 cellStyle.setFont(font);37

38 cell.setCellStyle(cellStyle);39

40 writeFile(workbook);41

42 System.out.println("success.");43 }44

45 private static void writeFile(Workbook workbook) throwsIOException {46 OutputStream outputStream = new FileOutputStream(new File("D:\\a.xls"));47 workbook.write(outputStream);48 }49 }

1 packagepoi.test;2

3 importorg.apache.poi.hssf.usermodel.HSSFPalette;4 importorg.apache.poi.hssf.usermodel.HSSFWorkbook;5 importorg.apache.poi.ss.usermodel.CellStyle;6 importorg.apache.poi.ss.usermodel.Font;7

8 public classCellStyleHelper {9

10 staticCellStyle defaultCellStyle;11

12 static HSSFWorkbook workbook = newHSSFWorkbook();13

14 staticFont defaultFont;15

16 public static voidinitWorkbookPalette(HSSFWorkbook workbook) {17 //调色板

18 HSSFPalette palette =workbook.getCustomPalette();19 //自定义颜色,可放置位置从8到63

20 palette.setColorAtIndex((short) 10, (byte) 12, (byte) 222, (byte) 123);21 }22

23 static{24 initWorkbookPalette(workbook);25 }26

27 public staticCellStyle getDefaultCellStyle() {28 if (null ==defaultCellStyle) {29 defaultCellStyle =workbook.createCellStyle();30 defaultCellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);31 //设置前景色,使用的颜色是从调色板选取的

32 defaultCellStyle.setFillForegroundColor((short) 10);33 }34

35 returndefaultCellStyle;36 }37

38 public staticFont getDefaultFont()39 {40 if(null ==defaultFont)41 {42 defaultFont =workbook.createFont();43 defaultFont.setItalic(true);44 }45

46 returndefaultFont;47 }48 }

标签:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值