xmlns="http://www.w3.org/1999/xhtml"> | ||||||||||||||||
rel="canonical" href="http://blog.csdn.net/jerehedu/article/details/45195359"/> | ||||||||||||||||
http-equiv="Cache-Control" content="no-siteapp" />rel="alternate" media="handheld" href="#" /> | ||||||||||||||||
- 博客频道 - CSDN.NET | ||||||||||||||||
http-equiv="Content-Type" content="text/html; charset=utf-8" /> | ||||||||||||||||
name="description" content="一、介绍 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统、银行系统)。或者是:我们已经习惯用Excel打印。这样在我们实际的开发中,很多时候需要实现导入、导出Excel的应用。 目前,比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和Java Excel 下面我就" /> | ||||||||||||||||
rel="stylesheet" href="http://c.csdnimg.cn/public/common/toolbar/css/index.css"> | ||||||||||||||||
rel="Stylesheet" type="text/css" href="http://static.blog.csdn.net/skin/skin-white/css/style.css?v=1.1" /> | ||||||||||||||||
id="RSSLink" title="RSS" type="application/rss+xml" rel="alternate" href="/JerehEdu/rss/list" /> | ||||||||||||||||
rel="shortcut icon" href="http://c.csdnimg.cn/public/favicon.ico" /> | ||||||||||||||||
type="text/css" rel="stylesheet" href="http://static.blog.csdn.net/scripts/SyntaxHighlighter/styles/default.css" /> | ||||||||||||||||
rel="stylesheet" href="http://static.blog.csdn.net/css/csdn_blog_detail.min.css" /> | ||||||||||||||||
id="container"> |
||||||||||||||||
id="header"> |
||||||||||||||||
class="header"> |
||||||||||||||||
id="blog_title"> |
||||||||||||||||
href="http://blog.csdn.net/jerehedu">杰瑞教育 | ||||||||||||||||
致力IT培训领域,打造一流人才服务平台 | ||||||||||||||||
class="clear"> |
||||||||||||||||
class="clear"> |
||||||||||||||||
id="navigator"> |
||||||||||||||||
class="navigator_bg"> |
||||||||||||||||
class="navigator"> |
||||||||||||||||
src="http://static.blog.csdn.net/images/ico_list.gif">目录视图 | ||||||||||||||||
src="http://static.blog.csdn.net/images/ico_summary.gif">摘要视图 | ||||||||||||||||
src="http://static.blog.csdn.net/images/ico_rss.gif">订阅 | ||||||||||||||||
id="body"> |
||||||||||||||||
id="main"> |
||||||||||||||||
class="main"> |
||||||||||||||||
class="ad_class"> |
||||||||||||||||
class="notice tracking-ad" data-mod='popu_3' > |
||||||||||||||||
href="http://blog.csdn.net/blogdevteam/article/details/71710010"> | ||||||||||||||||
color=blue>【活动】2017 CSDN博客专栏评选 | ||||||||||||||||
  | ||||||||||||||||
href=" http://blog.csdn.net/broadview2006/article/details/72677185"> | ||||||||||||||||
color=red>【评论送书】SQL优化、深度学习、数据科学家 | ||||||||||||||||
  | ||||||||||||||||
href="http://blog.csdn.net/blogdevteam/article/details/72725354"> | ||||||||||||||||
color=blue>CSDN日报20170525 ——《狗蛋的寻亲之路,结识嵌入式世界的那只狗》 | ||||||||||||||||
  | ||||||||||||||||
href=" http://blog.csdn.net/blogdevteam/article/details/72626843"> | ||||||||||||||||
color=red>Python创意编程活动结果公布 | ||||||||||||||||
id="article_details" class="details"> |
||||||||||||||||
class="article_title"> |
||||||||||||||||
class="ico ico_type_Original"> | ||||||||||||||||
class="link_title">href="/jerehedu/article/details/45195359"> | ||||||||||||||||
Java中导入、导出Excel | ||||||||||||||||
class="article_manage clearfix"> |
||||||||||||||||
class="article_r"> |
||||||||||||||||
class="link_postdate">2015-04-22 15:03 | ||||||||||||||||
class="link_view" title="阅读次数">2110人阅读 | ||||||||||||||||
class="link_comments" title="评论次数"> href="#comments" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_pinglun'])">评论(1) | ||||||||||||||||
class="link_collect tracking-ad" data-mod="popu_171"> href="javascript:void(0);" onclick="javascript:collectArticle('Java%e4%b8%ad%e5%af%bc%e5%85%a5%e3%80%81%e5%af%bc%e5%87%baExcel','45195359');return false;" title="收藏">收藏 | ||||||||||||||||
class="link_report"> href="#report" onclick="javascript:report(45195359,2);return false;" title="举报">举报 | ||||||||||||||||
class="embody" style="display:none" id="embody"> |
||||||||||||||||
class="embody_t">本文章已收录于: | ||||||||||||||||
class="embody_c" id="lib" value="{"err":0,"msg":"ok","data":[]}"> |
||||||||||||||||
class="category clearfix"> |
||||||||||||||||
class="category_l"> |
||||||||||||||||
src="http://static.blog.csdn.net/images/category_icon.jpg"> | ||||||||||||||||
分类: | ||||||||||||||||
class="category_r"> |
||||||||||||||||
="GetCategoryArticles('2807947','JerehEdu','top','45195359');"> | ||||||||||||||||
onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_fenlei']);">java技术分享(14) | ||||||||||||||||
class="arrow-down" src="http://static.blog.csdn.net/images/arrow_triangle _down.jpg" style="display:inline;"> | ||||||||||||||||
class="arrow-up" src="http://static.blog.csdn.net/images/arrow_triangle_up.jpg" style="display:none;"> | ||||||||||||||||
class="subItem"> |
||||||||||||||||
class="subItem_t">href="http://blog.csdn.net/JerehEdu/article/category/2807947" target="_blank">作者同类文章class="J_close">X |
||||||||||||||||
|
||||||||||||||||
class="bog_copyright"> |
||||||||||||||||
class ="copyright_p" >版权声明:本文为博主原创文章,未经博主允许不得转载。 |
||||||||||||||||
id="article_content" class="article_content tracking-ad" data-mod=popu_307 data-dsm = "post" > |
||||||||||||||||
|
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px"> 当前B/S模式已成为应用开发的主流,而在企业办公系统中,常常有客户这样子要求:你要把我们的报表直接用Excel打开(电信系统、银行系统)。或者是:我们已经习惯用Excel打印。这样在我们实际的开发中,很多时候需要实现导入、导出Excel的应用。 |
||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 目前,比较常用的实现Java导入、导出Excel的技术有两种Jakarta POI和Java Excel | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 下面我就分别讲解一下如何使用这两个技术实现导入、导出Excel | ||||||||||||||||
|
||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> Jakarta POI 是一套用于访问微软格式文档的Java API。Jakarta POI有很多组件组成,其中有用于操作Excel格式文件的HSSF和用于操作Word的HWPF,在各种组件中目前只有用于操作Excel的HSSF相对成熟。官方主页target="_blank" href="http://poi.apache.org/index.html">http://poi.apache.org/index.html,API文档target="_blank" href="http://poi.apache.org/apidocs/index.html">http://poi.apache.org/apidocs/index.html | ||||||||||||||||
style="padding:5px 0px; color:#3399cc; font-size:18px; font-family:微软雅黑,宋体,黑体,Arial; height:25px; line-height:25px; border-bottom-width:1px; border-bottom-style:solid; border-bottom-color:#3399cc; margin:15px!important"> |
||||||||||||||||
2.1 环境配置 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 2.1.1下载jar | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 官方下载:target="_blank" href="http://poi.apache.org/download.html">http://poi.apache.org/download.html这里可以下载到它的最新版本和文档,目前最新版本是3.7,这里使用比较稳定的3.6版。 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 2.1.2加入jar包 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 将根目录下的poi-3.6-20091214.jar和Lib目录下三个通用包 commons-logging-1.1.jar junit-3.8.1.jar log4j-1.2.13.jar拷贝到项目的Lib下 | ||||||||||||||||
style="padding:5px 0px; color:#3399cc; font-size:18px; font-family:微软雅黑,宋体,黑体,Arial; height:25px; line-height:25px; border-bottom-width:1px; border-bottom-style:solid; border-bottom-color:#3399cc; margin:15px!important"> |
||||||||||||||||
2.2 Jakarta POI HSSF API组件 | ||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px"> HSSF(用于操作Excel的组件)提供给用户使用的对象在rg.apache.poi.hssf.usermodel包中,主要部分包括Excel对象,样式和格式,还有辅助操作。有以下几种对象:style="font-family:'Microsoft YaHei'"> |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">常用组件: |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">HSSFWorkbook excel的文档对象 |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">HSSFSheet excel的表单 |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">HSSFRow excel的行 |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">HSSFCell excel的格子单元 |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">HSSFFont excel字体 |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">HSSFDataFormat 日期格式 |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">HSSFHeader sheet头 |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">HSSFFooter sheet尾(只有打印的时候才能看到效果) |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">样式: |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">HSSFCellStyle cell样式 |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">辅助操作包括: |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">HSSFDateUtil 日期 |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">HSSFPrintSetup 打印 |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px">HSSFErrorConstants 错误信息表 |
||||||||||||||||
style="padding:5px 0px; color:#3399cc; font-size:18px; font-family:微软雅黑,宋体,黑体,Arial; height:25px; line-height:25px; border-bottom-width:1px; border-bottom-style:solid; border-bottom-color:#3399cc; margin:15px!important"> |
||||||||||||||||
2.3 基本操作步骤 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 首先,理解一下一个Excel的文件的组织形式,一个Excel文件对应于一个workbook(HSSFWorkbook),一个workbook可以有多个sheet(HSSFSheet)组成,一个sheet是由多个row(HSSFRow)组成,一个row是由多个cell(HSSFCell)组成。 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 基本操作步骤: | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">1、用HSSFWorkbook打开或者创建“Excel文件对象” | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">2、用HSSFWorkbook对象返回或者创建Sheet对象 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">3、用Sheet对象返回行对象,用行对象得到Cell对象 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">4、对Cell对象读写。 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 下面来看一个动态生成Excel文件的例子: | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java">//创建HSSFWorkbook对象 |
||||||||||||||||
HSSFWorkbook wb = new HSSFWorkbook(); | ||||||||||||||||
//创建HSSFSheet对象 | ||||||||||||||||
HSSFSheet sheet = wb.createSheet("sheet0"); | ||||||||||||||||
//创建HSSFRow对象 | ||||||||||||||||
HSSFRow row = sheet.createRow(0); | ||||||||||||||||
//创建HSSFCell对象 | ||||||||||||||||
HSSFCell cell=row.createCell(0); | ||||||||||||||||
//设置单元格的值 | ||||||||||||||||
cell.setCellValue("单元格中的中文"); | ||||||||||||||||
//输出Excel文件 | ||||||||||||||||
FileOutputStream output=new FileOutputStream("d:\\workbook.xls"); | ||||||||||||||||
wkb.write(output); | ||||||||||||||||
output.flush(); | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> HSSF读取文件同样还是使用这几个对象,只是把相应的createXXX方法变成了getXXX方法即可。可见只要理解了其中原理,不管是读还是写亦或是特定格式都可以轻松实现,正所谓知其然更要知其所以然。 | ||||||||||||||||
style="padding:5px 0px; color:#3399cc; font-size:18px; font-family:微软雅黑,宋体,黑体,Arial; height:25px; line-height:25px; border-bottom-width:1px; border-bottom-style:solid; border-bottom-color:#3399cc; margin:15px!important"> |
||||||||||||||||
2.4 导出Excel应用实例 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; line-height:1.5"> 在2.3中我们寥寥几行代码实际上就已经就是实现了导出Excel一个简单示例,下面我们在看如何实现导出如图所示的Excel表格? | ||||||||||||||||
style="font-family:'Microsoft YaHei'; line-height:1.5">src="http://images.cnitblog.com/blog2015/708076/201503/170838550954408.png" alt=""> | ||||||||||||||||
style="font-family:'Microsoft YaHei'; line-height:1.5"> 代码如下:(实际开发中应封装到业务层组件中,然后在控制层中调用。这里直接写在控制层组件,如Servlet的doGet/doPost方法或Struts框架的execute方法中) | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java">//创建HSSFWorkbook对象(excel的文档对象) |
||||||||||||||||
HSSFWorkbook wb = new HSSFWorkbook(); | ||||||||||||||||
//建立新的sheet对象(excel的表单) | ||||||||||||||||
HSSFSheet sheet=wkb.createSheet("成绩表"); | ||||||||||||||||
//在sheet里创建第一行,参数为行索引(excel的行),可以是0~65535之间的任何一个 | ||||||||||||||||
HSSFRow row1=sheet.createRow(0); | ||||||||||||||||
//创建单元格(excel的单元格,参数为列索引,可以是0~255之间的任何一个 | ||||||||||||||||
HSSFCell cell=row1.createCell(0); | ||||||||||||||||
//设置单元格内容 | ||||||||||||||||
cell.setCellValue("学员考试成绩一览表"); | ||||||||||||||||
//合并单元格CellRangeAddress构造参数依次表示起始行,截至行,起始列, 截至列 | ||||||||||||||||
sheet.addMergedRegion(new CellRangeAddress(0,0,0,3)); | ||||||||||||||||
//在sheet里创建第二行 | ||||||||||||||||
HSSFRow row2=sheet.createRow(1); | ||||||||||||||||
//创建单元格并设置单元格内容 | ||||||||||||||||
row2.createCell(0).setCellValue("姓名"); | ||||||||||||||||
row2.createCell(1).setCellValue("班级"); | ||||||||||||||||
row2.createCell(2).setCellValue("笔试成绩"); | ||||||||||||||||
row2.createCell(3).setCellValue("机试成绩"); | ||||||||||||||||
//在sheet里创建第三行 | ||||||||||||||||
HSSFRow row3=sheet.createRow(2); | ||||||||||||||||
row3.createCell(0).setCellValue("李明"); | ||||||||||||||||
row3.createCell(1).setCellValue("As178"); | ||||||||||||||||
row3.createCell(2).setCellValue(87); | ||||||||||||||||
row3.createCell(3).setCellValue(78); | ||||||||||||||||
//.....省略部分代码 | ||||||||||||||||
//输出Excel文件 | ||||||||||||||||
OutputStream output=response.getOutputStream(); | ||||||||||||||||
response.reset(); | ||||||||||||||||
response.setHeader("Content-disposition", "attachment; filename=details.xls"); | ||||||||||||||||
response.setContentType("application/msexcel"); | ||||||||||||||||
wkb.write(output); | ||||||||||||||||
output.close(); | ||||||||||||||||
retrun null; | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 加下划线这部分代码是B/S模式中采用的输出方式,而不是输出到本地指定的磁盘目录。该代码表示将details.xls的Excel文件通过应答实体(response)输出给请求的客户端浏览器,客户端可保存或直接打开。 | ||||||||||||||||
style="padding:5px 0px; color:#3399cc; font-size:18px; font-family:微软雅黑,宋体,黑体,Arial; height:25px; line-height:25px; border-bottom-width:1px; border-bottom-style:solid; border-bottom-color:#3399cc; margin:15px!important"> |
||||||||||||||||
2.5 样式设置 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 在实际应用中导出的Excel文件往往需要阅读和打印的,这就需要对输出的Excel文档进行排版和样式的设置,主要操作有合并单元格、设置单元格样式、设置字体样式等。 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 2.5.1单元格合并 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 使用HSSFSheet的addMergedRegion()方法 | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java">public int addMergedRegion(CellRangeAddress region) |
||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 参数CellRangeAddress 表示合并的区域,构造方法如下: | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java">CellRangeAddress(int firstRow, int lastRow, int firstCol, int lastCol) |
||||||||||||||||
class ="p0">style="font-family:'Microsoft YaHei'; font-size:14px"> 构造参数依次表示起始行,截至行,起始列, 截至列。style="font-family:'Microsoft YaHei'">示例代码参照2.4部分 |
||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">2.5.2设置单元格的行高、列宽 | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java">HSSFSheet sheet=wb.createSheet(); |
||||||||||||||||
sheet.setDefaultRowHeightInPoints(10);//设置缺省列高sheet.setDefaultColumnWidth(20);//设置缺省列宽 | ||||||||||||||||
//设置指定列的列宽,256 * 50这种写法是因为width参数单位是单个字符的256分之一 | ||||||||||||||||
sheet.setColumnWidth(cell.getColumnIndex(), 256 * 50); | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 2.5.2单元格样式 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 1、创建HSSFCellStyle | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java"> HSSFCellStyle cellStyle=wkb.createCellStyle() |
||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 2、设置样式 | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java"> // 设置单元格的横向和纵向对齐方式,具体参数就不列了,参考HSSFCellStyle |
||||||||||||||||
cellStyle.setAlignment(HSSFCellStyle.ALIGN_JUSTIFY); | ||||||||||||||||
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER); | ||||||||||||||||
/* 设置单元格的填充方式,以及前景颜色和背景颜色 | ||||||||||||||||
三点注意: | ||||||||||||||||
1.如果需要前景颜色或背景颜色,一定要指定填充方式,两者顺序无所谓; | ||||||||||||||||
2.如果同时存在前景颜色和背景颜色,前景颜色的设置要写在前面; | ||||||||||||||||
3.前景颜色不是字体颜色。 | ||||||||||||||||
*/ | ||||||||||||||||
//设置填充方式(填充图案) | ||||||||||||||||
cellStyle.setFillPattern(HSSFCellStyle.DIAMONDS); | ||||||||||||||||
//设置前景色 | ||||||||||||||||
cellStyle.setFillForegroundColor(HSSFColor.RED.index); | ||||||||||||||||
//设置背景颜色 | ||||||||||||||||
cellStyle.setFillBackgroundColor(HSSFColor.LIGHT_YELLOW.index); | ||||||||||||||||
// 设置单元格底部的边框及其样式和颜色 | ||||||||||||||||
// 这里仅设置了底边边框,左边框、右边框和顶边框同理可设 | ||||||||||||||||
cellStyle.setBorderBottom(HSSFCellStyle.BORDER_SLANTED_DASH_DOT); | ||||||||||||||||
cellStyle.setBottomBorderColor(HSSFColor.DARK_RED.index); | ||||||||||||||||
//设置日期型数据的显示样式 | ||||||||||||||||
cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")); | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 3、将样式应用于单元格 | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java"> cell.setCellStyle(cellStyle); |
||||||||||||||||
//将样式应用到行,但有些样式只对单元格起作用 | ||||||||||||||||
row.setRowStyle(cellStyle); | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 2.5.2设置字体样式 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 1、创建HSSFFont对象(调用HSSFWorkbook 的createFont方法) | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java">HSSFWorkbook wb=new HSSFWorkbook(); |
||||||||||||||||
HSSFFont fontStyle=wb.createFont(); | ||||||||||||||||
HSSFWorkbook wb=new HSSFWorkbook (); | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 2、设置字体各种样式 | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java"> //设置字体样式 |
||||||||||||||||
fontStyle.setFontName("宋体"); | ||||||||||||||||
//设置字体高度 | ||||||||||||||||
fontStyle.setFontHeightInPoints((short)20); | ||||||||||||||||
//设置字体颜色 | ||||||||||||||||
font.setColor(HSSFColor.BLUE.index); | ||||||||||||||||
//设置粗体 | ||||||||||||||||
fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD); | ||||||||||||||||
//设置斜体 | ||||||||||||||||
font.setItalic(true); | ||||||||||||||||
//设置下划线 | ||||||||||||||||
font.setUnderline(HSSFFont.U_SINGLE); | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 3、将字体设置到单元格样式 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">name="code" class="java">//字体也是单元格格式的一部分,所以从属于HSSFCellStyle |
||||||||||||||||
// 将字体对象赋值给单元格样式对象 | ||||||||||||||||
cellStyle.setFont(font); | ||||||||||||||||
// 将单元格样式应用于单元格 | ||||||||||||||||
cell.setCellStyle(cellStyle); | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
style="padding:5px 0px; color:#3399cc; font-size:18px; font-family:微软雅黑,宋体,黑体,Arial; height:25px; line-height:25px; border-bottom-width:1px; border-bottom-style:solid; border-bottom-color:#3399cc; margin:15px!important"> |
||||||||||||||||
2.6 导入Excel应用实例 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 实现将已存在的Excel文件中的数据导入到系统中的基本步骤同导出十分的类似,关键在于要了解要导入Excel文件的结构,比如数据有哪些列、读取数据起始位置(有效数据从第几行几列开始)等。在实际项目中由于这些数据(Excel文件)往往来自于日常办公人员或其他系统平台产生的业务数据,因此这些Excel文件的数据格式要有统一的要求,并提供访问接口(指访问途径),这样在所需数据的系统中就可通过提供这个访问接口调用方法,从而获得数据。解决方案采用Web | ||||||||||||||||
Service是不错的选择。这里,我们就以导入2..4所产生的excel表为例,重点掌握如何编写导入Excel代码 | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java">public List<ScoreInfo> loadScoreInfo(String xlsPath) throws IOException{ |
||||||||||||||||
List temp = new ArrayList(); | ||||||||||||||||
FileInputStream fileIn = new FileInputStream(xlsPath); | ||||||||||||||||
//根据指定的文件输入流导入Excel从而产生Workbook对象 | ||||||||||||||||
Workbook wb0 = new HSSFWorkbook(fileIn); | ||||||||||||||||
//获取Excel文档中的第一个表单 | ||||||||||||||||
Sheet sht0 = wb0.getSheetAt(0); | ||||||||||||||||
//对Sheet中的每一行进行迭代 | ||||||||||||||||
for (Row r : sht0) { | ||||||||||||||||
//如果当前行的行号(从0开始)未达到2(第三行)则从新循环 | ||||||||||||||||
If(r.getRowNum()<1){ | ||||||||||||||||
continue; | ||||||||||||||||
} | ||||||||||||||||
//创建实体类 | ||||||||||||||||
ScoreInfo info=new ScoreInfo(); | ||||||||||||||||
//取出当前行第1个单元格数据,并封装在info实体stuName属性上 | ||||||||||||||||
info.setStuName(r.getCell(0).getStringCellValue()); | ||||||||||||||||
info.setClassName(r.getCell(1).getStringCellValue()); | ||||||||||||||||
info.setRscore(r.getCell(2).getNumericCellValue()); | ||||||||||||||||
info.setLscore(r.getCell(3).getNumericCellValue()); | ||||||||||||||||
temp.add(info); | ||||||||||||||||
} | ||||||||||||||||
fileIn.close(); | ||||||||||||||||
return temp; | ||||||||||||||||
} | ||||||||||||||||
|
||||||||||||||||
style ="text-align:left"> style="font-family:'Microsoft YaHei'">Java Excel是一开放源码项目,通过它Java开发人员可以读取Excel文件的内容、创建新的Excel文件、更新已经存在的Excel文件。jxl 由于其小巧 易用的特点, 逐渐已经取代了 POI-excel的地位, 成为了越来越多的java开发人员生成excel文件的首选。Java Excel的特征: |
||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">● 支持Excel 95-2000的所有版本 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> ● 生成Excel 2000标准格式 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> ● 支持字体、数字、日期格式化操作 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> ● 支持对单元格加阴影和加色彩; | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">● 修改存在的工作表; |
||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> ● 支持图像和图表 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">● 日志记录可以定制 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">● 更小更快更省内存 | ||||||||||||||||
style ="text-align:left">style="font-family:'Microsoft YaHei'; font-size:14px"> 应该说以上功能已经能够大致满足我们的需要。最关键的是这套API是纯Java的,并不依赖Windows系统,即使运行在Linux下,它同样能够正确的处理Excel文件。另外需要说明的是,这套API对图形和图表的支持很有限,而且仅仅识别PNG格式。在线帮助文档style="font-family:'Microsoft YaHei'">target="_blank" href="http://jexcelapi.sourceforge.net/resources/javadocs/2_6_10/docs/index.html">http://jexcelapi.sourceforge.net/resources/javadocs/2_6_10/docs/index.html |
||||||||||||||||
style ="text-align:left">style="font-family:'Microsoft YaHei'; font-size:14px"> 在这里我们将通过一些实例,学习掌握读取、新建、更新,其中也包括常见格式的设置:字体、颜色、背景、合并单元格等操作,有这些其实已经基本足够应付大部分问题了。 |
||||||||||||||||
style="padding:5px 0px; color:#3399cc; font-size:18px; font-family:微软雅黑,宋体,黑体,Arial; height:25px; line-height:25px; border-bottom-width:1px; border-bottom-style:solid; border-bottom-color:#3399cc; margin:15px!important"> |
||||||||||||||||
3.1环境配置 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 3.1.1下载 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 下载地址 target="_blank" href="http://www.andykhan.com/jexcelapi/"> | ||||||||||||||||
http://www.andykhan.com/jexcelapi/ | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 3.1.2 加入jar包 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 将jxl.jar拷贝到项目的Lib下 | ||||||||||||||||
style="padding:5px 0px; color:#3399cc; font-size:18px; font-family:微软雅黑,宋体,黑体,Arial; height:25px; line-height:25px; border-bottom-width:1px; border-bottom-style:solid; border-bottom-color:#3399cc; margin:15px!important"> |
||||||||||||||||
3.2 使用Java Excel Api 导出 Excel文件 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 下面我们在看如何使用Java Excel实现导出Excel表格? | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 代码如下:(实际开发中应封装到业务层组件中,然后在控制层中调用。这里直接写在控制层组件,如Servlet的doGet/doPost方法或Struts框架的execute方法中) | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">name="code" class="java">//获得输出流,该输出流的输出介质是客户端浏览器 |
||||||||||||||||
OutputStream output=response.getOutputStream(); | ||||||||||||||||
response.reset(); | ||||||||||||||||
response.setHeader("Content-disposition","attachment; filename=temp.xls"); | ||||||||||||||||
response.setContentType("application/msexcel"); | ||||||||||||||||
//创建可写入的Excel工作薄,且内容将写入到输出流,并通过输出流输出给客户端浏览 | ||||||||||||||||
WritableWorkbook wk=Workbook.createWorkbook(output); | ||||||||||||||||
///创建可写入的Excel工作表 | ||||||||||||||||
WritableSheet sheet=wk.createSheet("成绩表", 0); | ||||||||||||||||
//把单元格(column, row)到单元格(column1, row1)进行合并。 | ||||||||||||||||
//mergeCells(column, row, column1, row1); | ||||||||||||||||
sheet.mergeCells(0,0, 4,0);//单元格合并方法 | ||||||||||||||||
//创建WritableFont 字体对象,参数依次表示黑体、字号12、粗体、非斜体、不带下划线、亮蓝色 | ||||||||||||||||
WritableFont titleFont=new WritableFont(WritableFont.createFont("黑体"),12,WritableFont.BOLD,false,UnderlineStyle.NO_UNDERLINE,Colour.LIGHT_BLUE); | ||||||||||||||||
//创建WritableCellFormat对象,将该对象应用于单元格从而设置单元格的样式 | ||||||||||||||||
WritableCellFormat titleFormat=new WritableCellFormat(); | ||||||||||||||||
//设置字体格式 | ||||||||||||||||
titleFormat.setFont(titleFont); | ||||||||||||||||
//设置文本水平居中对齐 | ||||||||||||||||
titleFormat.setAlignment(Alignment.CENTRE); | ||||||||||||||||
//设置文本垂直居中对齐 | ||||||||||||||||
titleFormat.setVerticalAlignment(VerticalAlignment.CENTRE); | ||||||||||||||||
//设置背景颜色 | ||||||||||||||||
titleFormat.setBackground(Colour.GRAY_25); | ||||||||||||||||
//设置自动换行 | ||||||||||||||||
titleFormat.setWrap(true); | ||||||||||||||||
//添加Label对象,参数依次表示在第一列,第一行,内容,使用的格式 | ||||||||||||||||
Label lab_00=new Label(0,0,"学员考试成绩一览表",titleFormat); | ||||||||||||||||
//将定义好的Label对象添加到工作表上,这样工作表的第一列第一行的内容为‘学员考试成绩一览表’并应用了titleFormat定义的样式 | ||||||||||||||||
sheet.addCell(lab_00); | ||||||||||||||||
WritableCellFormat cloumnTitleFormat=new WritableCellFormat(); | ||||||||||||||||
cloumnTitleFormat.setFont(new WritableFont(WritableFont.createFont("宋体"),10,WritableFont.BOLD,false)); | ||||||||||||||||
cloumnTitleFormat.setAlignment(Alignment.CENTRE); | ||||||||||||||||
Label lab_01=new Label(0,1,"姓名",cloumnTitleFormat); | ||||||||||||||||
Label lab_11=new Label(1,1,"班级",cloumnTitleFormat); | ||||||||||||||||
Label lab_21=new Label(2,1,"笔试成绩",cloumnTitleFormat); | ||||||||||||||||
Label lab_31=new Label(3,1,"上机成绩",cloumnTitleFormat); | ||||||||||||||||
Label lab_41=new Label(4,1,"考试日期",cloumnTitleFormat); | ||||||||||||||||
sheet.addCell(lab_01); | ||||||||||||||||
sheet.addCell(lab_11); | ||||||||||||||||
sheet.addCell(lab_21); | ||||||||||||||||
sheet.addCell(lab_31); | ||||||||||||||||
sheet.addCell(lab_41); | ||||||||||||||||
sheet.addCell(new Label(0,2,"李明")); | ||||||||||||||||
sheet.addCell(new Label(1,2,"As178")); | ||||||||||||||||
//定义数字格式 | ||||||||||||||||
NumberFormat nf=new NumberFormat("0.00"); | ||||||||||||||||
WritableCellFormat wcf=new WritableCellFormat(nf); | ||||||||||||||||
//类似于Label对象,区别Label表示文本数据,Number表示数值型数据 | ||||||||||||||||
Number numlab_22=new Number(2,2,78,wcf); | ||||||||||||||||
sheet.addCell(numlab_22); | ||||||||||||||||
sheet.addCell(newNumber(3,2,87,new WritableCellFormat(new NumberFormat("#.##") ))); | ||||||||||||||||
//定义日期格式 | ||||||||||||||||
DateFormat df=new DateFormat("yyyy-MM-dd hh:mm:ss"); | ||||||||||||||||
//创建WritableCellFormat对象 | ||||||||||||||||
WritableCellFormat datewcf=new WritableCellFormat(df); | ||||||||||||||||
//类似于Label对象,区别Label表示文本数据,DateTime表示日期型数据 | ||||||||||||||||
DateTime dtLab_42=new DateTime(4,2,new Date(),datewcf); | ||||||||||||||||
sheet.addCell(dtLab_42); | ||||||||||||||||
//将定义的工作表输出到之前指定的介质中(这里是客户端浏览器) | ||||||||||||||||
wk.write(); | ||||||||||||||||
//操作完成时,关闭对象,释放占用的内存空间 | ||||||||||||||||
wk.close(); | ||||||||||||||||
加下划线这部分代码是B/S模式中采用的输出方式,而不是输出到本地指定的磁盘目录。该代码表示将temp.xls的Excel文件通过应答实体(response)输出给请求的客户端浏览器,下载到客户端本地(保存或直接打开)。若要直接输出到磁盘文件可采用下列代码替换加下划线这部分代码 | ||||||||||||||||
File file=new File("D://temp.xls"); | ||||||||||||||||
WritableWorkbook wwb = Workbook.createWorkbook(file); | ||||||||||||||||
style="padding:5px 0px; color:#3399cc; font-size:18px; font-family:微软雅黑,宋体,黑体,Arial; height:25px; line-height:25px; border-bottom-width:1px; border-bottom-style:solid; border-bottom-color:#3399cc; margin:15px!important"> |
||||||||||||||||
3.3高级操作 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 3.3.1数据格式化 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 在Excel中不涉及复杂的数据类型,能够比较好的处理字串、数字和日期已经能够满足一般的应用即可。 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 数据的格式化涉及到的是字体、粗细、字号等元素,这些功能主要由 WritableFont和WritableCellFormat类来负责。例如: | ||||||||||||||||
align ="left">style="font-family:'Microsoft YaHei'; font-size:14px">① WritableFont font=new WritableFont(WritableFont.createFont("宋体"),12,WritableFont.NO_BOLD ); |
||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">② WritableCellFormat format1=new WritableCellFormat(font); | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">③ Label label=new Label(0,0,”data 4 test”,format1); | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 其中 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">I.指定了字串格式:字体为宋体,字号16,加粗显示。WritableFont有非常丰富的构造子,供不同情况下使用,jExcelAPI的java-doc中有详细列表,这里不再列出。 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">II. 处代码使用了WritableCellFormat类,这个类非常重要,通过它可以指定单元格的各种属性,如上例代码所示。 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">III. 处使用了Label类的构造子,指定了显示的位置,文本内容,字串被赋予的格式。 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px">与Label类似的Number、DateTime,区别Label表示文本数据;Number表示数值数据,可使NumberFormat格式化数据;用DateTime表示日期型数据,可应用DateFormat格式化数据。 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 3.3.2单元格操作 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> Excel中很重要的一部分是对单元格的操作,比如行高、列宽、单元格合并等,所幸jExcelAPI提供了这些支持。这些操作相对比较简单,下面只介绍一下相关的API。 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 1、 合并单元格 | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java">WritableSheet.mergeCells(int m,int n,int p,int q); |
||||||||||||||||
//作用是从(m,n)到(p,q)的单元格全部合并,比如: | ||||||||||||||||
WritableSheet sheet=book.createSheet(“第一页”,0); | ||||||||||||||||
//合并第一列第一行到第六列第一行的所有单元格 | ||||||||||||||||
sheet.mergeCells(0,0,5,0); | ||||||||||||||||
//合并既可以是横向的,也可以是纵向的。合并后的单元格不能再次进行合并,否则会触发异常。 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 2、 行高和列宽 | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java"> writableSheet.setRowView(int i,int height); |
||||||||||||||||
//作用是指定第i+1行的高度,比如: | ||||||||||||||||
// 将第一行的高度设为200 | ||||||||||||||||
sheet.setRowView(0,200); | ||||||||||||||||
WritableSheet.setColumnView(int i,int width); | ||||||||||||||||
//作用是指定第i+1列的宽度,比如: | ||||||||||||||||
//将第一列的宽度设为30 | ||||||||||||||||
sheet.setColumnView(0,30); | ||||||||||||||||
style="padding:5px 0px; color:#3399cc; font-size:18px; font-family:微软雅黑,宋体,黑体,Arial; height:25px; line-height:25px; border-bottom-width:1px; border-bottom-style:solid; border-bottom-color:#3399cc; margin:15px!important"> |
||||||||||||||||
3.4 从Excel文件读取数据表 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 我们就以导入3.2所产生的excel表为例,掌握如何编写导入Excel代码(该代码封装在业务层方法) | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java">public List<ScoreInfo> loadScoreInfo(String xlsPath) throws IOException, BiffException{ |
||||||||||||||||
//导入已存在的Excel文件,获得只读的工作薄对象 | ||||||||||||||||
FileInputStream fis=new FileInputStream(xlsPath); | ||||||||||||||||
Workbook wk=Workbook.getWorkbook(fis); | ||||||||||||||||
//获取第一张Sheet表 | ||||||||||||||||
Sheet sheet=wk.getSheet(0); | ||||||||||||||||
//获取总行数 | ||||||||||||||||
int rowNum=sheet.getRows(); | ||||||||||||||||
//从数据行开始迭代每一行 | ||||||||||||||||
for(int i=2;i<rowNum;i++){ | ||||||||||||||||
ScoreInfo info=new ScoreInfo(); | ||||||||||||||||
//getCell(column,row),表示取得指定列指定行的单元格(Cell) | ||||||||||||||||
//getContents()获取单元格的内容,返回字符串数据。适用于字符型数据的单元格 | ||||||||||||||||
//使用实体类封装单元格数据 | ||||||||||||||||
info.setStuName(sheet.getCell(0, i).getContents()); | ||||||||||||||||
info.setClassName(sheet.getCell(1, i).getContents()); | ||||||||||||||||
//判断单元格的类型,单元格主要类型LABEL、NUMBER、DATE if(sheet.getCell(2,i).getType==CellType.NUMBER){ | ||||||||||||||||
//转化为数值型单元格 | ||||||||||||||||
NumberCell numCell=(NumberCell)sheet.getCell(2,i); | ||||||||||||||||
//NumberCell的getValue()方法取得单元格的数值型数据 | ||||||||||||||||
info.setRscore(numCell.getValue()); | ||||||||||||||||
} | ||||||||||||||||
if(sheet.getCell(3,i).getType==CellType.NUMBER){ | ||||||||||||||||
NumberCell numCell=(NumberCell)sheet.getCell(3,i); | ||||||||||||||||
info.setRscore(numCell.getValue); | ||||||||||||||||
} | ||||||||||||||||
if(sheet.getCell(4,i).getType==CellType.DATE){ | ||||||||||||||||
DateCell dateCell=(DateCell)sheet.getCell(4,i); | ||||||||||||||||
//DateCell的getDate()方法取得单元格的日期型数据 | ||||||||||||||||
info.setDate(dateCell.getDate()); | ||||||||||||||||
} | ||||||||||||||||
} | ||||||||||||||||
fis.close(); | ||||||||||||||||
wk.close(); | ||||||||||||||||
} | ||||||||||||||||
style="padding:5px 0px; color:#3399cc; font-size:18px; font-family:微软雅黑,宋体,黑体,Arial; height:25px; line-height:25px; border-bottom-width:1px; border-bottom-style:solid; border-bottom-color:#3399cc; margin:15px!important"> |
||||||||||||||||
3.4 更新已存在的Excel文件 | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 将3.2所产生的excel表(temp.xls)的第一条记录(excel文件的指第三行)的班级名称改为As179,代码如下: | ||||||||||||||||
class="cnblogs_code"> |
||||||||||||||||
name="code" class="java">File file=new File("d://temp.xls"); |
||||||||||||||||
//导入已存在的Excel文件,获得只读的工作薄对象 | ||||||||||||||||
Workbook wk=Workbook.getWorkbook(file); | ||||||||||||||||
//根据只读的工作薄对象(wk)创建可写入的Excel工作薄对象 | ||||||||||||||||
WritableWorkbook wwb=Workbook.createWorkbook(file, wk); | ||||||||||||||||
//读取第一张工作表 | ||||||||||||||||
WritableSheet sheet=wwb.getSheet(0); | ||||||||||||||||
///获得要编辑的单元格对象 | ||||||||||||||||
WritableCell cell=sheet.getWritableCell(1, 2); | ||||||||||||||||
//判断单元格的类型, 做出相应的转化 | ||||||||||||||||
if(cell.getType()==CellType.LABEL){ | ||||||||||||||||
Label lable=(Label)cell; | ||||||||||||||||
//修改单元格的内容 | ||||||||||||||||
lable.setString("As179"); | ||||||||||||||||
} | ||||||||||||||||
wwb.write(); | ||||||||||||||||
wwb.close(); | ||||||||||||||||
wk.close(); | ||||||||||||||||
style="font-family:'Microsoft YaHei'; font-size:14px"> 对于更新已存在的Excel文件实际上就是获取已有工作薄对象(但是只读的),然后将获取的只读的工作薄对象转化为可写入的Excel工作薄对象(WritableWorkbook ),其他部分就是通过可写入WritableSheet 对象和可写入WritableCell 对象进行编辑。 | ||||||||||||||||
class="bdsharebuttonbox tracking-ad" style="float: right;" data-mod="popu_172"> |
||||||||||||||||
href="#" class="bds_more" data-cmd="more" style="background-position:0 0 !important; background-image: url(http://bdimg.share.baidu.com/static/api/img/share/icons_0_16.png?v=d754dcc0.png) !important"> | ||||||||||||||||
href="#" class="bds_qzone" data-cmd="qzone" title="分享到QQ空间" style="background-position:0 -52px !important"> | ||||||||||||||||
href="#" class="bds_tsina" data-cmd="tsina" title="分享到新浪微博"style="background-position:0 -104px !important"> | ||||||||||||||||
href="#" class="bds_tqq" data-cmd="tqq" title="分享到腾讯微博"style="background-position:0 -260px !important"> | ||||||||||||||||
href="#" class="bds_renren" data-cmd="renren" title="分享到人人网"style="background-position:0 -208px !important"> | ||||||||||||||||
href="#" class="bds_weixin" data-cmd="weixin" title="分享到微信"style="background-position:0 -1612px !important" > | ||||||||||||||||
window._bd_share_config = { "common": { "bdSnsKey": {}, "bdText": "", "bdMini": "1", "bdMiniList": false, "bdPic": "", "bdStyle": "0", "bdSize": "16" }, "share": {} }; with (document) 0[(getElementsByTagName('head')[0] || body).appendChild(createElement('script')).src = 'http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion=' + ~(-new Date() / 36e5)]; | ||||||||||||||||
id="digg" ArticleId="45195359" > |
||||||||||||||||
|
||||||||||||||||
顶 | ||||||||||||||||
3 | ||||||||||||||||
|
||||||||||||||||
踩 | ||||||||||||||||
0 | ||||||||||||||||
|
||||||||||||||||
style="clear:both; height:10px;"> |
||||||||||||||||
class="similar_article" > |
||||||||||||||||
class="similar_c"style="margin:20px 0px 0px 0px"> |
||||||||||||||||
class="similar_c_t"> |
||||||||||||||||
相关文章推荐 | ||||||||||||||||
class="similar_wrap tracking-ad" data-mod="popu_36" style="max-height:195px;"> |
||||||||||||||||
|
||||||||||||||||
• | ||||||||||||||||
href="http://blog.csdn.net/hgy413/article/details/6598043" title="3.IDA-数据显示窗口(导出窗口、导入窗口、String窗口、...窗口)" strategy="SearchAlgorithm" target="_blank" style="width: 290px;">3.IDA-数据显示窗口(导出窗口、导入窗口、String窗口、...窗口) | ||||||||||||||||
• | ||||||||||||||||
href="http://blog.csdn.net/liuliuniu1987/article/details/6184588" title="HOWTO: 使用命令行方式导入导出多语言String Tables" strategy="SearchAlgorithm" target="_blank" style="width: 290px;">HOWTO: 使用命令行方式导入导出多语言String Tables | ||||||||||||||||
• | ||||||||||||||||
href="http://blog.csdn.net/JQ_AK47/article/details/52727727" title="關於JAVA中String类以形参传递到函数里面,修改后外面引用不能获取到更改后的值" strategy="SearchAlgorithm" target="_blank" style="width: 290px;">關於JAVA中String类以形参传递到函数里面,修改后外面引用不能获取到更改后的值 | ||||||||||||||||
• | ||||||||||||||||
href="http://blog.csdn.net/xyc_csdn/article/details/72582016" title="关于Java的String字符串常量的长度问题" strategy="SearchAlgorithm" target="_blank" style="width: 290px;">关于Java的String字符串常量的长度问题 | ||||||||||||||||
• | ||||||||||||||||
href="http://blog.csdn.net/qq516230226/article/details/72017415" title="Java 中 String 类的常用方法" strategy="SearchAlgorithm" target="_blank" style="width: 290px;">Java 中 String 类的常用方法 | ||||||||||||||||
|
||||||||||||||||
• | ||||||||||||||||
href="http://blog.csdn.net/qq_36503884/article/details/71603367" title="Java String字符串自动填补0或空格" strategy="SearchAlgorithm" target="_blank" style="width: 290px;">Java String字符串自动填补0或空格 | ||||||||||||||||
• | ||||||||||||||||
href="http://blog.csdn.net/u011277123/article/details/71600469" title="Java String探索" strategy="SearchAlgorithm" target="_blank" style="width: 290px;">Java String探索 | ||||||||||||||||
• | ||||||||||||||||
href="http://blog.csdn.net/qq_36752632/article/details/71601284" title="使用封装类进行转换时候报错,java.lang.NumberFormatException: For input string: """ strategy="SearchAlgorithm" target="_blank" style="width: 290px;">使用封装类进行转换时候报错,java.lang.NumberFormatException: For input string: "" | ||||||||||||||||
• | ||||||||||||||||
href="http://blog.csdn.net/u010296640/article/details/52809878" title="java正则表达式、命令行参数、String常用方法" strategy="SearchAlgorithm" target="_blank" style="width: 290px;">java正则表达式、命令行参数、String常用方法 | ||||||||||||||||
• | ||||||||||||||||
href="http://blog.csdn.net/u013276277/article/details/72377229" title="JAVA中int,string,char之间的互相转换" strategy="SearchAlgorithm" target="_blank" style="width: 290px;">JAVA中int,string,char之间的互相转换 | ||||||||||||||||
id="suggest"> |
||||||||||||||||
.blog-ass-articl dd { | ||||||||||||||||
color: #369; | ||||||||||||||||
width: 99%; /*修改行*/ | ||||||||||||||||
float: left; | ||||||||||||||||
overflow: hidden; | ||||||||||||||||
font: normal normal 12px/23px "SimSun"; | ||||||||||||||||
height: 23px; | ||||||||||||||||
margin: 0; | ||||||||||||||||
padding: 0 0 0 10px; | ||||||||||||||||
margin-right: 30px; | ||||||||||||||||
background: url(http://static.blog.csdn.net/skin/default/images/blog-dot-red3.gif) no-repeat 0 10px; | ||||||||||||||||
} | ||||||||||||||||
id="relate" data-mod="popu_218" class="tracking-ad"> |
||||||||||||||||
class="relate_t"> |
||||||||||||||||
参考知识库 | ||||||||||||||||
class="relate_c"> |
||||||||||||||||
|
||||||||||||||||
class="embody embody_b" id="libkeyparent" style="display:none"> |
||||||||||||||||
class="embody_t">更多资料请参考: | ||||||||||||||||
class="embody_c" id="libkey"> |
||||||||||||||||
猜你在找 | ||||||||||||||||
id="adcollegedata" style="display:none"> |
||||||||||||||||
id="adCollege" style="width: 42%;float: left;"> |
||||||||||||||||
id="resforAd" style="width: 42%;float: left;margin-right: 30px;"> |
||||||||||||||||
id="ad_cen"> |
||||||||||||||||
class="tracking-ad" data-view="true" data-mod="ad_popu_199" data-mtp="43" data-order="114" data-con="ad_content_1843" style="width: 960px; height: 90px;"> |
||||||||||||||||
class="tracking-ad" data-view="true" data-mod="ad_popu_72" data-mtp="62" data-order="40" data-con="ad_content_2072"> |
||||||||||||||||
id="layerd" style="position: fixed;bottom:0px;right:0px;line-height:0px;z-index:1000"> |
||||||||||||||||
class="J_close layer_close" style="display:;background-color:#efefef;padding:0px;color:#333;font:12px/24px Helvetica,Tahoma,Arial,sans-serif;text-align:right;">关闭 id="cpro_u2895327"> |
||||||||||||||||
document.getElementById("popuLayer_js_q").οnlοad=function(){ var styObjd=styObj={width:"300px","height":parseInt(250)+28};window.CSDN.Layer.PopuLayer("#layerd",{storageName:"layerd",styleObj:styObjd,total:50,expoire:1000*60}); } | ||||||||||||||||
class="comment_class"> |
||||||||||||||||
id="comment_title" class="panel_head"> |
||||||||||||||||
class="see_comment">查看评论name="comments"> | ||||||||||||||||
id="comment_list"> |
||||||||||||||||
id="comment_bar"> |
||||||||||||||||
id="comment_form"> |
||||||||||||||||
class="announce"> |
||||||||||||||||
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场name="reply">name="quote"> | ||||||||||||||||
id="ad_bot"> |
||||||||||||||||
id="report_dialog"> |
||||||||||||||||
id="d-top" style="bottom:60px;"> |
||||||||||||||||
id="quick-reply" class="btn btn-top q-reply" title="快速回复" style="display:none;"> | ||||||||||||||||
src="http://static.blog.csdn.net/images/blog-icon-reply.png" alt="快速回复"> | ||||||||||||||||
id="d-top-a" class="btn btn-top backtop" style="display: none;" title="返回顶部" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_huidaodingbu'])" style=""> | ||||||||||||||||
src="http://static.blog.csdn.net/images/top.png" alt="TOP"> | ||||||||||||||||
class="tag_list" style="display:none"> |
||||||||||||||||
id="pop_win" style="display:none ;position: absolute; z-index: 10000; border: 1px solid rgb(220, 220, 220); top: 222.5px; left: 630px; opacity: 1; background: none 0px 0px repeat scroll rgb(255, 255, 255);"> |
||||||||||||||||
id="popup_mask"> |
||||||||||||||||
#popup_mask | ||||||||||||||||
{ | ||||||||||||||||
position: absolute; | ||||||||||||||||
width: 100%; | ||||||||||||||||
height: 100%; | ||||||||||||||||
background: #000; | ||||||||||||||||
z-index: 9999; | ||||||||||||||||
left: 0px; | ||||||||||||||||
top: 0px; | ||||||||||||||||
opacity: 0.3; | ||||||||||||||||
filter: alpha(opacity=30); | ||||||||||||||||
display: none; | ||||||||||||||||
} | ||||||||||||||||
class="clear"> |
||||||||||||||||
id="side"> |
||||||||||||||||
class="side"> |
||||||||||||||||
id="panel_Profile" class="panel"> |
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
id="blog_userface"> |
||||||||||||||||
href="http://my.csdn.net/JerehEdu" target="_blank"> | ||||||||||||||||
src="http://avatar.csdn.net/9/5/4/1_jerehedu.jpg" title="访问我的空间" style="max-width:90%"/> | ||||||||||||||||
href="http://my.csdn.net/JerehEdu" class="user_name" target="_blank">JerehEdu | ||||||||||||||||
class="interact"> |
||||||||||||||||
href="javascript:void(0);" class="attent" id="span_add_follow" title="[加关注]"> | ||||||||||||||||
href="javascript:void(0);" class="letter" title="[发私信]" onclick="window.open('http://msg.csdn.net/letters/model?receiver=JerehEdu','_blank','height=350,width=700');_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_sixin'])"> | ||||||||||||||||
id="blog_medal"> |
||||||||||||||||
id="bms_box"> |
||||||||||||||||
|
||||||||||||||||
访问:86235次 | ||||||||||||||||
积分:2359 | ||||||||||||||||
等级: style="position:relative;display:inline-block;z-index:1" > | ||||||||||||||||
src="http://c.csdnimg.cn/jifen/images/xunzhang/jianzhang/blog5.png" alt="" style="vertical-align: middle;" id="leveImg"> | ||||||||||||||||
id="smallTittle" style=" position: absolute; left: -24px; top: 25px; text-align: center; width: 101px; height: 32px; background-color: #fff; line-height: 32px; border: 2px #DDDDDD solid; box-shadow: 0px 2px 2px rgba (0,0,0,0.1); display: none; z-index: 999;"> |
||||||||||||||||
style="left: 42%; top: -8px; position: absolute; width: 0; height: 0; border-left: 10px solid transparent; border-right: 10px solid transparent; border-bottom: 8px solid #EAEAEA;"> |
||||||||||||||||
积分:2359 | ||||||||||||||||
排名:第14494名 | ||||||||||||||||
|
||||||||||||||||
原创:151篇 | ||||||||||||||||
转载:0篇 | ||||||||||||||||
译文:0篇 | ||||||||||||||||
评论:27条 | ||||||||||||||||
class="panel" id="panel_Search"> |
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
="frmSearch" action="http://so.csdn.net/search" class="form_search csdn-tracking-statistics" target="_blank" data-mod="popu_306"> | ||||||||||||||||
id="inputSearch" type="text" class="blogsearch" title="请输入关键字" /> | ||||||||||||||||
id="btnSubmit" type="button" value="搜索" title="search in blog" /> | ||||||||||||||||
type="hidden" name="q" id="inputQ" /> | ||||||||||||||||
type="hidden" name="t" value="blog" /> | ||||||||||||||||
id="btnSearchBlog" target="_blank"> | ||||||||||||||||
id="panel_Category" class="panel"> |
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
href="/JerehEdu/article/category/2807943" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_wenzhangfenlei']); ">Android技术分享(82) | ||||||||||||||||
href="/JerehEdu/article/category/2807945" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_wenzhangfenlei']); ">IOS技术分享(54) | ||||||||||||||||
href="/JerehEdu/article/category/2807947" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_wenzhangfenlei']); ">java技术分享(15) | ||||||||||||||||
href="/JerehEdu/article/category/6076723" onclick="_gaq.push(['_trackEvent','function', 'onclick', 'blog_articles_wenzhangfenlei']); ">原创教材(1) | ||||||||||||||||
id="hotarticls" class="panel"> |
||||||||||||||||
|
||||||||||||||||
阅读排行 | ||||||||||||||||
|
||||||||||||||||
href="/jerehedu/article/details/45192091" title="SVN详细配置与使用 ——一步步教会您使用">SVN详细配置与使用 ——一步步教会您使用(2192) | ||||||||||||||||
href="/jerehedu/article/details/45195359" title="Java中导入、导出Excel">Java中导入、导出Excel(2106) | ||||||||||||||||
href="/jerehedu/article/details/46911955" title="Android典型界面设计——ViewPage+Fragment实现区域顶部tab滑动切换">Android典型界面设计——ViewPage+Fragment实现区域顶部tab滑动切换(1928) | ||||||||||||||||
href="/jerehedu/article/details/45746369" title="Android生成带图片的二维码">Android生成带图片的二维码(1556) | ||||||||||||||||
href="/jerehedu/article/details/45196019" title="Android实现图片轮显效果——自定义ViewPager控件">Android实现图片轮显效果——自定义ViewPager控件(1408) | ||||||||||||||||
href="/jerehedu/article/details/45822251" title="Android实现仿qq侧边栏效果">Android实现仿qq侧边栏效果(1219) | ||||||||||||||||
href="/jerehedu/article/details/47319345" title="Android典型界面设计(4)——使用ActionBar+Fragment实现tab切换">Android典型界面设计(4)——使用ActionBar+Fragment实现tab切换(1188) | ||||||||||||||||
href="/jerehedu/article/details/45196185" title="Android studio导入开源项目">Android studio导入开源项目(1138) | ||||||||||||||||
href="/jerehedu/article/details/45196125" title="IOS实现自动循环滚动广告--ScrollView的优化和封装">IOS实现自动循环滚动广告--ScrollView的优化和封装(1012) | ||||||||||||||||
href="/jerehedu/article/details/45390165" title="微信二维码扫描下载APK">微信二维码扫描下载APK(1002) | ||||||||||||||||
id="hotarticls2" class="panel"> |
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
href="/jerehedu/article/details/45196019" title="Android实现图片轮显效果——自定义ViewPager控件">Android实现图片轮显效果——自定义ViewPager控件(4) | ||||||||||||||||
href="/jerehedu/article/details/46911955" title="Android典型界面设计——ViewPage+Fragment实现区域顶部tab滑动切换">Android典型界面设计——ViewPage+Fragment实现区域顶部tab滑动切换(3) | ||||||||||||||||
href="/jerehedu/article/details/45193205" title="Android界面设计之对话框——定制Toast、AlertDialog">Android界面设计之对话框——定制Toast、AlertDialog(2) | ||||||||||||||||
href="/jerehedu/article/details/47021541" title="Android GUI之Activity、Window、View">Android GUI之Activity、Window、View(2) | ||||||||||||||||
href="/jerehedu/article/details/45196185" title="Android studio导入开源项目">Android studio导入开源项目(2) | ||||||||||||||||
href="/jerehedu/article/details/45746369" title="Android生成带图片的二维码">Android生成带图片的二维码(2) | ||||||||||||||||
href="/jerehedu/article/details/45195553" title="ActionBar+DrawerLayout实现网易新闻客户端首页">ActionBar+DrawerLayout实现网易新闻客户端首页(1) | ||||||||||||||||
href="/jerehedu/article/details/45716123" title="基于VlC的视频播放器">基于VlC的视频播放器(1) | ||||||||||||||||
href="/jerehedu/article/details/45191863" title="使用极光推送实现分组发送和服务端集成">使用极光推送实现分组发送和服务端集成(1) | ||||||||||||||||
href="/jerehedu/article/details/45390165" title="微信二维码扫描下载APK">微信二维码扫描下载APK(1) | ||||||||||||||||
id="newcomments" class="panel"> |
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
href="/jerehedu/article/details/45196019#comments">Android实现图片轮显效果——自定义ViewPager控件 | ||||||||||||||||
style ="margin:0px;">href="/qq_24578531" class="user_name">qq_24578531: |
||||||||||||||||
myPager.start方法里的参数能分别解释下吗 | ||||||||||||||||
href="/jerehedu/article/details/45196019#comments">Android实现图片轮显效果——自定义ViewPager控件 | ||||||||||||||||
style ="margin:0px;">href="/Cat_swam" class="user_name">Cat_swam: |
||||||||||||||||
那个我是个Android新手 ,请问一下 com.jereh.view. MyScrollImage... | ||||||||||||||||
href="/jerehedu/article/details/45195359#comments">Java中导入、导出Excel | ||||||||||||||||
style ="margin:0px;">href="/gdfy0616" class="user_name">gdfy0616: |
||||||||||||||||
太好了!多谢分享啊!介绍的真是全面 | ||||||||||||||||
href="/jerehedu/article/details/46453371#comments">android实现gif图与文字混排 | ||||||||||||||||
style ="margin:0px;">href="/qq_25211337" class="user_name">qq_25211337: |
||||||||||||||||
内存溢出 | ||||||||||||||||
href="/jerehedu/article/details/46424813#comments">Android之官方导航栏之Toolbar(Toolbar+DrawerLayout+ViewPager+PagerSlidingTabStrip) | ||||||||||||||||
style ="margin:0px;">href="/roadcow" class="user_name">roadcow: |
||||||||||||||||
右边能显示菜单吗? | ||||||||||||||||
href="/jerehedu/article/details/46424813#comments">Android实现图片轮显效果——自定义ViewPager控件 | ||||||||||||||||
style ="margin:0px;">href="/Amazing_Kenboo" class="user_name">Amazing_Kenboo: |
||||||||||||||||
@android_I_t:正好我也看到这里,楼主在注释里面说了* @param mainActivi... | ||||||||||||||||
href="/jerehedu/article/details/46424813#comments">Android实现图片轮显效果——自定义ViewPager控件 | ||||||||||||||||
style ="margin:0px;">href="/android_I_t" class="user_name">android_I_t: |
||||||||||||||||
mainActivit中 myPager.start第六个参数获取不到啊 | ||||||||||||||||
href="/jerehedu/article/details/46911955#comments">Android典型界面设计——ViewPage+Fragment实现区域顶部tab滑动切换 | ||||||||||||||||
style ="margin:0px;">href="/CTU24CAT" class="user_name">CTU24CAT: |
||||||||||||||||
感觉很有用 ,谢谢了! | ||||||||||||||||
href="/jerehedu/article/details/46236013#comments">使用ECharts实现数据图表分析 | ||||||||||||||||
style ="margin:0px;">href="/Renfr" class="user_name">Renfr: |
||||||||||||||||
好 | ||||||||||||||||
href="/jerehedu/article/details/45365531#comments">NSURLSession下载和断点续传 | ||||||||||||||||
style ="margin:0px;">href="/iOS_MingXing" class="user_name">iOS_MingXing: |
||||||||||||||||
NSURL * url=这个是做什么的啊????? | ||||||||||||||||
id="panel_Archive" class="panel"> |
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
id="archive_list"> |
||||||||||||||||
href="/JerehEdu/article/month/2016/02">2016年02月(18)href="/JerehEdu/article/month/2016/01">2016年01月(2)href="/JerehEdu/article/month/2015/10">2015年10月(9)href="/JerehEdu/article/month/2015/08">2015年08月(10)href="/JerehEdu/article/month/2015/07">2015年07月(16)href="/JerehEdu/article/month/2015/06">2015年06月(20)href="/JerehEdu/article/month/2015/05">2015年05月(20)href="/JerehEdu/article/month/2015/04">2015年04月(57) | ||||||||||||||||
id="homepageArticles" class="panel tracking-ad" data-mod="popu_4"> |
||||||||||||||||
|
||||||||||||||||
|
||||||||||||||||
href="http://blog.csdn.net/turingbooks/article/details/72416875" target="_blank">* 5月书讯:流畅的Python,终于等到你! | ||||||||||||||||
href="http://blog.csdn.net/blogdevteam/article/details/72526177" | ||||||||||||||||
target="_blank">*【新收录】CSDN日报 —— Kotlin 专场 | ||||||||||||||||
href="http://blog.csdn.net/jiangwei0910410003/article/details/70483088"target="_blank">* Android中带你开发一款自动爆破签名校验工具kstools | ||||||||||||||||
href="http://blog.csdn.net/guolin_blog/article/details/54895665" | ||||||||||||||||
target="_blank">* Android图片加载框架最全解析——深入探究Glide的缓存机制 | ||||||||||||||||
href="http://blog.csdn.net/lmj623565791/article/details/72667669" | ||||||||||||||||
target="_blank">* Android 热修复 Tinker Gradle Plugin解析 | ||||||||||||||||
href="http://blog.csdn.net/puppet_master/article/details/72455945" | ||||||||||||||||
target="_blank">* Unity Shader-死亡溶解效果 | ||||||||||||||||
class="clear"> |
||||||||||||||||
class="tracking-ad" data-view="true" data-mod="ad_popu_189" data-mtp="63" data-order="40" data-con="ad_content_1259" style="width: 250px; height: 250px;"> |
||||||||||||||||
id="nav_show_top_stop" style="width: 250px;height: 250px;z-index:1000"> id="cpro_u2734133"> |
||||||||||||||||
setTimeout(function () { | ||||||||||||||||
var naviga_offsetTop = 0; function naviga_stay_top() { | ||||||||||||||||
var scrollTop = jQuery(document).scrollTop(); | ||||||||||||||||
if (scrollTop > naviga_offsetTop) { | ||||||||||||||||
jQuery("#nav_show_top_stop").css({ "position": "fixed" }); | ||||||||||||||||
jQuery("#nav_show_top_stop").css({ "top": "0px" }); | ||||||||||||||||
} else { jQuery("#nav_show_top_stop").css({ "position": "fixed" }); jQuery("#nav_show_top_stop").css({ "top": naviga_offsetTop - scrollTop + "px" }); } | ||||||||||||||||
} | ||||||||||||||||
function onload_function() { | ||||||||||||||||
naviga_offsetTop = jQuery("#nav_show_top_stop").position().top; | ||||||||||||||||
jQuery(window).bind("scroll", naviga_stay_top); jQuery(window).bind("mousewheel", naviga_stay_top); | ||||||||||||||||
jQuery(document).bind("scroll", naviga_stay_top); jQuery(document).bind("mousewheel", naviga_stay_top); | ||||||||||||||||
} jQuery(document).ready(onload_function); | ||||||||||||||||
},200); | ||||||||||||||||
class="clear"> |
||||||||||||||||
href="http://c.csdnimg.cn/comm_ask/css/ask_float_block.css" type="text/css" rel="stylesheet" /> | ||||||||||||||||
id="a52b5334d" style="width: 1px; height: 1px; display: none;"> |
||||||||||||||||
document.getElementById("adJs52b5334").src = "http://ads.csdn.net/js/opt/52b5334.js?t=" + Math.random(); | ||||||||||||||||
class="pop_CA_cover" style="display:none"> |
||||||||||||||||
class="pop pop_CA" style="display:none"> |
||||||||||||||||
class="CA_header"> |
||||||||||||||||
收藏助手 | ||||||||||||||||
class="cancel_icon" id="fapancle" onclick="$('.pop_CA').hide();$('.pop_CA_cover').hide();"> | ||||||||||||||||
="" id="fa" frameborder="0" width="100%" height="360" scrolling="no" > | ||||||||||||||||