首页 > 代码库 > 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 }
poi----java操作java对象生成execl表单
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。