java SHH框架 实现数据库查询出的list导入excel并下载

1.前言  struts2对于写入excel数据支持的很好,话不多说,上代码

2.jsp页面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ taglib prefix="s" uri="/struts-tags" %>
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<base href="<%=basePath%>">
<title>Insert title here</title>
<script type="text/javascript" src="js/jquery-1.9.1.min.js"></script>
</head>
<body>
<s:form action="ExportExcel" >
<s:submit value="导出excel" id="ExportExcel"/>
</s:form>
</body>
</html>

3.action代码:

package com.dwg.action;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import com.dwg.bean.Student;

import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

import com.opensymphony.xwork2.ActionSupport;
import com.dwg.service.TreeService;
public class ExportExcelAction extends ActionSupport{

	/**
	 *
	 */
	private static final long serialVersionUID = 1L;
	private TreeService TreeService;
	public TreeService getTreeService() {
		return TreeService;
	}
	public void setTreeService(TreeService treeService) {
		TreeService = treeService;
	}
    public List<?> list;
	public List<?> getList() {
		return list;
	}
	public void setList(List<?> list) {
		this.list = list;
	}
//	private List<Student> slist;
//
//	public List<Student> getSlist() {
//		return slist;
//	}
//	public void setSlist(List<Student> slist) {
//		this.slist = slist;
//	}
	private InputStream excelStream; 

    public InputStream getExcelStream() {
		return excelStream;
	}
	public void setExcelStream(InputStream excelStream) {
		this.excelStream = excelStream;
	}
	private String fileName;

	public String getFileName() {
		return fileName;
	}
	public void setFileName(String fileName) {
		this.fileName = fileName;
	}
	private  List<Student> slist = new ArrayList<Student>();

	public String execute() throws Exception{
    	String sql = "select * from student";
    	list = this.TreeService.getTreeList(sql);
    	//slist = dwg(list);

    	for(int i=0; i<list.size(); i++){
    		Student student =new Student();
    		Object[] objects = (Object[]) list.get(i);
    		student.setId(((Integer)objects[0]).intValue());
    		student.setName(objects[1].toString());
    		student.setClass_id(((Integer)objects[2]).intValue());
//    		student.setId(i);
//    		student.setName("人员"+i);
//    		student.setClass_id(i);
    		System.out.println("student值: "+student.getId()+student.getName()+student.getClass_id());
    		//Student student = (Student) list.get(i);
    		slist.add(student);
    		System.out.println("----nmd5----");
    	}

    	XSSFWorkbook workbook = this.getWorkbook(slist);
        if (workbook != null) {
            Calendar c = Calendar.getInstance();
            int year = c.get(Calendar.YEAR);
            int month = c.get(Calendar.MONTH) + 1;
            String month_ = new String("" + month);
            if (month < 10) {
                month_ = "0" + month;
            }
            int day = c.get(Calendar.DAY_OF_MONTH);
            String day_ = new String("" + day);
            if (day < 10) {
                day_ = "0" + day;
            }
            this.workbook2InputStream(workbook, year + "-" + month_ + "-"  + day_ + "");
    }
        return SUCCESS;
	}

	public void workbook2InputStream(XSSFWorkbook workbook, String fileName) throws Exception {
        this.fileName = fileName; // 设置文件名
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        workbook.write(baos);
        baos.flush();
        byte[] aa = baos.toByteArray();
        excelStream = new ByteArrayInputStream(aa, 0, aa.length);
        baos.close();  

    }
	private XSSFWorkbook getWorkbook(List<Student> list) throws Exception {
        XSSFWorkbook workbook = new XSSFWorkbook(); // 创建工作表
        XSSFCellStyle style = workbook.createCellStyle();
        style.setAlignment(XSSFCellStyle.VERTICAL_CENTER);
        style.setAlignment(XSSFCellStyle.ALIGN_CENTER);
        XSSFSheet sheet = workbook.createSheet("sheet1"); // 创建表单
        XSSFRow row = sheet.createRow(0); // 创建第一行 title
        XSSFCell cell = null;
        for (int i = 0; i < 3; i++) {
            cell = row.createCell(i);
            cell.setCellValue(i);
            cell.setCellStyle(style);
        }
        // creatExportData   

        for (int i = 0; i < list.size(); i++) {
            row = sheet.createRow(i + 1);//
            cell = row.createCell(0);
            cell.setCellValue(list.get(i).getId());
            cell = row.createCell(1);
            cell.setCellValue(list.get(i).getName());
            cell = row.createCell(2);
            cell.setCellValue(list.get(i).getClass_id());
//            cell = row.createCell(3);
//            cell.setCellValue(list.get(i).getAddress_id());  

        }
        return workbook;
    }  

}

4.struts.xml配置:

	    <action name="ExportExcel" class="ExportExcelAction">
	    <result name="success" type="stream">
        <param name="contentType">application/vnd.ms-excel</param>
        <param name="inputName">excelStream</param>
        <param name="contentDisposition">attachment;filename="${fileName}.xlsx"</param>
        <param name="bufferSize">1024</param>
	    </result>
	    </action>

5.运行效果:

时间: 2024-08-04 21:30:15

java SHH框架 实现数据库查询出的list导入excel并下载的相关文章

java实现从一个数据库查询数据经过处理导入另外一个数据库中

当数据库表中有clob字段或要对表中数据做较复杂处理时就不太好用脚本从一个数据库导入数据到另外一个数据库中了,这时就要通过代码实现了,下面以orale数据库为例代码如下: import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Timestamp; import java.text

ci框架自定义数据库查询名称(方法)

适合刚接触PHP和ci框架的人,本人也是小白 原因:官方给的数据库查询方法可能不利于记忆使用,官方给的一些方法只能进行基础查询,每次复合查询都需要拼接条件,自己定义定义方法直接调用方法即可 操作步骤: 1.ci框架官网下载好解压后的文件夹会有application这个目录,在application目录下找到models子目录,在models子目录里建一个PHP文件(名字随便起,如Base_model.php) 这个文件里就是给你写自己定义的数据库查询方法,但开头要这样写(如下),自己定义的方法写

十二、CI框架之数据库查询

一.在database文件中写明数据库相关信息 二.我们数据库中的表如图所示 三.在CI中查询数据库内容 四.在浏览器输出 原文地址:https://www.cnblogs.com/tianpan2019/p/11141224.html

java下连接mysql数据库 ——查询语句——select

Java MySQL 连接 本章节我们为大家介绍 Java 如何使用 使用 JDBC 连接 MySQL 数据库. Java 连接 MySQL 需要驱动包,最新版下载地址为:http://dev.mysql.com/downloads/connector/j/,解压后得到jar库文件,然后在对应的项目中导入该库文件. 你可以下载本站提供的 jar 包:mysql-connector-java-5.1.39-bin.jar 本实例使用的是 Eclipse,导入 jar 包: MySQL 8.0 以上

java将文件夹md5为名的图片与数据库查询对应md5后导入相应图片到某分类下

public class FolderUtil { /** * @param path * @return * 得到目录下的文件 */ public List<String> getDirectoryFile(String path){ List<String> retList=new ArrayList<String>(); File dir = new File(path); File[] files = dir.listFiles(); if (files ==

[转] 从数据库中读取图片并导入Excel文件,C#方式

原文地址, 作者 Lvyou1980 直接源码吧. using System; using System.IO; using System.Data; using System.Drawing; using System.Drawing.Imaging; using System.Windows.Forms; using Excel; private void EduceExcel() { string picPath=Directory.GetCurrentDirectory()+'\\Exc

ThinkPhp框架的数据库操作(查询)

TP框架有一套自己的数据库操作的代码,包括数据库的增.删.改.查.本文主要讲解TP框架的数据库查询操作. 找到入口文件的控制器: 我这里的入口文件是Show文件夹下的控制器. 打开Login控制器. 代码写在index方法中. 数据库的定义方式有三种. 前两种要写模型函数,最后一种不需要. 模型的例子(放在Model文件夹下,名字与类名相同,本例的名字:UserModel.class.php) <?php namespace Admin\Model; use Think\Model; class

java开源框架SpringSide3多数据源配置的方法详解

原创整理不易,转载请注明出处:java开源框架SpringSide3多数据源配置的方法详解 代码下载地址:http://www.zuidaima.com/share/1781579130801152.htm 在SpringSide 3社区中,不断有人提出多数据源配置的问题,但是时至今日却一直没有一个完美的答案.经过一个星期的折腾,我总算搞清楚了在SpringSide 3中配置多数据源的各种困难并加以解决,在这里,特地把我配置SpringSide 3项目中多数据源的过程写出来,与大家分享. 我使用

数据库查询服务框架

原本是为了验证前面的通信框架,在不知不觉的2个月中,越写越大. 既然写了就简单介绍下 数据库查询,主要是客户端发送sql语句到服务端,服务端查询完成以后将数据返回 客户端DBClientManager类中封装了一般的sql查询方法,按照c#的方式封装的,只需要调用不同的方法则返回不同的数据: 一般的查询均返回DBResult对象,里面的Result字段对应返回数字,表结构DataTableJson对象: 当然也可以返回sqldatareader对象,其原理是分步返回而已 构造的存储结构是按照列存