废话不多说,直接通过例子来说明POI的使用:

1.一个创建excel并写入数据的小例子,参照网上的一个例子:

public class CreateXL {

    /**
* @param args
*/
public static String outputFile="D:\\test.xls"; public static void main(String[] args) { //创建新的excel工作薄
try {
HSSFWorkbook workbook=new HSSFWorkbook();
// 在Excel工作簿中建一工作表,其名为缺省值
// 如要新建一名为"报表导出"的工作表,其语句为:
// HSSFSheet sheet = workbook.createSheet("报表导出");
HSSFSheet sheet=workbook.createSheet();
// 在索引0的位置创建行(最顶端的行)
HSSFRow row=sheet.createRow(0);
//在索引0的位置创建单元格(左上端)
HSSFCell cell=row.createCell(0);
// 定义单元格为字符串类型
cell.setCellType(HSSFCell.CELL_TYPE_STRING);
// 在单元格中输入一些内容
cell.setCellValue("测试");
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFillBackgroundColor(HSSFColor.LIGHT_TURQUOISE.index);//设置背景色
cellStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);//设置前景色
//通过背景色和前景色的不同来使每行的颜色交叉展现,有待测试
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置居中
sheet.setColumnWidth(0, 4000);
//sheet.setDefaultColumnWidth(12); //设置为12字节的宽度
cell.setCellStyle(cellStyle);
// 新建一输出文件流
FileOutputStream fout=new FileOutputStream(outputFile);
// 把相应的Excel 工作簿存盘
workbook.write(fout);
// 操作结束,关闭文件
fout.flush();
fout.close();
System.out.println("excel已生成");
} catch (Exception e) {
System.out.println("创建文件失败"+e);
//e.printStackTrace();
}
}
}

2.自己project中用到的

    public void rptImportModel() throws IOException {
String fileName="报表导入模板.xls";
HSSFWorkbook workbook=new HSSFWorkbook();
HSSFSheet sheet=workbook.createSheet();
HSSFRow row=sheet.createRow(0);
//创建单元格样式风格
HSSFCellStyle cellStyle = workbook.createCellStyle();
cellStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);//设置前景色
cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER);//设置居中
//创建单元格
HSSFCell cellGrpNo = row.createCell(0);
cellGrpNo.setCellType(HSSFCell.CELL_TYPE_STRING);
cellGrpNo.setCellValue("组号");
cellGrpNo.setCellStyle(cellStyle);
HSSFCell cellNodeId=row.createCell(1);
cellNodeId.setCellType(HSSFCell.CELL_TYPE_STRING);
cellNodeId.setCellValue("报表节点ID");
cellNodeId.setCellStyle(cellStyle);
sheet.setColumnWidth(1, 8000);
//为防止文件名出现中文乱码,需要对文件名进行字符集转换
HttpServletResponse response = ServletActionContext.getResponse();
String name = new String(fileName.getBytes("GBK"), "ISO8859_1");
response.setHeader("Content-disposition", "attachment;filename=" + name); OutputStream os = null;
os = response.getOutputStream();
workbook.write(os);
os.flush();
os.close();
}

---------------------------------------------------------------------------------------------------------------------------------------------

总结如下:

1.想下载前询问(是打开文件还是保存到计算机)和通过IE浏览器直接选择相关应用程序插件打开两种方式:

  ①response.setHeader("Content-disposition","attachment;filename="+ "Example.xls" );

  ②response.setHeader("Content-Disposition", "inline; filename=" + fliename)
  目前用过的是第一种,第二种有待测试。

2.为防止导出的文件名出现乱码,需要对文件名进行URI解码,可以添加如下设置

       HttpServletResponse response = ServletActionContext.getResponse();
       String name = new String(fileName.getBytes("GBK"), "ISO8859_1");
       response.setHeader("Content-disposition", "attachment;filename=" + name );

  上面的第二行String()的函数查看API用法如下:

String(byte[] bytes, Charset charset) 
          通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String

3.导出的excel格式的设置问题,今天下午想把导出的excel的第一行第一列单元格的背景色设置颜色,试了好多次,确实有点坑爹,设置如下:

     HSSFCellStyle cellStyle = workbook.createCellStyle();
          cellStyle.setFillBackgroundColor(HSSFColor.LIGHT_TURQUOISE.index);//设置背景色

   cell.setCellStyle(cellStyle);
          除了添加上面几句,别忘了,需要在第二条语句下面添加下面的一句来将单元格填充,要不然没效果:

   cellStyle.setFillPattern(HSSFCellStyle.SOLID_FOREGROUND);

但是设置成这样子后,导出的excel单元格是黑色。试了好多次,发现了,用错方法了,第二条语句不应该是背景色,而是前景色!

   cellStyle.setFillForegroundColor(HSSFColor.LIGHT_GREEN.index);//设置前景色

 OK,这样子导出后,excel单元格有背景色了。但是,我想把某一列的宽度设置大一点

      sheet.setColumnWidth(0, 4000);

   感觉4000数据太大?但展示出来后不大,单元格宽度变长了,满足需求。也算是提供一个参考值。第一个参数表示设置第几列(从0开始),第二个参数表示设置的宽度大小。也不知道 这个数值设置大小有什么规律,反正我是没找出来,设置为负数结果宽度变的很大很大。

     当然也可以将所有列的宽度都设置大一点,可以用下面的方法

     sheet.setDefaultColumnWidth(12);  //设置为12字节的宽度

但我是只是把某一列的宽度设置大点,所以上面的方法不合适。

参考文档连接:http://bbs.csdn.net/topics/360003997

        http://luxhua.iteye.com/blog/464394

        http://hi.baidu.com/yljf1314/item/008762d1c9d5dc52d73aae47

        http://www.cnblogs.com/zhenmingliu/archive/2012/04/25/2469396.html

关于用POI和EXCEL交互的问题的更多相关文章

  1. APACHE POI教程 --java应用程序用POI与Excel交互

    POI报表 --用POI与Excel交互 AURISOFT 第一章 POI简介 --Jakata Poi HSSF:纯java的Excel解决方案 在我们实际的开发中,表现层的解决方案虽然有多样,但是 ...

  2. POI操作Excel

    POI和Excel简介 JAVA中操作Excel的有两种比较主流的工具包: JXL 和 POI .jxl 只能操作Excel 95, 97, 2000也即以.xls为后缀的excel.而poi可以操作 ...

  3. POI对Excel自定义日期格式的读取

    用POI读取Excel数据:(版本号:POI3.7) 1.读取Excel private List<String[]> rosolveFile(InputStream is, String ...

  4. poi导出excel

    Java使用poi组件导出excel报表,能导出excel报表的还可以使用jxl组件,但jxl想对于poi功能有限,jxl应该不能载excel插入浮动层图片,poi能很好的实现输出excel各种功能, ...

  5. JAVA的POI操作Excel

    1.1Excel简介 一个excel文件就是一个工作簿workbook,一个工作簿中可以创建多张工作表sheet,而一个工作表中包含多个单元格Cell,这些单元格都是由列(Column)行(Row)组 ...

  6. POI导出excel日期格式

    参考帖子: [1]http://www.ithao123.cn/content-2028409.html [2]http://javacrazyer.iteye.com/blog/894850 再读本 ...

  7. 使用jxl,poi读取excel文件

    作用:在java后台添加一个方法,读取导入的excel内容,根据需要返回相应的sql语句,以完成对临时表的插入操作. 使用jxl读取excel文件 package com.sixthf.bi.sapp ...

  8. POI读取Excel内容格式化

    在用POI读取Excel内容时,经常会遇到数据格式化的问题. 比如:数字12365会变为12365.0;字符串数字123也会变为123.0,甚至会被变为科学计数法.另外日期格式化也是一个头疼的问题.其 ...

  9. Java Struts2 POI创建Excel文件并实现文件下载

    Java Struts2 POI创建Excel文件并实现文件下载2013-09-04 18:53 6059人阅读 评论(1) 收藏 举报 分类: Java EE(49) Struts(6) 版权声明: ...

随机推荐

  1. 在Ubuntu 12.10 上安装部署Openstack

    OpenStack系统有几个关键的项目,它们能够独立地安装但是能够在你的云计算中共同工作.这些项目包括:OpenStack Compute,OpenStack Object Storage,OpenS ...

  2. 再回首,Java温故知新(九):Java基础之流程控制语句

    流程控制语句分为条件语句.循环语句和中断语句. 中断语句包括break和continue,两者的区别在于break会跳出整个循环,而continue则是跳出此次循环,之后还会继续下一次循环. 条件语句 ...

  3. 面试时,问哪些问题能试出一个Android应用开发者真正的水平?

    一般面试时间短则30分钟,多则1个小时,这么点时间要全面考察一个人难度很大,需要一些技巧,这里我不局限于回答题主的问题,而是分享一下我个人关于如何做好Android技术面试的一些经验: 面试前的准备 ...

  4. 一次优化web项目的经历记录(一)

    一次优化web项目的经历记录 这段时间以来的总结与反思 前言:最近很长一段时间没有更新博客了,忙于一堆子项目的开发,严重拖慢了学习与思考的进程.开水倒满了需要提早放下杯子,晚了就会烫手,这段时间以来, ...

  5. C#快速排序法

    最近面试的时候,被问到了快速排序法.一时之间,无法想起算法来. 重新看了书本,算法如下: 1)设置两个变量I.J,排序开始的时候:I=0,J=N-1: 2)以第一个数组元素作为关键数据,赋值给key, ...

  6. oracle创建实例SID

    用oracle用户登录 输入startx开发可视化界面,打开命令行模式 (如果只有壁纸,没有桌面图标和任务栏,按下 Ctrl + Alt + T 打开命令行) 输入dbca打开配置窗口 最后就各种下一 ...

  7. Linux下安装Nginx1.9.3-0303(本人亲手实践)

    Linux下安装Nginx1.9.3 Linux操作系统 Oel 5.8 64bit 最新版Nginx: 1.9.3 最近同事让我帮忙搞 ngix,两天时间 安装.配置搞定了.继续 Nginx 1.9 ...

  8. 2014年10月16号--for语句实例

    Console.WriteLine("一对小兔一个月之后长成大兔,再过一个月后生新的一对兔子,且两年之后有多少对兔子,就是三兔子幼兔,小兔,成兔"); Console.WriteL ...

  9. Linux 关于解压

    1.*.tar 用 tar –xvf 解压 2.*.gz 用 gzip -d或者gunzip 解压 3.*.tar.gz和*.tgz 用 tar –xzf 解压 4.*.bz2 用 bzip2 -d或 ...

  10. java 对于url地址的实体符号的处理

    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-lang3 <dependency> <g ...