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 block
133             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 }

时间: 2024-08-28 19:50:26

poi----java操作java对象生成execl表单的相关文章

Java操作Sqoop对象

Windows下使用Eclipse工具操作Sqoop1.4.6对象 Sqoop是用来在关系型数据库与Hadoop之间进行数据的导入导出,Windows下使用Eclipse工具操作时,需要先搭建好Hadoop的开发环境 参照Java操作HDFS对象的pom.xml配置,添加配置 <dependency> <groupId>org.apache.sqoop</groupId> <artifactId>sqoop</artifactId> <ve

[Java拾遗五]使用Session防止表单重复提交

申明:此文章属于转载, 转自博客: http://www.cnblogs.com/xdp-gacl/p/3859416.html在平时开发中,如果网速比较慢的情况下,用户提交表单后,发现服务器半天都没有响应,那么用户可能会以为是自己没有提交表单,就会再点击提交按钮重复提交表单,我们在开发中必须防止表单重复提交. 一.表单重复提交的常见应用场景 有如下的form.jsp页面 1 <%@ page language="java" import="java.util.*&qu

JavaScript之DOM-9 HTML DOM(HTML DOM概述、常用HTML DOM对象、HTML表单)

一.HTML DOM 概述 HTML DOM 概述 - HTML DOM 定义了用于 HTML 的一系列标准对象,以及访问和处理 HTML 文档的标准方法 - HTML 标签对象化 - 将网页中的每个元素都看作是一个对象 常用 HTML DOM 对象 标准 DOM 与 HTML DOM - HTML 标签对象化 - createElement - appendChild - setAttribute - removeAttribute - nodeName - ... - HTML DOM 提供

Yii 通过widget小物件生成添加表单

通过widget小物件创建添加商品的表单 视图里,表单以endWidget();?>结束 最终效果: 把表单提交过来的信息保存到数据库中去. 补充要点: 密码表单: <?php echo $form->passwordField(模型对象,’字段’); 单选表单: <?php echo $form->radioButtonList($user_model,'user_sex',$sex,array('separator'=>'&nbsp','labelOptio

在MySQL query browser中要导出execl表单

导出:  在MySQL query browser中要导出execl表单,只需要点击file,选择export execl就可以了(要先进入表单哦!). 导入: 数据库的数据太多一下导入有点麻烦,如何将excel的数据直接导入数据库呢? 第一步 另存为txt文档,名字最好为数据库的table名.  在这我们要保存问文本文件用制表符分割的那个,这样我们的数据就不会乱. 第二步 打开txt文档,点击另存为,修改编码,解决中文utf8.  这个时候的文件名必须和你要导入的table名称一样,否则在lo

连续12天的加班工作总结-根据客户选择来生成后续表单页面

今天终于不加班了!!!让我先撒花 高呼万岁!! 其实 这样的加班工作 有的时候真的挺没有效率的 有几次晚上 我是真的真的 感觉很累了 但是想到项目的进度 我还是默默的抓紧赶 由于有保密问题 没有代码 就谈谈遇到的问题 主要是两个需求的改变,为某行的app的 travel insurance 模块增加一个新功能 CR1 就是当用户购买保险的时候增加帮 friend or parent 购买  首先通过不同的customer 的类型 来显示是 是给 friend 购买还是 parent购买 然后出现

ios ASIHttpRequest库进行DELETE操作时delete带有参数表单的使用方法

1,普通的DELETE只需加上下述一句code: [request setRequestMethod:@"DELETE"]; 2,附带有参数表单的情况(一次删除请求): ASIFormDataRequest *request; NSURL *baseURL = [NSURL URLWithString:@"http://www.baidu.com/xx/"]; request = [ASIFormDataRequest requestWithURL:baseURL]

react生成的表单不能键入

刚学react,用react做了一个表单,生成后却发现,input输入不了内容,经百度后,发现react生成的表单如果要重新渲染其中的value应该改变state才会重新渲染,所以要给input绑定onChange事件,具体实现如下所示: FormItem.js class FormItem extends React.Component { constructor(props) { super(props); this.onInputChange = this.onInputChange.bi

MVC动态生成的表单:表单元素比较多 你就这样写

MVC动态生成的表单:表单元素比较多 你就这样写: public ActionResult ShoudaanActionResult(FormCollection from,T_UserM user) { List<string> daan = new List<string>(); for (int i = 4; i < from.Count; i++) { daan.Add(from[i].ToString()); } QSAcceptAnswer qaa = new Q