Java Poi 操作Excle

 iLife's 博客http://blog.csdn.net/fei1502816

1.创建一个新的Excle工作薄

  1. // 创建新的Excel 工作簿  
  2. HSSFWorkbook workbook = new HSSFWorkbook();  
  3.           
  4. // 在Excel工作簿中建一工作表,其名为缺省值, 也可以指定Sheet名称  
  5. HSSFSheet sheet = workbook.createSheet();  
  6. //HSSFSheet sheet = workbook.createSheet("SheetName");   


2. 创建新行(row),并将单元格(cell)放入其中. 行号从0开始计算.

  1. HSSFRow row = sheet.createRow((short1);  

3.设置sheet名称和单元格内容为中文

  1. wb.setSheetName(n, "中文",HSSFCell.ENCODING_UTF_16);         
  2. cell.setEncoding((short1);     
  3. cell.setCellValue("中文");    

4.设置列宽、行高

  1. sheet.setColumnWidth((short)column,(short)width);     
  2. row.setHeight((short)height);    

5.添加区域,合并单元格

  1. Region region = new Region((short)rowFrom,(short)columnFrom,(short)rowTo,(short)columnTo);     
  2. sheet.addMergedRegion(region);     
  3. //得到所有区域     
  4. sheet.getNumMergedRegions()    

6.设置单元格边框格式

虚线HSSFCellStyle.BORDER_DOTTED 
实线HSSFCellStyle.BORDER_THIN

  1. public static HSSFCellStyle getCellStyle(short type){        
  2.      HSSFWorkbook wb = new HSSFWorkbook();     
  3.      HSSFCellStyle style = wb.createCellStyle();     
  4.      style.setBorderBottom(type);//下边框      
  5.       style.setBorderLeft(type);//左边框      
  6.       style.setBorderRight(type);//右边框      
  7.       style.setBorderTop(type);//上边框      
  8.       return style;     
  9. }    

7.设置字体和内容位置

  1. HSSFFont f  = wb.createFont();     
  2. f.setFontHeightInPoints((short11);//字号     
  3. f.setBoldweight(HSSFFont.BOLDWEIGHT_NORMAL);//加粗     
  4. style.setFont(f);     
  5. style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//左右居中     
  6. style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//上下居中     
  7. style.setRotation(short rotation);//单元格内容的旋转的角度     
  8. HSSFDataFormat df = wb.createDataFormat();     
  9. style1.setDataFormat(df.getFormat("0.00%"));//设置单元格数据格式     
  10. cell.setCellFormula(string);//给单元格设公式     
  11. style.setRotation(short rotation);//单元格内容的旋转的角度     
  12. cell.setCellStyle(style);    

8.插入图片

  1. //先把读进来的图片放到一个ByteArrayOutputStream中,以便产生ByteArray     
  2.       ByteArrayOutputStream byteArrayOut = new ByteArrayOutputStream();     
  3.       BufferedImage bufferImg = ImageIO.read(new File("ok.jpg"));     
  4.       ImageIO.write(bufferImg,"jpg",byteArrayOut);     
  5. //读进一个excel模版     
  6. FileInputStream fos = new FileInputStream(filePathName+"/stencil.xlt");      
  7. fs = new POIFSFileSystem(fos);     
  8. //创建一个工作薄     
  9. HSSFWorkbook wb = new HSSFWorkbook(fs);     
  10. HSSFSheet sheet = wb.getSheetAt(0);     
  11. HSSFPatriarch patriarch = sheet.createDrawingPatriarch();     
  12. HSSFClientAnchor anchor = new HSSFClientAnchor(0,0,1023,255,(short0,0,(short)10,10);          
  13. patriarch.createPicture(anchor , wb.addPicture(byteArrayOut.toByteArray(),HSSFWorkbook.PICTURE_TYPE_JPEG));    


例1:java

  1. import java.io.FileOutputStream;  
  2.   
  3. import org.apache.poi.hssf.usermodel.HSSFCell;  
  4. import org.apache.poi.hssf.usermodel.HSSFCellStyle;  
  5. import org.apache.poi.hssf.usermodel.HSSFFont;  
  6. import org.apache.poi.hssf.usermodel.HSSFRow;  
  7. import org.apache.poi.hssf.usermodel.HSSFSheet;  
  8. import org.apache.poi.hssf.usermodel.HSSFWorkbook;  
  9. import org.apache.poi.hssf.usermodel.HSSFRichTextString;  
  10. import org.apache.poi.hssf.usermodel.HSSFDataFormat;  
  11. import org.apache.poi.hssf.usermodel.HSSFComment;  
  12. import org.apache.poi.hssf.usermodel.HSSFPatriarch;  
  13. import org.apache.poi.hssf.usermodel.HSSFClientAnchor;  
  14.   
  15. public class PoiCreateExcelTest ...{  
  16.     public static void main(String[] args) ...{  
  17.         /** *//**  
  18.          * @see <a href="http://poi.apache.org/hssf/quick-guide.html#NewWorkbook">For more</a> 
  19.          */          
  20.         // 创建新的Excel 工作簿  
  21.         HSSFWorkbook workbook = new HSSFWorkbook();  
  22.           
  23.         // 在Excel工作簿中建一工作表,其名为缺省值, 也可以指定Sheet名称  
  24.         HSSFSheet sheet = workbook.createSheet();  
  25.         //HSSFSheet sheet = workbook.createSheet("SheetName");   
  26.           
  27.         // 用于格式化单元格的数据  
  28.         HSSFDataFormat format = workbook.createDataFormat();  
  29.           
  30.         // 创建新行(row),并将单元格(cell)放入其中. 行号从0开始计算.  
  31.         HSSFRow row = sheet.createRow((short1);  
  32.   
  33.         // 设置字体  
  34.         HSSFFont font = workbook.createFont();  
  35.         font.setFontHeightInPoints((short20); //字体高度  
  36.         font.setColor(HSSFFont.COLOR_RED); //字体颜色  
  37.         font.setFontName("黑体"); //字体  
  38.         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //宽度  
  39.         font.setItalic(true); //是否使用斜体  
  40. //        font.setStrikeout(true); //是否使用划线  
  41.   
  42.         // 设置单元格类型  
  43.         HSSFCellStyle cellStyle = workbook.createCellStyle();  
  44.         cellStyle.setFont(font);  
  45.         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平布局:居中  
  46.         cellStyle.setWrapText(true);  
  47.           
  48.         // 添加单元格注释  
  49.         // 创建HSSFPatriarch对象,HSSFPatriarch是所有注释的容器.  
  50.         HSSFPatriarch patr = sheet.createDrawingPatriarch();  
  51.         // 定义注释的大小和位置,详见文档  
  52.         HSSFComment comment = patr.createComment(new HSSFClientAnchor(0000, (short)42, (short65));  
  53.         // 设置注释内容  
  54.         comment.setString(new HSSFRichTextString("可以在POI中添加注释!"));  
  55.         // 设置注释作者. 当鼠标移动到单元格上是可以在状态栏中看到该内容.  
  56.         comment.setAuthor("Xuys.");  
  57.           
  58.         // 创建单元格  
  59.         HSSFCell cell = row.createCell((short1);  
  60.         HSSFRichTextString hssfString = new HSSFRichTextString("Hello World!");  
  61.         cell.setCellValue(hssfString);//设置单元格内容  
  62.         cell.setCellStyle(cellStyle);//设置单元格样式  
  63.         cell.setCellType(HSSFCell.CELL_TYPE_STRING);//指定单元格格式:数值、公式或字符串  
  64.         cell.setCellComment(comment);//添加注释  
  65.   
  66.         //格式化数据  
  67.         row = sheet.createRow((short2);  
  68.         cell = row.createCell((short2);  
  69.         cell.setCellValue(11111.25);  
  70.         cellStyle = workbook.createCellStyle();  
  71.         cellStyle.setDataFormat(format.getFormat("0.0"));  
  72.         cell.setCellStyle(cellStyle);  
  73.   
  74.         row = sheet.createRow((short3);  
  75.         cell = row.createCell((short3);  
  76.         cell.setCellValue(9736279.073);  
  77.         cellStyle = workbook.createCellStyle();  
  78.         cellStyle.setDataFormat(format.getFormat("#,##0.0000"));  
  79.         cell.setCellStyle(cellStyle);  
  80.           
  81.           
  82.         sheet.autoSizeColumn((short)0); //调整第一列宽度  
  83.         sheet.autoSizeColumn((short)1); //调整第二列宽度  
  84.         sheet.autoSizeColumn((short)2); //调整第三列宽度  
  85.         sheet.autoSizeColumn((short)3); //调整第四列宽度  
  86.   
  87.         try ...{  
  88.             FileOutputStream fileOut = new FileOutputStream("C:\3.xls");  
  89.             workbook.write(fileOut);  
  90.             fileOut.close();  
  91.         } catch (Exception e) ...{  
  92.             System.out.println(e.toString());  
  93.         }  
  94.     }  
  95.   
  96. }  

如果编译器提示没有autoSizeColumn这个方法,那可能是你的poi版本太低的缘故,我用的是poi3.0版本。

 

例2:Grails

  1. /** 
  2.     * Excel导出方法,导出班级工作情况统计列表 
  3.     * @param 
  4.     * titleList 标题集合 
  5.     * classTableInstanceList,questionList 数据集合 
  6.     *  
  7.     * out OutputStream out = response.getOutputStream(); 
  8.     * @return 
  9.     * 
  10.     */  
  11.     def exportWorkList(titleList,classList,questionList,out,ttList){  
  12.           
  13.         Workbook wb = new HSSFWorkbook();  
  14.         Sheet sheet = wb.createSheet("sheet1"); //班级工作情况统计  
  15.           
  16.         HSSFRow   row   =   sheet.createRow((short)1);  
  17.         HSSFRow   row2   =   sheet.createRow((short)2);  
  18.         HSSFCell   cell   =   row.createCell((short)1);  
  19.         HSSFCell   cell2   =   row.createCell((short)2);  
  20.           
  21.         // 设置字体  
  22.         HSSFFont font = wb.createFont();  
  23.         //font.setFontHeightInPoints((short) 11); //字体高度  
  24.         //font.setColor(HSSFFont.COLOR_RED); //字体颜色  
  25.         //font.setFontName("黑体"); //字体  
  26.         font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); //宽度  
  27.           
  28.         // 设置单元格类型  
  29.         HSSFCellStyle cellStyle = wb.createCellStyle();  
  30.         cellStyle.setFont(font);  
  31.         cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); //水平布局:居中  
  32.         cellStyle.setWrapText(true);  
  33.           
  34.         HSSFCellStyle cellStyle1 = wb.createCellStyle();  
  35.         cellStyle1.setAlignment(HSSFCellStyle.VERTICAL_TOP); //垂直布局:居上  
  36.         cellStyle1.setWrapText(true);       //设置自动换行  
  37.   
  38.         //设置单元格宽度  
  39.         sheet.setColumnWidth(0,1500);       //序列  
  40.         sheet.setColumnWidth(1,2500);       //区县名称  
  41.         sheet.setColumnWidth(2,7000);       //基地名称  
  42.         sheet.setColumnWidth(3,7000);       //班级名称  
  43.         sheet.setColumnWidth(4,2500);       //班级状态  
  44.           
  45.         sheet.setColumnWidth(29,3000);      //拓宽问题5的单元格宽度  
  46.           
  47.         sheet.setColumnWidth(35,5000);      //评价最高的老师  
  48.         sheet.setColumnWidth(36,5000);      //评价最低的老师  
  49.   
  50.           
  51.         titleList.eachWithIndex {p,i->  
  52.             if(i>=5 && i<=10){  
  53.                 cell = row.createCell(5+5*(i-5));  
  54.                 sheet.addMergedRegion(new Region(0,(short)0,0,(short)36));//合并区域第一行  
  55.                 sheet.addMergedRegion(new Region(1,(short)(5+5*(i-5)),1,(short)(5+5*(i-5)+4)));//指定合并区域  
  56.                 cell.setCellValue(p);  
  57.                 cell.setCellStyle(cellStyle);//设置单元格样式  
  58.                                   
  59.             }           }  
  60.         }  
  61.           
  62.        try {  
  63.          wb.write(out);  
  64.          out.close();  
  65.        } catch (FileNotFoundException e1) {  
  66.            //e1.printStackTrace();  
  67.        }catch(IOException e){  
  68.            //e.printStackTrace();  
  69.        }  
  70.     }  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值