POI3.10 根据Excel模版导出数据测试
1:所需jar包

2:Mysql数据库表内容如下:

3:代码结构如下:

(1)User.java
public class User {
private int id;
private String name;
private String no;
private String nativePlace;
private String edu;
private Double math;
private Double computer;
private Double english;
private Double sumcount;
private Double avgcount;
//setter-getter ...
}
(2)JdbcUtil.java
public class JdbcUtil {
private static final String URL = "jdbc:mysql://localhost:3306/test";
private static final String USER = "root";
private static final String PASSWORD = "mysql";
private JdbcUtil() {
}
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException ex) {
Logger.getLogger(JdbcUtil.class.getName()).log(Level.SEVERE, null, ex);
}
}
public static Connection getConnection() throws Exception {//建立连接
return DriverManager.getConnection(URL, USER, PASSWORD);
}
public static void free(ResultSet rs, Statement st, Connection conn) {//释放资源
try {
if (rs != null) {
rs.close();
}
} catch (SQLException ex) {
Logger.getLogger(JdbcUtil.class.getName()).log(Level.SEVERE, null, ex);
} finally {
try {
if (st != null) {
st.close();
}
} catch (SQLException ex) {
Logger.getLogger(JdbcUtil.class.getName()).log(Level.SEVERE, null, ex);
} finally {
if (conn != null) {
try {
conn.close();
} catch (SQLException ex) {
Logger.getLogger(JdbcUtil.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}
}
(3)UserService.java
public class UserService {
public static List<User> getUserList(){
User user;
List<User> list = new ArrayList<>();
String sql = "select id,name,no,nativeplace,edu,math,computer,english,sumcount,avgcount from t_user";
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
conn = JdbcUtil.getConnection();
ps = conn.prepareStatement(sql);
rs = ps.executeQuery();
while(rs.next()){
user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setNo(rs.getString("no"));
user.setNativePlace(rs.getString("nativeplace"));
user.setEdu(rs.getString("edu"));
user.setMath(rs.getDouble("math"));
user.setComputer(rs.getDouble("computer"));
user.setEnglish(rs.getDouble("english"));
user.setSumcount(rs.getDouble("sumcount"));
user.setAvgcount(rs.getDouble("avgcount"));
list.add(user);
}
} catch (Exception ex) {
Logger.getLogger(UserService.class.getName()).log(Level.SEVERE, null, ex);
}finally{
JdbcUtil.free(rs, ps, conn);
}
return list;
}
}
(4)Poitest.java
public class Poitest {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
InputStream inputStream = null;
OutputStream outputStream =null;
try {
inputStream = new FileInputStream(new File("E:\\hello_temp.xls"));
outputStream = new FileOutputStream(new File("E:\\hello1.xls"));
writeToExcelByTemp2(inputStream,outputStream);
System.out.println("成功生成");
} catch (FileNotFoundException ex) {
Logger.getLogger(Poitest.class.getName()).log(Level.SEVERE, null, ex);
} catch (IOException ex) {
Logger.getLogger(Poitest.class.getName()).log(Level.SEVERE, null, ex);
}finally{
if(null!=outputStream){
try {
outputStream.close();
} catch (IOException ex) {
Logger.getLogger(Poitest.class.getName()).log(Level.SEVERE, null, ex);
}
}
if(null!=inputStream){
try {
inputStream.close();
} catch (IOException ex) {
Logger.getLogger(Poitest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
/**
* 根据模版生成Excel
* @param inputStream
* @param outputStream
* @throws IOException
*/
public static void writeToExcelByTemp2(InputStream inputStream, OutputStream outputStream) throws IOException{
List<User> list = UserService.getUserList();
int length = list.size();
//New Workbook
Workbook wb = new HSSFWorkbook(inputStream);
//New Sheet
Sheet sheet = wb.getSheetAt(0);
int curRowIndex = 0;
for(int rowIndex=1; rowIndex<=length;rowIndex++){
curRowIndex = rowIndex;
//获取一行,如果为空则新建
Row row = sheet.getRow(rowIndex);
if(row == null){
row = sheet.createRow(rowIndex);
}
User user = list.get(rowIndex-1);
//根据user的对象个数创建列数
for(int cellNum=0; cellNum<10;cellNum++){
Cell cell = row.getCell(cellNum);
if(cell==null){
cell = row.createCell(cellNum);
}
switch(cellNum){
case 0:
cell.setCellValue(user.getId());
break;
case 1:
cell.setCellValue(user.getName());
break;
case 2:
cell.setCellValue(user.getNo());
break;
case 3:
cell.setCellValue(user.getNativePlace());
break;
case 4:
cell.setCellValue(user.getEdu());
break;
case 5:
cell.setCellValue(user.getMath());
break;
case 6:
cell.setCellValue(user.getComputer());
break;
case 7:
cell.setCellValue(user.getEnglish());
break;
case 8:
cell.setCellFormula("SUM(F"+(rowIndex+1)+":H"+(rowIndex+1)+")");
break;
case 9:
cell.setCellFormula("I" + (rowIndex+1) +"/3");
break;
}
}
}
curRowIndex++;
Row row = sheet.createRow(curRowIndex);
Cell cell0 = row.createCell(0);
cell0.setCellValue("总计");
Cell cell5 = row.createCell(5);
cell5.setCellFormula("SUM(F2:"+"F"+(curRowIndex)+")");
Cell cell6 = row.createCell(6);
cell6.setCellFormula("SUM(G2:"+"G"+(curRowIndex)+")");
Cell cell7 = row.createCell(7);
cell7.setCellFormula("SUM(H2:"+"H"+(curRowIndex)+")");
Cell cell8 = row.createCell(8);
cell8.setCellFormula("SUM(I2:"+"I"+(curRowIndex)+")");
Cell cell9 = row.createCell(9);
cell9.setCellFormula("AVERAGE(J2:"+"J"+(curRowIndex)+")");
wb.write(outputStream);
}
}
Excel模版:

生成结果:

POI3.10 根据Excel模版导出数据测试的更多相关文章
- JAVA实现Excel导出数据(以写好的Excel模版导出)
工作中经常会有将后台数据以Excel导出的功能. 简单的方法有将response的contentType设置为application/vnd.ms-excel: 或在JSP页面直接设置成: <% ...
- [poi使用]使用excel模版导出excel
Apache POI是基于Office Open XML标准(OOXML)和Microsoft的OLE 2复合文档格式(OLE2)处理各种文件格式的开源项目.简而言之,您可以使用Java读写MS ...
- POI3.10读取Excel模板填充数据后生成新的Excel文件
private final DecimalFormat df = new DecimalFormat("#0.00"); public void test(){ String fi ...
- (6) 如何用Apache POI操作Excel文件-----POI-3.10的一个和注解(comment)相关的另外一个bug
如果POI-3.10往一个工作表(sheet)里面插入数据的话,需要注意了,其有一个不太被容易发现的bug. 被插入的工作表(sheet)里面的单元格没有包含任何的注解(comment)的时候,插入一 ...
- jxls使用模版导出Excel
/** * 使用模版导出Excel */ @SuppressWarnings({ "unchecked", "deprecation" } ...
- java+jxls利用excel模版进行导出
大多时候会出现需要导出excel的功能,利用poi可以实现简单的导出,可以说poi的功能非常强大可以做到细节的定制化操作,但相对于在office操作excel,利用poi完全生成excel会显得非常复 ...
- 按模版导出Excel
实现效果: excel模版: ExcelHandle.java package com.common.utils; import java.io.File; import java.io.FileIn ...
- NPOI的使用Excel模板导出
private string ExportScMeeting(DataTable source) { string templateFile = Server.MapPath(@"Excel ...
- C#巧用Excel模版变成把Table打印出来
将一个做好的Excel模版,通过程序填上数据然后打印出来这个需求有两种方法一种是通过代码打开Excel模版然后填入数据然后再打印. 第二种方法就是我将要介绍的 1.将Excel设置好格式另存为HTML ...
随机推荐
- scaletype
http://www.myexception.cn/image/726203.html 图片说明Andorid中ImageView的不同属性ScaleType的区别 ImageView是Android ...
- 《Programming WPF》翻译 第7章 2.图形
原文:<Programming WPF>翻译 第7章 2.图形 图形时绘图的基础,代表用户界面树的元素.WPF支持多种不同的形状,并为它们每一个都提供了元素类型. 7.2.1基本图形类 在 ...
- PowerShell_零基础自学课程_1_初识PowerShell
欢迎转载本系列文章:转载请注明出处:www.cnblogs.com/volcanol 自从微软推出.Net以来,微软旗下的windows体系就发生了很大的变化,首先是操作系统的界面的变化,例如vist ...
- Non-unique Elements
Non-unique Elements You are given a non-empty list of integers (X). For this task, you should return ...
- 【转】repo 的一些用法和理解-不错
原文网址:http://blog.csdn.net/yasin_lee/article/details/5975068 repo的用法(zz) 注:repo只是google用Python脚本写的调用g ...
- 独立写作(A or B)
开头:On contemporary society(一般的背景)/ With the advent of the technologically advanced society (the info ...
- Linux shell编程02 shell程序的执行 及文件权限
第一个shell脚本 1. shell编程的方式 交互式shell编程 非交互式shell编程:执行的语句存放到一个文件 shell脚本:可以任意文件名,建议扩展名为sh 2. ...
- PHP设计模式笔记二:面向对象 -- Rango韩老师 http://www.imooc.com/learn/236
SPL标准库的使用 SPL是用于解决典型问题(standard problems)的一组接口与类的集合. 1.SPL提供了很多数据结构类,如SplStack.SqlQueue.SqlHeap.SplF ...
- [跟我学Spring学习笔记][DI配置与使用]
DI 依赖和依赖注入 定义 传统的依赖一般指"类之间的关系",那先让我们复习一下类之间的关系: 泛化:表示类与类之间的继承关系.接口与接口之间的继承关系: 实现:表示类对接口的实现 ...
- docker虚拟化之将容器做成镜像
1,docker ps -a 选择要启动的容器. 2,docker start 容器+ID 启动容器 3,docker exec -i -t 容器ID /bin/bash 进入容器 这里的/ ...