java实现excel的导入导出(poi详解)
经过两天的研究,现在对excel导出有点心得了。我们使用的excel导出的jar包是poi这个阿帕奇公司的一个项目,后来被扩充了。是比较好用的excel导出工具。
下面来认识一下这个它吧。
我们知道要创建一张excel你得知道excel由什么组成,比如说sheet也就是一个工作表格,例如一行,一个单元格,单元格格式,单元格内容格式…这些都对应着poi里面的一个类。
一个excel表格:
HSSFWorkbook wb = new HSSFWorkbook();
一个工作表格(sheet):
HSSFSheet sheet = wb.createSheet("测试表格");
一行(row):
HSSFRow row1 = sheet.createRow(0);
一个单元格(cell):
HSSFCell cell2 = row2.createCell((short)0);
单元格格式(cellstyle):
HSSFCellStyle style4 = wb.createCellStyle()
单元格内容格式()
HSSFDataFormat format= wb.createDataFormat();
知道上面的基本知识后下面学起来就轻松了。我直接贴代码,这段代码会产生一个表格其实,代码长,但是很简单,一看就明白
importins.framework.dao.GenericDaoHibernate;importjava.io.FileOutputStream;
importjava.io.IOException;
importjava.sql.Connection;
importjava.sql.ResultSet;
import java.sql.SQLException;
importjava.sql.Statement;
importjava.util.ArrayList;
importjava.util.Date;
importjava.util.List;importjavax.annotation.Resource;importorg.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
importorg.apache.poi.hssf.usermodel.HSSFDataFormat;
importorg.apache.poi.hssf.usermodel.HSSFRow;
importorg.apache.poi.hssf.usermodel.HSSFSheet;
importorg.apache.poi.hssf.usermodel.HSSFWorkbook;
importorg.apache.poi.hssf.util.Region;
importorg.apache.poi.ss.usermodel.Font;
importorg.hibernate.HibernateException;
importorg.hibernate.SQLQuery;
importorg.hibernate.Session;
importorg.springframework.orm.hibernate3.HibernateCallback;
importorg.springframework.orm.hibernate3.HibernateTemplate;
importorg.springframework.stereotype.Component;importcom.reportforms.service.facade.FundDayDetailService;
@Component("fundDayDetailService")
publicclass FundDayDetailsServiceSpringImpl implements FundDayDetailService {@Resourceprivate HibernateTemplatehibernateTemplate;public HibernateTemplategetHibernateTemplate() {return hibernateTemplate;}public voidsetHibernateTemplate(HibernateTemplate hibernateTemplate) {this.hibernateTemplate =hibernateTemplate;}@SuppressWarnings("deprecation")public void outExcel(String fundsType,Date tradeDate, String assetsTypeCode){HSSFWorkbook wb = newHSSFWorkbook(); //--->创建了一个excel文件HSSFSheet sheet =wb.createSheet("理财资金报表"); //--->创建了一个工作簿HSSFDataFormat format=wb.createDataFormat(); //--->单元格内容格式sheet.setColumnWidth((short)3, 20*256); //---》设置单元格宽度,因为一个单元格宽度定了那么下面多有的单元格高度都确定了所以这个方法是sheet的sheet.setColumnWidth((short)4, 20*256); //--->第一个参数是指哪个单元格,第二个参数是单元格的宽度sheet.setDefaultRowHeight((short)300); // ---->有得时候你想设置统一单元格的高度,就用这个方法//样式1HSSFCellStyle style =wb.createCellStyle(); // 样式对象style.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直style.setAlignment(HSSFCellStyle.ALIGN_CENTER);//水平//设置标题字体格式Font font = wb.createFont(); //设置字体样式 font.setFontHeightInPoints((short)20); //--->设置字体大小font.setFontName("CourierNew"); //---》设置字体,是什么类型例如:宋体font1.setItalic(true); //--->设置是否是加粗style1.setFont(font1); //--->将字体格式加入到style1中 //style1.setFillForegroundColor(IndexedColors.DARK_YELLOW.getIndex());//style1.setFillPattern(CellStyle.SOLID_FOREGROUND);设置单元格颜色style1.setWrapText(true); //设置是否能够换行,能够换行为truestyle1.setBorderBottom((short)1); //设置下划线,参数是黑线的宽度style1.setBorderLeft((short)1); //设置左边框style1.setBorderRight((short)1); //设置有边框style1.setBorderTop((short)1); //设置下边框style4.setDataFormat(format.getFormat("¥#,##0")); //--->设置为单元格内容为货币格式style5.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00%")); //--->设置单元格内容为百分数格式//表格第一行HSSFRow row1 =sheet.createRow(0); //--->创建一行// 四个参数分别是:起始行,起始列,结束行,结束列sheet.addMergedRegion(newRegion(0, (short) 0, 0, (short) 15));row1.setHeightInPoints(25);HSSFCell cell1 =row1.createCell((short)0); //--->创建一个单元格cell1.setCellStyle(style);cell1.setCellValue("总公司资金运用日报明细表(理财资金)");//表格第二行sheet.addMergedRegion(newRegion(1,(short)0,1,(short)15));HSSFRow row2 = sheet.createRow(1);HSSFCell cell2 =row2.createCell((short)0);cell2.setCellValue("报告日期:"+new Date());cell2.setCellStyle(style2);//表格第三行sheet.addMergedRegion(newRegion(2,(short)0,2,(short)15));HSSFRow row3 = sheet.createRow(2);HSSFCellcell3 = row3.createCell((short)0);cell3.setCellValue("交易日期:"+new Date());cell3.setCellStyle(style2);//表格第四行sheet.addMergedRegion(newRegion(3, (short)0, 3, (short)2));HSSFRow row4 = sheet.createRow(3);row4.setHeightInPoints((short)75);HSSFCell cell4 =row4.createCell((short)0);HSSFCell cell4_0_1 =row4.createCell((short)1);cell4_0_1.setCellStyle(style2);HSSFCell cell4_0_2 =row4.createCell((short)2);cell4_0_2.setCellStyle(style2);cell4.setCellStyle(style1);cell4.setCellValue("代码/品种");HSSFCell cell4_1 =row4.createCell((short)3);cell4_1.setCellStyle(style1);cell4_1.setCellValue("投资类型");HSSFCell cell4_2 =row4.createCell((short)4);cell4_2.setCellStyle(style1);cell4_2.setCellValue("证券账户");HSSFCell cell4_3 =row4.createCell((short)5);cell4_3.setCellStyle(style1);cell4_3.setCellValue("份额\n单位:元");HSSFCell cell4_4 =row4.createCell((short)6);cell4_4.setCellStyle(style1);cell4_4.setCellValue("结转总成本\n单位:元");HSSFCell cell4_5 =row4.createCell((short)7);cell4_5.setCellStyle(style1);cell4_5.setCellValue("总市值\n单位:元");HSSFCell cell4_6 =row4.createCell((short)8);cell4_6.setCellStyle(style1);cell4_6.setCellValue("结转成本价\n单位:元");HSSFCell cell4_7 =row4.createCell((short)9);cell4_7.setCellStyle(style1);cell4_7.setCellValue("市价\n单位:元");HSSFCell cell4_8 =row4.createCell((short)10);cell4_8.setCellStyle(style1);cell4_8.setCellValue("持有期收益\n单位:%");HSSFCell cell4_9 =row4.createCell((short)11);cell4_9.setCellStyle(style1);cell4_9.setCellValue("总收益率(总收益/结转总成本)\n单位:%");HSSFCell cell4_10 =row4.createCell((short)12);cell4_10.setCellStyle(style1);cell4_10.setCellValue("前一日涨跌幅\n单位:%");HSSFCell cell4_11 =row4.createCell((short)13);cell4_11.setCellStyle(style1);cell4_11.setCellValue("盈亏\n单位:元");HSSFCell cell4_12 =row4.createCell((short)14);cell4_12.setCellStyle(style1);cell4_12.setCellValue("以实现收益\n单位:元");HSSFCell cell4_13 =row4.createCell((short)15);cell4_13.setCellStyle(style1);cell4_13.setCellValue("浮盈(亏)+已实现收益\n单位:元");//第五行sheet.addMergedRegion(newRegion(4, (short)0, 4, (short)2));HSSFRow row5 = sheet.createRow(4);HSSFCell cell5 =row5.createCell((short)0);HSSFCell cell5_1 =row5.createCell((short)1);cell5_1.setCellStyle(style2);HSSFCell cell5_2 =row5.createCell((short)2);cell5_2.setCellStyle(style2);cell5.setCellValue("投资资产合计");cell5.setCellStyle(style2);//第六行sheet.addMergedRegion(newRegion(5, (short)0, 5, (short)2));HSSFRow row6 = sheet.createRow(5);HSSFCell cell6 =row6.createCell((short)0);HSSFCell cell6_1 =row6.createCell((short)1);cell6_1.setCellStyle(style2);HSSFCell cell6_2 = row6.createCell((short)2);cell6_2.setCellStyle(style2);cell6.setCellValue("2、股票");cell6.setCellStyle(style2);//第七行sheet.addMergedRegion(newRegion(6, (short)0, 6, (short)2));HSSFRow row7 = sheet.createRow(6);HSSFCell cell7 = row7.createCell((short)0);HSSFCell cell7_1 =row7.createCell((short)1);cell7_1.setCellStyle(style2);HSSFCell cell7_2 =row7.createCell((short)2);cell7_2.setCellStyle(style2);cell7.setCellValue("2.1、境内A股");cell7.setCellStyle(style2);//第八行sheet.addMergedRegion(newRegion(7, (short)0, 7, (short)2));HSSFRow row8 = sheet.createRow(7);HSSFCell cell8 =row8.createCell((short)0);HSSFCell cell8_1 =row8.createCell((short)1);cell8_1.setCellStyle(style2);HSSFCell cell8_2 = row8.createCell((short)2);cell8_2.setCellStyle(style2);cell8.setCellValue("非限售股");cell8.setCellStyle(style2);Connection conn = null;Statement sm = null;ResultSet rs = null;try{conn =hibernateTemplate.getSessionFactory().openSession().connection();sm =conn.createStatement();rs = sm.executeQuery(sql);int j = 0; //增加行while(rs.next()){ HSSFRow rowN =sheet.createRow(8+j); //第9行...第n行List<String>list = new ArrayList<String>(); //存放每一行数据for(int i = 1 ; i<= 16 ; i++ ){list.add(rs.getString(i));}for(int k = 0 ; k< 16 ; k++){if(k<5){ HSSFCellcellN = rowN.createCell((short)k);cellN.setCellStyle(style3);cellN.setCellValue(list.get(k));}if((k>=5&& k<=9)||(k>=13)){HSSFCellcellN = rowN.createCell((short)k);cellN.setCellStyle(style4);cellN.setCellValue(Double.parseDouble(list.get(k)));}if(k>=10&& k<= 12){HSSFCellcellN = rowN.createCell((short)k);cellN.setCellStyle(style5);cellN.setCellValue(Double.parseDouble(list.get(k)));}}j++;}}catch(Exception e){e.printStackTrace();}finally{if(rs != null){try {rs.close();} catch (SQLExceptione) {// TODOAuto-generated catch blocke.printStackTrace();}}if(sm != null){try {sm.close();} catch(SQLException e) {// TODOAuto-generated catch blocke.printStackTrace();}}if(conn != null){try {conn.close();} catch(SQLException e) {// TODOAuto-generated catch blocke.printStackTrace();}}}FileOutputStream fileOut = null;try{ fileOut = new FileOutputStream("d:\\workbook.xls");wb.write(fileOut);//fileOut.close();System.out.print("OK");}catch(Exception e){e.printStackTrace();}finally{if(fileOut != null){try {fileOut.close();} catch (IOExceptione) {// TODOAuto-generated catch blocke.printStackTrace();}}}}}
特别注意!!!!本代码不能直接运行,主要是让你知道各种方法的用处。附件是一个能够直接运行出的表格。请注意要有数据库支持,这是一个web项目,但是java文件可以直接运行。里面包含jar包
转载于:https://blog.51cto.com/7194306/1612270
java实现excel的导入导出(poi详解)相关推荐
- Android VCard联系人备份恢复(导入/导出)详解
原文地址为: Android VCard联系人备份恢复(导入/导出)详解 首先我们简单的看下在Android中联系人的存储结构. 工作环境:android 2.3.3 联系人的主要数据存放在raw_c ...
- python接入excel_使用python将excel数据导入数据库过程详解
因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...
- mysql命令导入导出数据库_MYSQL命令行导入导出数据库详解
Mysql命令行导入数据库: 1,将要导入的.sql文件移至bin文件下,这样的路径比较方便 2,同上面导出的第1步 3,进入MySQL:mysql -u 用户名 -p 如我输入的命令行:mysql ...
- exp/expdp 与 imp/impdp命令导入导出数据库详解
exp/expdp 与 imp/impdp命令导入导出数据库详解 一.exp命令导出数据库 如何使exp的帮助以不同的字符集显示:set nls_lang=simplified chinese_chi ...
- 360浏览器怎么导入html,360浏览器收藏夹导入/导出方法详解
360浏览器收藏夹导入/导出方法详解 我们在使用360浏览器的时候,如果需要将收藏夹导出备份或者将已有导出的收藏夹导入,该如何操作呢?今天一起来看看360浏览器收藏夹导入/导出方法. 360浏览器收藏 ...
- oracle导入导出版本规则,Oracle不同版本间的导入导出命令详解 - wangzhuoyan的专栏 - CSDN博......
wangzhuoyan的专栏 明月松间照,清泉石上流 登录 注册 欢迎 退出 我的博客 配置 写文章 文章管理 博客首页 全站 当前博客 空间 博客 好友 相册 留言 用户操作 [发私信] [ ...
- oracle中imp命令详解,ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP命令详细对照...
ORACLE EXPDP IMPDP数据导入导出命令详解及同EXP IMP 命令详细对比 一.EXPDP IMPDP EXP IMP 可以实现 1.可以实现逻辑备份和逻辑恢复 2.可以在数据库用户之间 ...
- Java实现Excel导入导出操作详解
前言 本次封装是基于 POI 的二次开发,最终使用只需要调用一个工具类中的方法,就能满足业务中绝大部门的导入和导出需求. 1. 功能测试 1.1 测试准备 在做测试前,我们需要將[2. 环境准备]中的 ...
- 使用Transact-SQL进行数据导入导出方法详解
本文为原创,如需转载,请注明作者和出处,谢谢! 本文曾发表于IT168:http://tech.it168.com/db/s/2006-08-16/200608160913336_1.shtml ...
- Sqoop安装部署和数据的导入导出案例详解
目录 一.概述 二.Sqoop的工作机制 三.Sqoop1与Sqoop2架构对比 四.Sqoop安装部署 五.Sqoop的数据导入 1. 列举出所有的数据库 2. 准备表数据 3. 导入数据库表数据到 ...
最新文章
- 在目录下所有文件中查找字符串
- 【手把手教学】基于Maven构建方式使用Mybatis generator自动生成
- IE hack 条件语句
- Prepo —— 图标转化器
- powershell执行c语言文件,c语言中调用shell脚本
- CSS 设置背景颜色透明,文字不透明
- 信息系统安全等级保护备案任务详单
- ylb:SQL 系统函数
- java滚动条调整数值_急..JAVA 在画布上画拖动滚动条可扩大缩小的长方形
- 程序员面试金典——9.1上楼梯
- hiberante中get和load方法的区别
- Hadoop大数据技术原理与应用课后习题答案汇总
- Rhino(犀牛)的视口
- Scikit-Learn之利用高斯过程回归
- matlab环境下图像分形维数的计算,MATLAB环境下图像分形维数的计算.pdf
- 周记---学会推迟满足感 享受长远的趣味
- 51单片机的几种精确延时
- SPSS Modeler KNN分类器(第十七章)
- java实现微信App支付
- redis集群搭建及管理命令
热门文章
- Mac-使用技巧之快速新建txt文本
- php tp框架手册,php框架手册
- shell统计ip访问情况并分析访问日志
- MySQL在登陆时出现ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)错误...
- apache安装 windows
- egg 自学入门demo分享
- Beta冲刺 day1
- 【转】 浏览器分析模拟登陆过程
- MySQL:基础—数据分组
- PHP中使用cURL实现Get和Post请求的方法