废话不多说,直接通过例子来说明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

转载于:https://www.cnblogs.com/tanglc/p/3702079.html

关于用POI和EXCEL交互的问题相关推荐

  1. POI处理Excel中的日期数据类型

    在POI处理Excel中的日期类型的单元格时,如果仅仅是判断它是否为日期类型的话,最终会以NUMERIC类型来处理. 正确的处理方法是先判断单元格 的类型是否则NUMERIC类型, 然后再判断单元格是 ...

  2. poi解析excel读取日期为数字的问题

    Apache poi 版本:3.12 今天在用poi解析excel文件时,碰到一个蛋疼的问题. 在我的excel文件中有一列是日期类型,例如有以下这么一行数据(日期中月份前面的0会自动去掉): 在读取 ...

  3. java使用Jxl和Poi读写Excel

    使用Jxl和Poi需要使用到的jar包(由于我所在电脑的权限问题,不能直接给),可自行前往下载:jar下载 要用到的jar包(最好是全下了): 1.commons-io-2.2.jar 2.dom4j ...

  4. Apache POI和EasyExcel 第六集:Apache POI的Excel读取单元格中的计算公式

    Apache POI和EasyExcel 第六集:Apache POI的Excel读取单元格中的计算公式 一.资源 代码实现中的带有计算公式的Excel(xls) 链接:https://pan.bai ...

  5. Apache POI和EasyExcel 第五集:Apache POI的Excel读取不同类型的数据

    Apache POI和EasyExcel 第五集:Apache POI的Excel读取不同类型的数据 一.资源 什么是Apache POI Apache POI 不同类型的数据的表格(xls) 链接: ...

  6. Apache POI和EasyExcel 第四集:Apache POI的Excel基本读取(分为03版的xls、07版的xlsx)

    Apache POI和EasyExcel 第四集:Apache POI的Excel基本读取(分为03版的xls.07版的xlsx) 一.资源 一个十分好用的日期类型处理包,和Java8搭配使用非常好 ...

  7. Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls、07版的xlsx、升级版SXSSF)

    Apache POI和EasyExcel 第三集:Apache POI的Excel大数据量写入(分为03版的xls.07版的xlsx.升级版SXSSF) 一.结果 我的03跑了1.204秒,07跑了5 ...

  8. POI 导出excel带小数点的数字格式显示不对解决方法

    POI 导出excel带小数点的数字格式显示不对解决方法 参考文章: (1)POI 导出excel带小数点的数字格式显示不对解决方法 (2)https://www.cnblogs.com/firstd ...

  9. cpu java poi 导出_java基于poi导出excel透视表代码实例

    这篇文章主要介绍了java基于poi导出excel透视表代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 从前,我是一个前端程序猿,怀着对打通 ...

  10. Java - Poi 操作 Excel

    Java - Poi 操作 Excel 关注 "弋凡"(YiFan)微信公众号吧 记录简单笔记 做你的最爱 注意 XSSFWorkbook 对象是操作 .xlsx 格式的表格 HS ...

最新文章

  1. oracle 日志注册,Oracle日常维护中管理用户以及重做日志文件的方法
  2. 主流mes厂商_MES市场的前景
  3. 构建二叉堆时间复杂度的证明
  4. BEGIN-4 Fibonacci数列
  5. mysql隔离级别 举例_mysql的事务隔离级别举例
  6. Atlas学习手记(9):异步调用Page Method
  7. (转载)VS2010/MFC编程入门之三十六(工具栏:工具栏资源及CToolBar类)
  8. php自己创建函数,php自定义函数之内部函数
  9. Jmeter函数助手
  10. SqlServer2008镜像证书过期处理
  11. eagle打开的brd和sch转换为AD打开的原理图和PCB
  12. 基于python的智能风扇设计_[Micropython]TPYBoardV102 DIY智能温控小风扇
  13. Linux下查看内存使用情况方法总结
  14. 键盘可以实现向计算机输入数据判断,计算机应用基础_学习指南.docx
  15. foxmail怎么设置服务器才能登陆网易企业邮箱
  16. HALEY KOEHN--a good graphic designer recent years
  17. c v语言 小数后20位,V语言学习笔记-30集成C代码库
  18. 单端反激式变换器开关稳压电源原理图 此博文包含图片 (2009-02-24 12:17:53)转载▼ 标签: 单端反激式 变换器 高频变压器 原理图 磁滞回线 磁心 杂谈 分类: technical
  19. 华为MUX VLAN
  20. MediaPlayer播放音频

热门文章

  1. tomcat遇到jre\lib\ext\localedata.pack 时出错
  2. Baidu 人脸识别FireFly 与PC连接调试
  3. zbb20170919 设置eclipse myeclipse 在工程窗口 项目目录 显示代码错误提示的
  4. 使用Yii2中dropdownlist实现地区三级联动的例子
  5. Nginx笔记总结十一:Nginx重写规则指南
  6. Algorithm -- 字母重排
  7. 为Android Studio 项目手动下载gradle
  8. ZOJ 3077 Move to Baggage Office
  9. hdu 4638 Group
  10. 一文总结数据科学家常用的Python库(上)