`
兢兢业业小码农
  • 浏览: 5657 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

Excel根据模板导出+Spring读取配置文件+动态读取sql文件

阅读更多
  1. 用到技术
    1. poi 3.11
    2. Spring 4.1.4
  2. 代码如下
    1. package com.fh.server.util;
      
      import java.io.BufferedInputStream;
      import java.io.BufferedReader;
      import java.io.File;
      import java.io.FileInputStream;
      import java.io.FileNotFoundException;
      import java.io.FileOutputStream;
      import java.io.IOException;
      import java.io.InputStream;
      import java.io.InputStreamReader;
      import java.net.URL;
      import java.sql.DriverManager;
      import java.sql.ResultSet;
      import java.sql.SQLException;
      import java.text.SimpleDateFormat;
      import java.util.Date;
      import java.util.HashMap;
      import java.util.Map;
      import java.util.Properties;
      
      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.poifs.filesystem.POIFSFileSystem;
      
      import com.mysql.jdbc.Connection;
      
      public class SqlManager {
      
      	private static SqlManager sqlManager = null;
      
      	private static Connection con;
      	private static Map<String, String> sqls = new HashMap<String, String>();
      	private static File fi = null;
      	static String fileName;
      	private static POIFSFileSystem fs;
      	private static HSSFWorkbook wb = null;
      	private static FileOutputStream out;
      	static String[] sql;
      	private static String url = "";
      
      	private SqlManager() {
      		try {
      			// excel模板路径
      			URL excelUrl = SqlManager.class.getClassLoader().getResource("template.xls");
      			String path = excelUrl.getPath();
      			fi = new File(path);
      			fs = new POIFSFileSystem(new FileInputStream(fi));
      			// // 读取excel模板
      			wb = new HSSFWorkbook(fs);
      			SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHMM");
      			fileName = path + "数据分析(信息化问卷调查系统)_" + format.format(new Date()) + ".xls";
      			Class.forName("com.mysql.jdbc.Driver");
      			Class.forName("com.mysql.jdbc.Driver").newInstance();
      			url = GetJDBCUrl();
      			con = (Connection) DriverManager.getConnection(url);
      			sql = getSql(SqlManager.class, "votereports").split(";");
      		} catch (ClassNotFoundException | InstantiationException | IllegalAccessException | SQLException
      				| IOException e) {
      			e.printStackTrace();
      		}
      	}
      
      	public static SqlManager getInstance() {
      		if (sqlManager == null) {
      			sqlManager = new SqlManager();
      		}
      		return sqlManager;
      	}
      
      
      	public static <T> String getSql(Class<T> resourceClass, String id) {
      		String key = resourceClass.getName() + "." + id;
      		String sql = (String) sqls.get(key);
      		if (sql == null) {
      			sql = readFromFile(resourceClass, id);
      		}
      		return sql;
      	}
      
      	private static <T> String readFromFile(Class<T> resourceClass, String id) {
      		// System.out.println(resourceClass.getName());
      		String content = "";
      		InputStream inputstream = null;
      		InputStreamReader reader = null;
      		BufferedReader br = null;
      		try {
      			String sqlfile = id + ".sql";
      			inputstream = resourceClass.getResourceAsStream(sqlfile);
      			if (inputstream == null) {
      				return null;
      			}
      			reader = new InputStreamReader(inputstream, "utf-8");
      
      			br = new BufferedReader(reader);
      			String line = null;
      			while ((line = br.readLine()) != null) {
      				content += line + "\n";
      			}
      			System.out.println(content);
      		} catch (IOException ex2) {
      			ex2.printStackTrace();
      		} finally {
      			if (inputstream != null) {
      				try {
      					inputstream.close();
      				} catch (IOException ex) {
      				}
      			}
      
      		}
      
      		return content;
      	}
      
      	public static void main(String[] args) throws FileNotFoundException {
      
      		SqlManager sqlmgr = new SqlManager();
      		try {
      			fs = new POIFSFileSystem(new FileInputStream(sqlmgr.fi));
      			// 读取excel模板
      			wb = new HSSFWorkbook(fs);
      		} catch (IOException e1) {
      			e1.printStackTrace();
      			System.out.println();
      		}
      
      		if (con != null) {
      			setExcel(sql, wb);
      			try {
      				out = new FileOutputStream(fileName);
      				wb.write(out);
      				out.close();
      			} catch (IOException e) {
      				e.printStackTrace();
      			}
      		}
      
      	}
      
      	// 读取Properties的全部信息
      	private static String GetJDBCUrl() throws IOException {
      		String filePath = SqlManager.class.getClassLoader().getResource("config.properties").getPath();
      		Properties pps = new Properties();
      		InputStream in = new BufferedInputStream(new FileInputStream(filePath));
      		pps.load(in);
      		String baseUrl = pps.getProperty("jdbc.url");
      		String username = pps.getProperty("jdbc.username");
      		String pwd = pps.getProperty("jdbc.password");
      		return baseUrl + "&user=" + username + "&password=" + pwd;
      	}
      
      	private static void setExcel(String[] sql, HSSFWorkbook wb) {
      		HSSFSheet sheet = null;
      		HSSFCellStyle cellStyle = null;
      		HSSFFont font = null;
      
      		for (int i = 0; i < sql.length; i++) {
      			// 读取了模板内所有sheet内容
      			sheet = wb.getSheetAt(i);
      			cellStyle = wb.createCellStyle();
      			font = wb.createFont();
      			font.setFontName("微软雅黑");
      			font.setFontHeightInPoints((short) 10);// 设置字体大小
      			cellStyle.setFont(font);
      			cellStyle.setBorderTop(HSSFCellStyle.BORDER_THIN);
      			cellStyle.setBorderLeft(HSSFCellStyle.BORDER_THIN);
      			cellStyle.setBorderRight(HSSFCellStyle.BORDER_THIN);
      			cellStyle.setBorderBottom(HSSFCellStyle.BORDER_THIN);
      
      			// 修改模板内容导出新模板
      			try {
      				ResultSet set = con.createStatement().executeQuery(sql[i]);
      				int numberofrows = set.getMetaData().getColumnCount();
      				// List setData = resultSetToList(set);
      				int rowNm = 1;
      				while (set.next()) {
      					HSSFRow row = sheet.createRow(rowNm);
      					// row.setRowStyle(cellStyle);
      					for (int j = 1; j <= numberofrows; j++) {
      						HSSFCell cell = row.createCell(j - 1);
      						cell.setCellStyle(cellStyle);
      						cell.setCellValue(set.getString(j));
      					}
      					rowNm++;
      				}
      			} catch (SQLException e) {
      				e.printStackTrace();
      			}
      		}
      
      	}
      
      	public static String getSql(Object obj, String id) {
      		return getSql(obj.getClass(), id);
      	}
      
      	public static HSSFWorkbook getWorkBook() {
      		SqlManager sqlmgr = new SqlManager();
      		if (con == null) {
      			try {
      				con = (Connection) DriverManager.getConnection(url);
      			} catch (SQLException e) {
      				e.printStackTrace();
      			}
      		}
      		setExcel(sql, wb);
      //		try {
      //			out = new FileOutputStream(fileName);
      //			con.close();
      //			return out;
      //		} catch (FileNotFoundException | SQLException e) {
      //			e.printStackTrace();
      //			return null;
      //		}
      		return wb;
      	}
      	
      }
      
       
分享到:
评论

相关推荐

    基于ssm+Vue的ssm无纸化考试模拟系统(源码+部署说明+系统介绍+数据库).zip

    配置Spring和MyBatis:根据实际情况修改mybatis-config.xml和spring-mvc.xml文件中的配置信息,以便系统能够正确读取数据库表结构和执行SQL语句。启动项目:在命令行中进入项目根目录,执行./mvnw spring-boot:run...

    万能后台管理模板javaweb

    28. SQL编辑器:强大的SQL编辑器,支持编辑语句复杂查询语句,生成动态报表,可导出excel --------------------------------------------------------------------------------------------------------------------...

    spring-myBatis-demo:spring-myBatis-demo 学习教程

    项目介绍项目架构JDK 1.8Springboot 1.5.6.RELEASEMybatis SpringBoot starter 1.3.0thymeleaf 前端模板引擎alibaba druid 连接池pagehelper SpringBoot starter 1.1.2mybatis generator 自动生成代码插件 1.3.2主要...

    JAVA上百实例源码以及开源项目

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    asp.net知识库

    从SQL中的一个表中导出HTML文件表格 获取數据库表的前N条记录 几段SQL Server语句和存储过程 生成表中的数据的脚本 最详细的SQL注入相关的命令整理 Oracle Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle...

    java开源包5

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解...可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    javaOA办公系统模块设计方案.pdf

    javaOA办公系统模块设计⽅案 1.模型管理 :web在线流程设计器、预览... SQL编辑器:强⼤的SQL编辑器,⽀持编辑语句复杂查询语句,⽣成动态报表,可导出excel ----------------------------OA模块 23. 组织机构:N级别,

    JAVA上百实例源码以及开源项目源代码

     数字证书:从文件中读取数字证书,生成文件输入流,输入文件为c:/mycert.cer,获取一个处理X.509证书的证书工厂…… Java+ajax写的登录实例 1个目标文件 内容索引:Java源码,初学实例,ajax,登录  一个Java+ajax写...

    全新JAVAEE大神完美就业实战课程 超150G巨制课程轻松实战JAVAEE课程 就业部分.txt

    动态sql-关联查询.myBatis整合spring,逆向工程 14-SpringMVC(学习2天) SpringMvc_day01.spring入门-springMVC三大核心器(视图解析器,处理器映射器and适配器).springMvc整合myBatis SpringMvc_day02高级参数....

    java开源包1

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解...可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包11

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解...可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包2

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解...可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包3

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解...可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包6

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解...可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包10

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解...可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包4

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解...可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

    java开源包8

    Spring4GWT GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解...可以将网络图导出为 GIF, JPEG, PNG, PPM, ARP and PNML (XML based)文件格式。使用了优秀的JHotDraw 5.2 框架。 activemq...

Global site tag (gtag.js) - Google Analytics