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. 说说new 和 malloc()

    熟悉c++的朋友应该都知道,c++提供给了程序员与硬件打交道的可能性,比如说内存管理.一个高水平的c++程序员可以将c++程序的性能优化到极致,榨干硬件资源.而现在我想说说与内存管理有关的new 和 ...

  2. hive新建分区表

    hive新建分区表语句如下: create table table_name (col1_name string comment '备注1', col2_name string comment '备注 ...

  3. SpringMVC 中 @ControllerAdvice 注解的三种使用场景!

    @ControllerAdvice ,很多初学者可能都没有听说过这个注解,实际上,这是一个非常有用的注解,顾名思义,这是一个增强的 Controller.使用这个 Controller ,可以实现三个 ...

  4. spring boot 文件上传大小限制

    错误信息 : Spring Boot:The field file exceeds its maximum permitted size of 1048576 bytes. 解决方法一:在启动类添加如 ...

  5. forEach循环对集合进行循环时,需判断是否为null;

    分析forEach的源码会发现:foreach源码例子: public class Foreach { public static void main(String[] args) { List< ...

  6. PMP应考知识点-合同类型以及选择要领

    合同类型的选择貌似是必考知识点,加上对合同类型的了解和选择的要领,对于开展日常工作来讲也是挺有必要的.所以这两天重新回顾并总结了合同的种类和各种类的选择要领,与大家分享. 转走请标明出处  https ...

  7. C++基础——类封装简单示例

    一.前言 在IC前端设计/验证领域,只会HDL远远不够.目前大多数项目使用已开发好的系统架构和IP Core,因此设计部分的工作量慢慢向系统集成和验证方向转移.而在集成和验证过程中,往往以各种脚本和面 ...

  8. 加载静态界面----,要不要会加载cookie和页面参数

    Server.Transfer(string.Format("/shouji/StaticHtml/RobLine/{0}.html", id),true); 加cookie. S ...

  9. 超好用的C#控制台应用模板

    本文是Wei的公众号投稿文章: 默认模板之缺 在工作学习中,我们经常需要创建一些简单的控制台应用(Console App)去验证某个想法,或者作为小工具交付给其他同事. 通常我们的选择是 Visual ...

  10. 不可思议的纯 CSS 实现鼠标跟随效果

    直接进入正题,鼠标跟随,顾名思义,就是元素会跟随着鼠标的移动而作出相应的运动.大概类似于这样: 通常而言,CSS 负责表现,JavaScript 负责行为.而鼠标跟随这种效果属于行为,要实现通常都需要 ...