`
utopialxw
  • 浏览: 367520 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

jxls+springmvc实现excel模板导出

    博客分类:
  • java
阅读更多
jxls1.*系列(最新版本1.0.6)是基于jdk5的,项目为1.5,1.6的话可以用1.*系列
jxls2.*系列(最新版本2.3.0)是基于jdk7的,项目必须为1.7以上才可以用2.*系列

以下例子基于1.*系列,
(2.*系列excel模板的设计是使用excel批注实现,1.*系列使用标签实现)

0:pom中引入jar包
		<dependency>
		    <groupId>net.sf.jxls</groupId>
		    <artifactId>jxls-core</artifactId>
		    <version>1.0.6</version>
		</dependency>
		<dependency>
		    <groupId>net.sf.jxls</groupId>
		    <artifactId>jxls-reader</artifactId>
		    <version>1.0.6</version>
		</dependency>


1:定义view
import java.io.InputStream;
import java.io.OutputStream;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import net.sf.jxls.transformer.XLSTransformer;

import org.apache.poi.ss.usermodel.Workbook;
import org.springframework.web.servlet.view.AbstractView;

public class JxlsExcelView extends AbstractView {
	
	private static final String CONTENT_TYPE = "application/vnd.ms-excel";

	private String templatePath;

	private String exportFileName;

	/**
	 * @param templatePath 模版相对于当前classpath路径
	 * @param exportFileName 导出文件名
	 */
	public JxlsExcelView(String templatePath, String exportFileName) {
		this.templatePath = templatePath;
		this.exportFileName = exportFileName;
		setContentType(CONTENT_TYPE);
	}

	@Override
	protected void renderMergedOutputModel(Map<String, Object> model, HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		
		InputStream is = null;  
        OutputStream os = null;
        
		os = response.getOutputStream();
		response.setContentType(getContentType());
		
		// 解决导出文件名中文乱码
		String filename = new String(exportFileName.getBytes("gb2312"), "iso8859-1");
		response.setHeader("content-disposition", "attachment;filename=" + filename + ".xls");
		
		// 获取excel模板
		is = JxlsExcelView.class.getClassLoader().getResourceAsStream(templatePath);
        
		//转换成excel并输出
		XLSTransformer transformer = new XLSTransformer();
		Workbook workbook = transformer.transformXLS(is, model);
		
		//将内容写入输出流并把缓存的内容全部发出去  
        workbook.write(os);  
        os.flush();
        os.close();
        is.close();
	}
}


2:resources/jxls/template中设计模板online_user.xls



3:调用
// 导出
	@RequestMapping
	public ModelAndView export(ActionContext context, HttpServletResponse response) throws Exception {
		// 1:准备数据
		List<OnlineUser> userList = getUserList();
		
		// 2:数据放置到jxls需要的map中
		Map<String,Object> modal = new HashMap<String,Object>();  
		modal.put("users", userList);
		modal.put("totalCount", userList.size());
		
		// 3:导出文件
		return new ModelAndView(new JxlsExcelView("jxls/template/online_user.xls","在线用户列表"), modal);
	}


  • 大小: 15.3 KB
分享到:
评论
2 楼 1508987361 2019-02-18  
[i][/i]           
1 楼 1508987361 2017-11-18  
问下实现模板PDF格式下载,怎么改

相关推荐

Global site tag (gtag.js) - Google Analytics