JAVA将执行sql结果导入excel

Java实现将查询的sql结果集导入excel,用到jxl.jar包可在http://download.csdn.net/detail/qq8618/8304057 下载

public String queryResultToExcel(String sql,String filename,OutputStream os) {
		Connection conn = null;
		Statement sm = null;
		ResultSet rs = null;
		try {
			conn = getConnection();
			sm = conn.createStatement();
			rs = sm.executeQuery(sql);
			ResultSetMetaData rsmd = rs.getMetaData();
			WritableWorkbook wwb = Workbook.createWorkbook(os); // 建立excel文件
			WritableSheet sheet = wwb.createSheet(filename, 10); // 创建一个工作表
			// 设置单元格的文字格式
			WritableFont wf = new WritableFont(WritableFont.ARIAL, 10, WritableFont.BOLD, false, UnderlineStyle.NO_UNDERLINE, Colour.BLACK);
			WritableCellFormat wcf = new WritableCellFormat(wf);
			wcf.setVerticalAlignment(VerticalAlignment.CENTRE);
			wcf.setAlignment(Alignment.LEFT);

			// 格式化数据--NUMBER类型
			NumberFormat numberFormat = new NumberFormat("###0.0#######");
			WritableCellFormat cellFormatNumber = new WritableCellFormat(numberFormat);
			cellFormatNumber.setVerticalAlignment(VerticalAlignment.CENTRE);
			cellFormatNumber.setAlignment(Alignment.RIGHT);

			NumberFormat numberFormat2 = new NumberFormat("###0");
			WritableCellFormat cellFormatNumber2 = new WritableCellFormat(numberFormat2);
			cellFormatNumber2.setVerticalAlignment(VerticalAlignment.CENTRE);
			cellFormatNumber2.setAlignment(Alignment.RIGHT);

			// 格式化数据--DATE类型
			DateFormat dateFormat=new DateFormat("yyyy-MM-dd");
			WritableCellFormat cellFormatDate = new WritableCellFormat(dateFormat);
			cellFormatDate.setVerticalAlignment(VerticalAlignment.CENTRE);
			cellFormatDate.setAlignment(Alignment.CENTRE);
			// 格式化数据--文本
            WritableCellFormat  cellTextFormat = new WritableCellFormat(NumberFormats.TEXT);
            cellTextFormat.setAlignment(Alignment.CENTRE);
            cellTextFormat.setVerticalAlignment(VerticalAlignment.CENTRE);

			// 表体数据
			boolean flag = true;
			int r = 1;
			int c = 0;
			int columns = rsmd.getColumnCount();
			//缓存最大标题宽度
			Vector<Integer> colWidth = new Vector<Integer>();
			for(int i = 1; i <= columns; i++){
				colWidth.add(0);
			}

			while (rs.next()) {
				for (int i = 1; i <= columns; i++) {
					//添加表头数据
					if(flag){
						String key = rsmd.getColumnName(i).toLowerCase();
						sheet.setColumnView(c, key.getBytes("GBK").length + 4);
						sheet.addCell(new Label(c, 0, key,wcf));
						colWidth.set(i-1, key.getBytes("GBK").length); //缓存每列第一行数据的宽度
					}

					//设置列宽--如果下一列的数据比前一列宽,则保存最大宽度
					if(rs.getString(i) != null){
						if(colWidth.get(i-1)<rs.getString(i).length()){
							colWidth.set(i-1, rs.getString(i).length());
						}

						sheet.setColumnView(c, colWidth.get(i-1) + 4); //设置宽度
					}

					//判断数据类型

					if(rsmd.getColumnTypeName(i).equalsIgnoreCase("NUMBER")){
						if(rs.getString(i)!=null){
							if (rs.getString(i).indexOf(".")==-1) {
								sheet.addCell(new Number(c, r, rs.getDouble(i),cellFormatNumber2));
							}else{
								sheet.addCell(new Number(c, r, rs.getDouble(i),cellFormatNumber));
							}
						}else{
							sheet.addCell(new Number(c, r, 0,cellFormatNumber2));
						}
					}else if(rs.getString(i)!=null && rsmd.getColumnTypeName(i).equalsIgnoreCase("DATE")){
						sheet.addCell(new DateTime(c, r,rs.getDate(i),cellFormatDate));
					}else {
						sheet.addCell(new Label(c, r, rs.getString(i),cellTextFormat));
					}
					//列数
					c++;
				}
				flag = false;
				r++;
				c = 0;
			}
			wwb.write();
			wwb.close();
			return r+"_"+c;
		} catch (SQLException e) {
			e.printStackTrace();
			return e.getLocalizedMessage();
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return e.getLocalizedMessage();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return e.getLocalizedMessage();
		} catch (WriteException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			return e.getLocalizedMessage();
		} finally {
			try {
				rs.close();
				sm.close();
				conn.close();
			} catch (SQLException e) {
			}
		}
	}
时间: 2024-10-05 16:10:14

JAVA将执行sql结果导入excel的相关文章

Java执行SQL脚本导入

今天做了一个用java导入sql脚本的功能,前台上传一个sql文件,后台先保存本地,然后进行导入.主要代码如下: String cmd = "cmd /c sqlplus usr/[email protected]{//服务器IP:1521/}sid @d:\\1.sql>d:\\t.log"; Process p = null; try {     p = Runtime.getRuntime().exec(cmd); } catch (IOException e) {    

java程序执行SQL脚本文件

首先引入ibatis-common-2.jar包 import com.ibatis.common.jdbc.ScriptRunner; import com.ibatis.common.resources.Resources; jpetstore测试代码如下: package com.ibatis.jpetstore.test; import java.sql.DriverManager; import java.util.Properties; import com.ibatis.commo

java程序执行sql文件

List<String> sqlFileList = new ArrayList<String>();从文件读放内容到按分号放到sqlFileListpublic List<String> readSqlFiles(List<String> fileNameList) {List<String> sqlList = new ArrayList<String>();for (String fileName : fileNameList)

java中使用poi实现导入Excel

1.java中使用poi实现导入Excel public class XlsDto { /** * 选课号 */ private Integer xkh; /** * 学号 */ private String xh; /** * 姓名 */ private String xm; /** * 学院 */ private String yxsmc; /** * 课程号 */ private Integer kch; /** * 课程名 */ private String kcm; /** * 成绩

sql server导入excel数据,字符串类型变成float

如secel中身份证字段,sql server导入后该字段变成float类型,字符串数据变成null, 解决方法:直接将excel中的这一列全部转为了文本格式. 点击excel中的转换列,菜单中点选数据-----分列-----下一步---下一步---文本---完成--保存. 再次导入即可.转为了文本格式.详情搜索  excel中某列数字转文字

【Java】【46】导入Excel到数据库

前言: 业务场景:用户提供Excel表,在页面上点击“导入按钮”,系统读取Excel中的数据,存到对应的数据库 注: 1,目前仅提供导入简单的Excel表,没有合并单元格,只能读取单页sheet 2,方法里用到了具体业务场景的实体类,所以适用性不是很强,其他场景要用的话,还需要修改代码.但是也具有一定的参考性,所以先记录下来.我的后续思路是:在 工具类(ReadExcelUtil) 里根据导入的Excel表头确定要处理的字段名,然后拼成json格式的数据,传到Service层,再做处理.之后再做

Java中开发POI读取导入Excel文件及验证

Apache POI是Apache开发的开源的跨平台的 Java API,提供API给Java程序对Microsoft Office格式档案进行各种操作. POI中Excel操作很简单,主要类有 HSSFWorkbook:Excel文件 HSSFSheet:Excel文件内的分页sheet HSSHRow:行 HSSFCell:单元格 我们想导入读取并验证单元格的数据,如下: excel内容: 开发实例: import java.io.File; import java.io.FileInput

PLSQL导入Excel表中数据

PL/SQL 和SQL Sever导入excel数据的原理类似,就是找到一个导入excel数据的功能项,按照步骤走就是了.下面是一个些细节过程,希望对像我这样的菜鸟有帮助.  www.2cto.com 1.准备excel表. 右击数据表—选择edit data. 选择数据,右击,选择Copy to Excel 2.调整excel表 可以删除A列和F列,然后把你的数据粘到BCDE列,这样做的好处就是在导入excel的时候,绝对不会出现因为格式或其他文字问题导致错误. 3.准备导入 选择tool—O

Java 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包)

ava 使用poi导入excel,结合xml文件进行数据验证的例子(增加了jar包) 假设现在要做一个通用的导入方法: 要求: 1.xml的只定义数据库表中的column字段,字段类型,是否非空等条件. 2.excel定义成模板,里面只填写了所需要的数据,有可能数据有问题. 3.在导入的时候就需要对每个excel单元格的数据进行验证. 4.验证完之后,若所有数据正确,那么批量保存.若有一点点错误,就不执行保存操作,并提示错误原因. 思路: 1.完美使用了Map的功能,先将xml中的数据存入map