package com.hxkr.util;

import java.io.FileOutputStream;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List; import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFFont;
import org.apache.poi.hssf.usermodel.HSSFRow;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.hssf.util.CellRangeAddress;
import org.apache.poi.hssf.util.HSSFColor;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Workbook; /**
*
* @author 陈欢
* @Date 2019年3月7日
* 数据库导出数据到Excel
*
*/
public class ExportUtil { public static void main(String[] args) {
List<HashMap<String, Object>> professionField = testField();
System.out.println(professionField);
List<HashMap<String, Object>> professionMsg = testData();
System.out.println(professionMsg);
export("C:\\Users\\Administrator\\Desktop\\export.xls", "sheet","测试标题",professionField,professionMsg);
} /**
* 测试字段
* @return
*/
private static List<HashMap<String, Object>> testField(){
HashMap<String, Object> hashMap = new HashMap<>();
HashMap<String, Object> hashMap1 = new HashMap<>();
List<HashMap<String, Object>> professionField = new ArrayList<>();
hashMap.put("field_guid", "5657a72d-4270-46a6-a635-78b09f267f78");
hashMap.put("name", "专业名称");
hashMap.put("state", "yes");
professionField.add(hashMap);
hashMap1.put("field_guid", "b111fabd-9752-4ca6-9ac1-84e0ef175c50");
hashMap1.put("name", "专业代码");
hashMap1.put("state", "yes");
professionField.add(hashMap1);
return professionField;
}
/**
* 测试字段
* @return
*/
private static List<HashMap<String, Object>> testData(){
HashMap<String, Object> hashMap = new HashMap<>();
HashMap<String, Object> hashMap1 = new HashMap<>();
List<HashMap<String, Object>> professionField = new ArrayList<>();
hashMap.put("5657a72d-4270-46a6-a635-78b09f267f78", "生物学");
hashMap.put("b111fabd-9752-4ca6-9ac1-84e0ef175c50", "1010101");
professionField.add(hashMap);
hashMap1.put("5657a72d-4270-46a6-a635-78b09f267f78", "物理学");
hashMap1.put("b111fabd-9752-4ca6-9ac1-84e0ef175c50", "2020202");
professionField.add(hashMap1);
return professionField;
}
/**
* 生成一个Excel
* @param address    文件存放地址
* @param sheetName   工作表名称
* @param headerName     标题名称
* @param professionField   表头字段数据源
* @param professionMsg   表数据数据源
*
*
*/
public static void export(String address,String sheetName,String headerName,List<HashMap<String, Object>> professionField,List<HashMap<String, Object>> professionMsg){
HSSFWorkbook workbook = new HSSFWorkbook();//创建一个Excel文件
HSSFSheet sheet = workbook.createSheet(sheetName);//创建一个工作表
setTop(workbook, sheet, headerName,headerDataList(professionField).size()-1);//设置标题
setheader(workbook, sheet, professionField);//设置表头字段
setData(workbook, sheet, professionField,professionMsg);//设置数据
try {
FileOutputStream out = new FileOutputStream(address);
workbook.write(out);
out.close();
System.out.println("完成");
} catch (Exception e) {
e.printStackTrace();
} } /**
* 设置标题
* @param workbook
* @param sheet
* @param topContent 标题名称
*/
public static void setTop(HSSFWorkbook workbook,HSSFSheet sheet,String topContent,Integer num) {
HSSFRow row = sheet.createRow((int) 0); //创建第一行
HSSFCell cell = row.createCell((short) 0); //创建第一列
/**
* CellRangeAddress(firstRow, lastRow, firstCol, lastCol)
* firstRow 区域中第一个单元格的行号
lastRow 区域中最后一个单元格的行号
firstCol 区域中第一个单元格的列号
lastCol 区域中最后一个单元格的列号
*/
CellRangeAddress cellRangeAddress = new CellRangeAddress(0,0,0,num);
sheet.addMergedRegion(cellRangeAddress);
row.setHeightInPoints((short)40);//行高
cell.setCellStyle(topStyle(workbook));//设置样式
cell.setCellValue(topContent);
}
/**
* 设置标题字体
* @param wb
* @return
*/
private static CellStyle topStyle(Workbook wb){
CellStyle cellStyle=wb.createCellStyle();
// 设置字体
Font font = wb.createFont();
font.setFontName("微软雅黑");//字体类型
font.setFontHeightInPoints((short) 20);// 字号
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
font.setColor(HSSFColor.RED.index);//设置字体颜色
cellStyle.setFont(font);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
return cellStyle;
} /**
* 设置表头字段
* @param workbook
* @param sheet
* @param professionMsg 数据源
*/
public static void setheader(HSSFWorkbook workbook,HSSFSheet sheet,List<HashMap<String, Object>> professionMsg) {
HSSFRow row = sheet.createRow((int) 2); //创建第三行
row.setHeightInPoints((short)25);//行高
List<String> headerDataList = headerDataList(professionMsg);
for (int i = 0; i < headerDataList.size(); i++) {
sheet.setColumnWidth(i, headerDataList.get(i).toString().getBytes().length*256+1500);
HSSFCell cell = row.createCell((short) i); //创建每一列
cell.setCellStyle(headerStyle(workbook,HSSFColor.LIGHT_GREEN.index));
cell.setCellValue(headerDataList.get(i));//每一列赋值
}
} /**
* 设置表头字段样式
* @param wb
* @param color 前景色下标
* @return
*/
private static CellStyle headerStyle(Workbook wb,short color){
CellStyle cellStyle=wb.createCellStyle();
// 设置字体
Font font = wb.createFont();
font.setFontName("微软雅黑");//字体类型
font.setFontHeightInPoints((short) 14);// 字号
font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);// 加粗
font.setColor(HSSFColor.BLACK.index);//设置字体颜色
cellStyle.setFont(font);
cellStyle.setWrapText(true);//自动换行
cellStyle.setFillForegroundColor(color); // 前景色
cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
borderStyle(cellStyle, IndexedColors.BLACK.getIndex());
return cellStyle;
} /**
* 边框颜色
* @param wb
* @param color 颜色代码
* @return
*/
private static void borderStyle(CellStyle cellStyle,short color){
/**
* CellStyle.BORDER_THIN 实线
* CellStyle.BORDER_MEDIUM_DASHED 虚线
*/
cellStyle.setBorderBottom(CellStyle.BORDER_THIN); // 底部边框
cellStyle.setBottomBorderColor(color); // 底部边框颜色
cellStyle.setBorderLeft(CellStyle.BORDER_THIN); // 左边边框
cellStyle.setLeftBorderColor(color); // 左边边框颜色
cellStyle.setBorderRight(CellStyle.BORDER_THIN); // 右边边框
cellStyle.setRightBorderColor(color); // 右边边框颜色
cellStyle.setBorderTop(CellStyle.BORDER_THIN); // 上边边框
cellStyle.setTopBorderColor(color); // 上边边框颜色 } /**
* 获取所有的表头字段
* @param professionMsg 数据源
* @return 所有的表头字段
*/
public static List<String> headerDataList(List<HashMap<String, Object>> professionMsg){
List<String> list = new ArrayList<>();
for (HashMap<String, Object> hashMap : professionMsg) {
String state = hashMap.get("state").toString();
String fieldName = hashMap.get("name").toString();
if(!"del".equals(state) && !"no".equals(state) && !"简介".equals(fieldName) && !"专业所属大类".equals(fieldName)){
list.add(fieldName);
}
}
return list;
} /**
* 设置数据
* @param workbook
* @param sheet
* @param professionField 字段数据
* @param professionMsg 数据源
*/
public static void setData(HSSFWorkbook workbook,HSSFSheet sheet,List<HashMap<String, Object>> professionField,List<HashMap<String, Object>> professionMsg) {
for (int d = 0; d < professionMsg.size(); d++) {
HSSFRow row = sheet.createRow((int) d+3); //创建第四行、五行...
row.setHeightInPoints((short)20);//行高
List<String> headerDataList = headerDataList(professionField);
for (int i = 0; i < headerDataList.size(); i++) {
HSSFCell cell = row.createCell((short) i); //创建每一列
String guid = getGuId(headerDataList.get(i).toString(), professionField);
if(professionMsg.get(d).get(guid).toString().getBytes().length > headerDataList.get(i).toString().getBytes().length){
sheet.setColumnWidth(i, professionMsg.get(d).get(guid).toString().getBytes().length*256+1500);
}
cell.setCellStyle(dataStyle(workbook));
cell.setCellValue(professionMsg.get(d).get(guid).toString());//每一列赋值
} }
} /**
* 设置表头字段样式
* @param wb
* @param color 前景色下标
* @return
*/
private static CellStyle dataStyle(Workbook wb){
CellStyle cellStyle=wb.createCellStyle();
// 设置字体
Font font = wb.createFont();
font.setFontName("微软雅黑");//字体类型
font.setFontHeightInPoints((short) 12);// 字号
font.setColor(HSSFColor.BLACK.index);//设置字体颜色
cellStyle.setFont(font);
cellStyle.setWrapText(true);//自动换行
cellStyle.setFillPattern(CellStyle.SOLID_FOREGROUND);
cellStyle.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 水平居中
cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);//垂直居中
borderStyle(cellStyle, IndexedColors.BLACK.getIndex());
return cellStyle;
} /**
* 根据字段名称查询字段field_guid
* @param fieldName 字段名称
* @param professionMsg 数据源
* @return
*/
private static String getGuId(String fieldName,List<HashMap<String, Object>> professionField){
for (HashMap<String, Object> hashMap : professionField) {
if(!"".equals(fieldName)){
if(fieldName.equals(hashMap.get("name"))){
return hashMap.get("field_guid").toString();
}
}
}
return null;
}
}

Excel导出数据库数据的更多相关文章

  1. java导出数据到excel里:直接导出和导出数据库数据

    一.直接导出 package com.ij34.util; import java.io.FileNotFoundException; import java.io.FileOutputStream; ...

  2. 配置ODBC DSN数据源,导出数据库数据到Excel过程记录

    一.前言 工作中我们可能遇到这样的需要:查询数据库中的信息,并将结果导出到Excel文件.这本来没什么,但数据量比较大时,用PLSQL.toad导出Excel会出现内存不足等情况,使用odbc+Mic ...

  3. 导出数据库数据到Excel表

    后台需要将用户信息数据导入到Excel表中提供给相关人员: 首先查询数据就不多说了: 导入Excel表直接亮代码(采用的是jxl的jar包提供的方法): public static File Impo ...

  4. Java注解(Annotation)用法:利用注解和反射机制指定列名导出数据库数据

    闲来没事,想了一个应用的例子:用java如何把数据库的数据根据我们指定的某几列,如第2列,第4列,第6列导出来到Excel里? 写代码也是为了应用的,写好的代码更重要的是在于思考.我自己思考了这个示例 ...

  5. DB2导入导出数据库数据

    导出数据库中数据 在db2cmd命令下生成建库脚本(-z指定模式名) db2look -d BBS -z db2admin -u db2admin -e -o bbs.sql 在db2cmd命令下导出 ...

  6. c#关于EXCEL导出数据库的做法

    using System;using System.Diagnostics;using System.Collections;using System.Data;using System.Web;us ...

  7. mysql导出数据库数据及表结构

    1,导出远程数据库数据到本地 mysql -A wj_sms -h192.168.1.105 -uroot -p4321 -ss -e "set NAMES 'utf8';SELECT * ...

  8. java 对excel操作 读取、写入、修改数据;导出数据库数据到excel

    ============前提加入jar包jxl.jar========================= // 从数据库导出数据到excel public List<Xskh> outPu ...

  9. 导出数据库数据制成Excel和txt

    引用ICSharpCode.SharpZipLib.dll 1.编写压缩和解压代码 using System; using System.Collections.Generic; using Syst ...

随机推荐

  1. web service 的跨语言特性

    1.用java语言创建一个的服务(Myservice) ①编写一个Imyservice接口(注解不能少) @WebService public interface Imyservice { publi ...

  2. springboot+redis分布式锁-模拟抢单

    本篇内容主要讲解的是redis分布式锁,这个在各大厂面试几乎都是必备的,下面结合模拟抢单的场景来使用她:本篇不涉及到的redis环境搭建,快速搭建个人测试环境,这里建议使用docker:本篇内容节点如 ...

  3. Spring Framework学习要点摘抄

    以下摘自Spring Framework官方文档,版本Spring 4.3. <context:annotation-config/> implicitly registered post ...

  4. Android 7.0 启动篇 — init原理(二)(转 Android 9.0 分析)

    ========================================================          ================================== ...

  5. javascript深入理解-从作用域链理解闭包

    一.概要 红宝书(P178)对于闭包的定义:闭包就是有权访问另外一个函数作用域中变量的函数. MDN,对于闭包的定义:闭包就是指能够访问自由变量的函数. 那么什么是自由变量?自由变量就是在函数中使用, ...

  6. python爬虫Scrapy(一)-我爬了boss数据

    一.概述 学习python有一段时间了,最近了解了下Python的入门爬虫框架Scrapy,参考了文章Python爬虫框架Scrapy入门.本篇文章属于初学经验记录,比较简单,适合刚学习爬虫的小伙伴. ...

  7. WebWorker 中将已处理好的 VDOM 数据提交主线程渲染 DOM

    上篇文章讲了 WebWorker 的简单用法,其实网上很多类似的文章,我写的也比较垃圾.不会的建议可以网上看比较好点的资料. 这里我会先讲下我的大致思路.然后会贴上一堆不实用的垃圾代码供参考. Web ...

  8. 从源码解读线程(Thread)和线程池(ThreadPoolExecutor)的状态

    线程是比进程更加轻量级的调度执行单位,理解线程是理解并发编程的不可或缺的一部分:而生产过程中不可能永远使用裸线程,需要线程池技术,线程池是管理和调度线程的资源池.因为前不久遇到了一个关于线程状态的问题 ...

  9. Eureka注册客户端

    1.pom.xml <dependency> <groupId>org.springframework.cloud</groupId> <artifactId ...

  10. Java面向接口编程,低耦合高内聚的设计哲学

    接口体现的是一种规范和实现分离的设计哲学,充分利用接口可以极大的降低程序中各个模块之间的耦合,提高系统的可维护性以及可扩展性. 因此,很多的软件架构设计理念都倡导"面向接口编程"而 ...