首页 > 代码库 > poi----java操作java对象生成execl表单

poi----java操作java对象生成execl表单

 1.Apache POI简介

Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程式对Microsoft Office格式档案读和写的功能。 .NET的开发人员则可以利用NPOI (POI for .NET) 来存取 POI 的功能。

2.POI结构

HSSF - 提供读写Microsoft Excel XLS格式档案的功能。
XSSF - 提供读写Microsoft Excel OOXML XLSX格式档案的功能。
HWPF - 提供读写Microsoft Word DOC格式档案的功能。
HSLF - 提供读写Microsoft PowerPoint格式档案的功能。
HDGF - 提供读Microsoft Visio格式档案的功能。
HPBF - 提供读Microsoft Publisher格式档案的功能。
HSMF - 提供读Microsoft Outlook格式档案的功能。

 

3.生成execl的代码

  1 package com.bjsxt.sxf.test;  2   3   4 import java.io.File;  5 import java.io.FileNotFoundException;  6 import java.io.FileOutputStream;  7 import java.io.IOException;  8 import java.io.OutputStream;  9 import java.util.Date; 10  11 import org.apache.poi.hssf.usermodel.HSSFSheet; 12 import org.apache.poi.hssf.usermodel.HSSFWorkbook; 13 import org.apache.poi.hssf.util.CellRangeAddress; 14 import org.apache.poi.hssf.util.HSSFColor; 15 import org.apache.poi.ss.usermodel.Cell; 16 import org.apache.poi.ss.usermodel.CellStyle; 17 import org.apache.poi.ss.usermodel.CreationHelper; 18 import org.apache.poi.ss.usermodel.Font; 19 import org.apache.poi.ss.usermodel.IndexedColors; 20 import org.apache.poi.ss.usermodel.Row; 21 import org.apache.poi.ss.usermodel.Workbook; 22  23  24 /** 25  * 操作java代码生成execl表格 26 * @ClassName: JavaToExcel  27 * @Description: TODO(这里用一句话描述这个类的作用)  28 * @author 尚晓飞 29 * @date 2014-10-9 上午10:21:54  30 * 31  */ 32 public class JavaToExcel { 33      34     public static void main(String[] args) throws IOException { 35         //创建Workbook对象(这一个对象代表着对应的一个Excel文件)   36         //HSSFWorkbook表示以xls为后缀名的文件   37         HSSFWorkbook wb=new HSSFWorkbook(); 38         //获得CreationHelper对象,这个应该是一个帮助类   39         CreationHelper helper = wb.getCreationHelper();  40         //创建Sheet并给名字(表示Excel的一个Sheet)   41         HSSFSheet sheet1 = wb.createSheet("student01");         42         //Row表示一行Cell表示一列   43         Row row = null;   44         Cell cell = null;   45         for(int i=0;i<60;i++){   46             //获得这个sheet的第i行  (行是从0开始的,0是第一行) 47             row = sheet1.createRow(i);   48             //设置行长度自动              49             //row.setHeight((short)500);   50             row.setHeightInPoints(20);   51             //row.setZeroHeight(true);   52             for(int j=0;j<25;j++){          53                 //设置每个sheet每一列的宽度,自动,根据内容的最大长度确定。   54                 sheet1.autoSizeColumn(j, true);   55                 //创建一个基本的样式   56                CellStyle cellStyle =  JavaToExcel.createStyleCell(wb);   57                 //获得这一行的每j列   58                 cell = row.createCell(j);   59                 if(j==0){   60                     //设置文字在单元格里面的位置   61                     cellStyle = JavaToExcel.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_LEFT, CellStyle.VERTICAL_BOTTOM);   62                     //先创建字体样式,并把这个样式加到单元格的字体里面   63                     cellStyle.setFont(createFonts(wb));   64                     //把这个样式加到单元格里面   65                     cell.setCellStyle(cellStyle);                      66                     //给单元格设值   67                    if(i%2==0){ 68                        cell.setCellValue("尚晓飞是个大坏蛋dsafdsagfdsgserthgfdhytjfdsadfdsagrea");  69                    }else{ 70                        cell.setCellValue("尚晓飞是个大坏蛋");  71                    } 72                      73                 }else if(j==1){   74                     //设置文字在单元格里面的位置   75                     cellStyle = JavaToExcel.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);   76                     //设置这个样式的格式(Format)   77                     cellStyle = JavaToExcel.setCellFormat(helper,cellStyle, "#,##0.0000");                     78                     //先创建字体样式,并把这个样式加到单元格的字体里面   79                     cellStyle.setFont(createFonts(wb));   80                     //把这个样式加到单元格里面   81                     cell.setCellStyle(cellStyle);   82                     //给单元格设值   83                     cell.setCellValue(new Date());   84                 }else if(j==2){   85                     cellStyle = JavaToExcel.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);                       86                     cellStyle.setFont(createFonts(wb));   87                     cell.setCellStyle(cellStyle);   88                     cell.setCellValue(helper.createRichTextString("RichString"+i+j));                      89                 }else if(j==3){   90                     cellStyle = JavaToExcel.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);   91                     cellStyle = JavaToExcel.setCellFormat(helper,cellStyle, "MM-yyyy-dd");   92                     cell.setCellStyle(cellStyle);   93                     cell.setCellValue(new Date());   94                 }else if(j==24){   95                     cellStyle = JavaToExcel.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);   96                     cellStyle.setFont(createFonts(wb));   97                     //设置公式   98                     cell.setCellFormula("SUM(E"+(i+1)+":X"+(i+1)+")");                     99                 }else{                    100                     cellStyle = JavaToExcel.setCellStyleAlignment(cellStyle, CellStyle.ALIGN_CENTER, CellStyle.VERTICAL_CENTER);  101                     cellStyle = JavaToExcel.setFillBackgroundColors(cellStyle,IndexedColors.ORANGE.getIndex(),IndexedColors.ORANGE.getIndex(),CellStyle.SOLID_FOREGROUND);  102                     cell.setCellStyle(cellStyle);  103                     cell.setCellValue("");  104                 }  105             } 106             107             108             109         }  110         111       //合并单元格112         //参数含义:new CellRangeAddress(a, b, c,d)113         //a和c:第几行  b和d是第几列   行和列的下标从0开始   0表示第一行或第一列114         /**115          * 重点注意事项:116           1.单元格CELL和ROW对象下标都是从0开始的。117           2.单元格合并时new CellRangeAddress(a, b, c,d)a的值的行号必须要比c的行号小,如果大于c就不能正常合并单元格118           3.合并单元格的时候要合并的单单元格必须先创建,这样方便后面再次获取这个单元格来填充数据,主要就是因为合并时不能由后向前进行合并引起的。 119          */120         sheet1.addMergedRegion(new CellRangeAddress(0, 0, 0,24));121         Cell cell2=sheet1.getRow(0).getCell(0);122         cell2.setCellValue("将java中的对象转换成execl表格并保存的表内容");123       124         125         //输出  126         OutputStream os;127         try {128             os = new FileOutputStream(new File("c://JavaToExcel.xls"));129               wb.write(os);  130               os.close();     131         } catch (FileNotFoundException e) {132             // TODO Auto-generated catch block133             e.printStackTrace();134         }  135          136         137     }138     139     140     /** 141      * 边框 142      * @param wb 143      * @return 144      */  145     public static CellStyle createStyleCell(Workbook wb){  146         CellStyle cellStyle = wb.createCellStyle();  147         //设置一个单元格边框样式  148         cellStyle.setBorderBottom(CellStyle.BORDER_THIN);  149         cellStyle.setBorderTop(CellStyle.BORDER_THIN);  150         cellStyle.setBorderLeft(CellStyle.BORDER_THIN);  151         cellStyle.setBorderRight(CellStyle.BORDER_THIN);  152         /**153          * 154              CellStyle.BORDER_DOUBLE      双边线   155              CellStyle.BORDER_THIN        细边线   156              CellStyle.BORDER_MEDIUM      中等边线   157              CellStyle.BORDER_DASHED      虚线边线   158              CellStyle.BORDER_HAIR        小圆点虚线边线   159              CellStyle.BORDER_THICK       粗边线  160          */161         //设置一个单元格边框颜色  162         cellStyle.setRightBorderColor(IndexedColors.BLACK.getIndex());  163         cellStyle.setLeftBorderColor(IndexedColors.BLACK.getIndex());  164         cellStyle.setBottomBorderColor(IndexedColors.BLACK.getIndex());  165         cellStyle.setTopBorderColor(IndexedColors.BLACK.getIndex());          166         return cellStyle;  167     }  168     /** 169      * 设置文字在单元格里面的位置 170      * CellStyle.ALIGN_CENTER 171      * CellStyle.VERTICAL_CENTER 172      * @param cellStyle 173      * @param halign 174      * @param valign 175      * @return 176      */  177     public static CellStyle setCellStyleAlignment(CellStyle cellStyle,short halign,short valign){  178         //设置上下  179         cellStyle.setAlignment(CellStyle.ALIGN_LEFT);  180         //设置左右  181         cellStyle.setVerticalAlignment(CellStyle.VERTICAL_BOTTOM);  182         return cellStyle;  183     }  184     /** 185      * 格式化单元格 186      * 如#,##0.00,m/d/yy去HSSFDataFormat或XSSFDataFormat里面找 187      * @param cellStyle 188      * @param fmt 189      * @return 190      */  191     public static CellStyle setCellFormat(CreationHelper helper,CellStyle cellStyle,String fmt){  192         //还可以用其它方法创建format  193         cellStyle.setDataFormat(helper.createDataFormat().getFormat(fmt));  194         return cellStyle;  195     }  196     /** 197      * 前景和背景填充的着色 198      * @param cellStyle 199      * @param bg IndexedColors.ORANGE.getIndex(); 200      * @param fg IndexedColors.ORANGE.getIndex(); 201      * @param fp CellStyle.SOLID_FOREGROUND 202      * @return 203      */  204     public static CellStyle setFillBackgroundColors(CellStyle cellStyle,short bg,short fg,short fp){  205         //cellStyle.setFillBackgroundColor(bg);  206         cellStyle.setFillForegroundColor(fg);  207         cellStyle.setFillPattern(fp);  208         return cellStyle;  209     }  210     /** 211      * 设置字体 212      * @param wb 213      * @return 214      */  215     public static Font createFonts(Workbook wb){  216         //创建Font对象  217         Font font = wb.createFont();  218         //设置字体  219         font.setFontName("黑体");  220         //着色  221         font.setColor(HSSFColor.BLUE.index);  222         //斜体  223         font.setItalic(true);  224         //字体大小  225         font.setFontHeight((short)300);  226         return font;  227     }  228 }
View Code

 

poi----java操作java对象生成execl表单