`
風一樣的男子
  • 浏览: 62277 次
  • 性别: Icon_minigender_1
  • 来自: 粤东北山卡拉
社区版块
存档分类
最新评论

jxl 写 excle 文件并下载

阅读更多
action 中代码:
// 文件名
            String fileName = glRoadPart.getPartName()+"【"+pdMaintenanceQuality.getStartNum()+"—"+pdMaintenanceQuality.getEndNum()+"】"+pdMaintenanceQuality.getAssessMan()+DateUtil.convertDateToString(pdMaintenanceQuality.getAssessDate())+System.currentTimeMillis()+".xls";
            // 目录
            String directory = this.servlet.getServletContext().getRealPath("temp");
            if (!FileUtil.isDirectoryExist(directory)) {
				FileUtil.createDirectory(directory);
			}
            //新建Excel文件   
            String filePath = directory+"/"+fileName;
            File excleFile=new File(filePath);  
            if (!excleFile.exists()) {
            	excleFile.createNewFile();
			}
            OutputStream outf = new FileOutputStream(excleFile);  
            WritableWorkbook workbook = Workbook.createWorkbook(outf);
            AssessmentExportExcelUtil.getInstance().exportAll(workbook, pdMaintenanceQuality, glRoadSurfaceInfo, glRoadPart, this.servlet.getServletContext());
            workbook.write();
            workbook.close();    //一定要关闭, 否则没有保存Excel
            outf.close();
            // 设置响应类型和响应首部
            response.setContentType("application/vnd.ms-excel");
//            UploadFile.downloadFile(request, response, excleFile);
            UploadFile.downloadFileByInputStream(request, response, excleFile);
    		//删除文件
    		FileUtil.deleteFile(excleFile);


下载代码:
/**
	 * 下载文件
	 * @param request
	 * @param response
	 * @param file
	 * @return
	 * @throws IOException
	 */
	public static boolean downloadFileByInputStream(HttpServletRequest request, HttpServletResponse response, File file) throws IOException {
		if (file!=null) {
			InputStream fileInput = null;
			OutputStream filetoClient = null;
			try {
				fileInput = new FileInputStream(file);
				filetoClient = response.getOutputStream();
				byte[] buffer = new byte[1024*8];
				int len=0;
				// 写入输出流
				while((len = fileInput.read(buffer)) != -1){
					filetoClient.write(buffer, 0, len);	
				}
				response.setHeader("Content-Disposition", "attachment; filename=\"" + URLEncoder.encode(file.getName(), "UTF-8") + "\"");
			} catch (IOException e) {
				log.error("can not download", e);
				e.printStackTrace();
				response.sendError(405, "File cannot found!");
				return false;
			} finally {
				try {
					if (fileInput != null) {
						fileInput.close();
					}
					fileInput = null;
					
					if (filetoClient != null) {
						filetoClient.flush();
						filetoClient.close();
					}
					filetoClient =null;
				} catch (IOException e) {
					log.error("can not download", e);
					e.printStackTrace();
					response.sendError(405, "download error!");
					return false;
				}
			}
			return true;
		} else {
			log.error(" file is null");
			response.sendError(405, "File cannot found!");
			return false;
		}
	}


注:下载文件试过用 Writer 和 Reader 实现,但下载下来的文件有文件,不知是不是 Struts 的 writer 实现不同

写 excel 帮助类(懒得整理了,整个代码弄上来吧)

import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletContext;

import jxl.format.Alignment;
import jxl.format.Border;
import jxl.format.BorderLineStyle;
import jxl.format.VerticalAlignment;
import jxl.write.Label;
import jxl.write.WritableCell;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;

import org.apache.commons.lang.StringUtils;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;

import com.xx.xx.yy.model.GlRoadPart;
import com.xx.xx.yy.model.GlRoadSurfaceInfo;
import com.xx.xx.xx.model.PdAssessItem;
import com.xx.xx.xx.model.PdMaintenanceQuality;
import com.xx.xx.xx.vo.ColumnVo;
import com.xx.xx.system.service.AppCodeManager;
import com.xx.xx.system.util.DateUtil;

public final class AssessmentExportExcelUtil {
	private static AssessmentExportExcelUtil instance;
	/** 私有构造方法,以防外部类 new 出实例 */
	private AssessmentExportExcelUtil(){}
	public static synchronized AssessmentExportExcelUtil getInstance() {
		if (instance==null) {
			instance = new AssessmentExportExcelUtil();
		}
		return instance;
	}
	public synchronized void exportAll(WritableWorkbook workbook,  PdMaintenanceQuality pdMaintenanceQuality, GlRoadSurfaceInfo glRoadSurfaceInfo, GlRoadPart glRoadPart, ServletContext servletContext) throws InterruptedException {
		GlRoadSurfaceInfo glRoadSurfaceInfo, GlRoadPart glRoadPart, ServletContext servletContext) {
		List<PdAssessItem> pdAssessItems = AssessmentUtil.getInstance().getPdAssessItems(pdMaintenanceQuality, this.EQUIPMENT_CODE);
		AppCodeManager appCodeManager = (AppCodeManager) getBean("appCodeManager", servletContext);
		String direction = appCodeManager.getAppCodesByCategory(216, pdMaintenanceQuality.getDirection()).getCodeName();
		List<ColumnVo> columnVos= this.getSurveryTypeContents(this.EQUIPMENT_CODE);
		String sheetName = "sheet 1";
		WritableSheet sheet =  workbook.createSheet(sheetName, 4);
		WritableFont wf = new WritableFont(WritableFont.TIMES, 10, WritableFont.BOLD, false);//设置写入字体   
		try {
			// title 单元格样式,加粗居中
			WritableCellFormat centerBoldFormat = new WritableCellFormat(wf);   
			// 设置细边框
			centerBoldFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
			// 单元格居中对齐
			centerBoldFormat.setAlignment(Alignment.CENTRE);
			centerBoldFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
			centerBoldFormat.setWrap(true);
			// title 单元格样式,加粗靠左对齐
			WritableCellFormat leftBoldFormat = new WritableCellFormat(wf);   
			// 设置细边框
			leftBoldFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
			// 单元格靠左对齐
			leftBoldFormat.setAlignment(Alignment.LEFT);
			// 正文字样式
			WritableCellFormat normalFormat = new WritableCellFormat();   
			normalFormat.setBorder(Border.ALL, BorderLineStyle.THIN);
			normalFormat.setAlignment(Alignment.CENTRE);
			normalFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
			// 标题样式
			WritableCellFormat titleFormat = new WritableCellFormat(wf);
			titleFormat.setAlignment(Alignment.CENTRE);
			titleFormat.setVerticalAlignment(VerticalAlignment.CENTRE);
			int r = 0;
			// 写 title 
			sheet.addCell(new Label(0, r++, sheetName+"损坏调查表", titleFormat));
			// 合并第 0 行至第一行的1至16单元格
			sheet.mergeCells(0, 0, 15, r++);
			// 写表头
			WritableCell labelCF = new Label(0, r, "  路线名称:"+glRoadPart.getPartName(), leftBoldFormat);
			sheet.addCell(labelCF);
			sheet.setColumnView(0, 25);
			labelCF = new Label(1, r, "  调查方向:"+direction, leftBoldFormat);
			sheet.addCell(labelCF);
			// 合并2~5单元格
			sheet.mergeCells(1, r, 4, r);
			labelCF = new Label(5, r, "  调查时间:"+DateUtil.convertDateToString(pdMaintenanceQuality.getAssessDate())+"         调查人员:"+pdMaintenanceQuality.getAssessMan(), centerBoldFormat);
			sheet.addCell(labelCF);
			// 合并5~15单元格
			sheet.mergeCells(5, r, 15, r++);
			labelCF = new Label(0, r, "调查内容", centerBoldFormat);
			sheet.addCell(labelCF);
			// 合并1~3行
			sheet.mergeCells(0, r, 0, r+2);
			// 设置单元格宽度
			for (int i = 1; i < 16; i++) {
				sheet.setColumnView(i, 5);
			}
			labelCF = new Label(1, r, "程度", centerBoldFormat);
			sheet.addCell(labelCF);
			sheet.mergeCells(1, r, 1, r+2);
			labelCF = new Label(2, r, "单位扣分", centerBoldFormat);
			sheet.addCell(labelCF);
			sheet.mergeCells(2, r, 2, r+2);
			labelCF = new Label(3, r, "权重Wi", centerBoldFormat);
			sheet.addCell(labelCF);
			sheet.mergeCells(3, r, 3, r+2);
			labelCF = new Label(4, r, "计量单位", centerBoldFormat);
			sheet.addCell(labelCF);
			sheet.mergeCells(4, r, 4, r+2);
			// 设为无下边框
			WritableCellFormat tempFormat1 = new WritableCellFormat(wf);
			tempFormat1.setBorder(Border.TOP, BorderLineStyle.THIN);
			tempFormat1.setBorder(Border.LEFT, BorderLineStyle.THIN);
			tempFormat1.setBorder(Border.RIGHT, BorderLineStyle.THIN);
			tempFormat1.setAlignment(Alignment.CENTRE);
			labelCF = new Label(5, r, "起点桩号:"+pdMaintenanceQuality.getStartNum()+"    终点桩号:"+pdMaintenanceQuality.getEndNum(), tempFormat1);
			sheet.addCell(labelCF);
			sheet.mergeCells(5, r, 14, r);
			labelCF = new Label(15, r, "累计损坏", centerBoldFormat);
			sheet.addCell(labelCF);
			sheet.mergeCells(15, r, 15, r+2);
			r++;
			// 设为无下边框
			WritableCellFormat tempFormat2 = new WritableCellFormat(wf);
			tempFormat2.setBorder(Border.BOTTOM, BorderLineStyle.THIN);
			tempFormat2.setBorder(Border.LEFT, BorderLineStyle.THIN);
			tempFormat2.setBorder(Border.RIGHT, BorderLineStyle.THIN);
			tempFormat2.setAlignment(Alignment.CENTRE);
			labelCF = new Label(5, r, "路段长度:"+pdMaintenanceQuality.getRoadLength()+"    路面宽度:"+glRoadSurfaceInfo.getRoadSurfaceWidth(), tempFormat2);
			sheet.addCell(labelCF);
			sheet.mergeCells(5, r, 14, r++);
			for (int i = 1; i < 11; i++) {
				labelCF = new Label(4+i, r, i+"", centerBoldFormat);
				sheet.addCell(labelCF);
			}
			r++;
			int count = columnVos.size();
			// 写表格体
			for (int i=0;i<count;i++) {
				int start = r;
				ColumnVo col = (ColumnVo)columnVos.get(i);
				String unit = col.getUnit();
				// 替换平方米
				if (unit != null && unit.endsWith("</sup>")) {
					unit = "㎡";
				}
				// 程度
				List<String> scopes = col.getScope();
				// 程度代码
				List<String> scopeCodes = col.getScopeCode();
				// 单位扣分
				List<String> dedUcts = col.getDeduct();
				// 权重
				List<String> powers = col.getPower();
				int size = dedUcts.size();
				// 调查内容
				labelCF = new Label(0, start, col.getContent(), normalFormat);
				sheet.addCell(labelCF);
				// 权重
				labelCF = new Label(3, start, powers.get(0), normalFormat);
				sheet.addCell(labelCF);
				// 计量单位
				labelCF = new Label(4, start, unit, normalFormat);
				sheet.addCell(labelCF);
				int end = start + size -1;
				if (size>1) {
					sheet.mergeCells(0, start, 0, end);
					sheet.mergeCells(3, start, 3, end);
					sheet.mergeCells(4, start, 4, end);
					r = end;
				}
				for (int j = 0; j < size; j++) {
					String scope = scopeCodes.get(j);
					List<PdAssessItem> items = this.filterPdAssessItems(pdAssessItems, col.getContentCode(), scope);
					labelCF = new Label(1, start+j, scopes.get(j), normalFormat);
					sheet.addCell(labelCF);
					labelCF = new Label(2, start+j, dedUcts.get(j), normalFormat);
					sheet.addCell(labelCF);
					Double total = new Double("0");
					// 十个调查格
					for (int k = 1; k <= 11; k++) {
						if (k==11) {
							labelCF = new Label(4+k, start+j, this.formatNumber(total), normalFormat);
							sheet.addCell(labelCF);
							
						} else {
							Double value = this.getValue(items, k);
							String valueStr = "";
							if (value != null){
								total += value;
								valueStr = value.toString();
							}
							labelCF = new Label(4+k, start+j, valueStr, normalFormat);
							sheet.addCell(labelCF);
						}
					}
				}
				r++;
			}
		} catch (WriteException e) {
			e.printStackTrace();
		}
	}
	

	/**
	 * 根据 bean 名称从指定的 servletContext 获取实例
	 * @param name
	 * @param servletContext
	 * @return
	 */
	private Object getBean(String name, ServletContext servletContext) {
		ApplicationContext ctx = WebApplicationContextUtils.getRequiredWebApplicationContext(servletContext);
		return ctx.getBean(name);
	}
	
}
0
0
分享到:
评论

相关推荐

    JXL读写EXCEL示例

    在Java编程环境中,处理Excel文件是一项常见的任务,而JXL库提供了一个简洁的API来实现这一功能。JXL是一个开源的Java库,专门用于读取和写入Microsoft Excel文件(.xls格式)。在这个示例中,我们将深入探讨如何...

    JXL 下载 Excel 文档

    这篇博客“JXL 下载 Excel 文档”可能是介绍如何使用JXL库在Java程序中创建、读取或修改Excel文件。 描述中提到的链接指向了一个ITEYE博客文章,虽然具体内容没有给出,但我们可以推测博主可能详细介绍了使用JXL库...

    用jxl下载excel文件

    ### 使用JXL库下载并处理Excel文件 #### 知识点概述 本文将详细介绍如何使用JXL库结合Java网络编程技术来实现从指定URL下载Excel文件,并将其保存到本地指定目录的功能。此外,我们还将简单介绍如何使用JXL库读取...

    JXL读写Excel小例子

    在Java编程环境中,处理Excel文件是一项常见的任务,而JXL库提供了一个简洁的API来实现这一功能。JXL是一个开源的Java库,专门用于读取和写入Microsoft Excel文件(.xls格式)。在这个"JXL读写Excel小例子"中,我们...

    jxl的excel读写操作

    Java中的JXL库是一个广泛使用的库,用于读取和写入Microsoft Excel文件。这个库使得在Java应用程序中处理Excel数据变得简单,而无需依赖于Microsoft Office。以下是对JXL库在进行Excel读写操作时的一些关键知识点的...

    JXL读写Excel源码

    尽管Android原生并不支持直接操作Excel文件,但由于JXL是基于Java的,它可以在Android环境中运行,只要确保你的Android项目能够处理Java的标准库依赖。 JXL的主要功能包括: 1. **读取Excel文件**:JXL可以读取...

    利用jxl操作excel文件

    本篇将详细介绍如何利用`jxl`库来操作Excel文件,并结合实例说明如何从Excel文件中提取数据并生成TXT文件。 首先,我们需要理解`jxl`库的基本结构。`jxl`库主要提供了`Workbook`、`Sheet`、`Cell`等类,分别对应...

    SSH+JXL 下载 Excel 文档

    标题 "SSH+JXL 下载 Excel 文档" 涉及到的是在Java开发中,使用Spring、Struts2框架以及JXL库来实现Excel文件的下载功能。SSH(Spring、Struts2、Hibernate)是Java领域常见的MVC架构,而JXL是一个流行的Java库,...

    Struts2+JXL 下载 Excel 文档

    在"Struts2+JXL 下载 Excel 文档"的场景中,开发者通常会创建一个Action,这个Action负责生成Excel文档并提供下载。用户通过浏览器访问特定URL,Struts2框架接收到请求后,会路由到相应的Action。Action内部会利用...

    java使用jxl打印excel报表文件

    上述代码中,`doGet`方法创建了一个Servlet,当用户访问特定URL时,Servlet会生成一个Excel文件并作为HTTP响应的一部分返回,浏览器通常会提示用户下载。 值得注意的是,JXL库只支持Excel 97-2003格式(.xls),...

    jxl操作excel实例,jxl jar包下载

    `jxl`库允许开发者使用Java语言来读写Microsoft Excel文件,无需依赖于Excel应用程序本身。本文将详细介绍如何使用`jxl`库进行Excel操作,并提供一个简单的实例。 首先,`jxl.jar`是`jxl`库的主要组件,你需要将其...

    jxl读写excel源码

    Java编程语言提供了多种库来处理Excel文件,其中jxl是一个广泛使用的开源库,它使得在Java应用程序中读取和写入Excel文件变得简单。本文将详细介绍如何使用jxl库进行Excel文件的读写操作,以及适合初学者的关键知识...

    jxl读写excel数据,输出图片

    在Java编程环境中,JXL库是一个非常流行的工具,用于读取和写入Microsoft Excel文件。JXL库提供了方便的API,使得开发者可以轻松地处理Excel数据,包括读取单元格内容、修改工作表、添加公式,以及本文重点讨论的...

    JXL读写Excel例子demo

    Java Excel API(简称JXL)是一个广泛使用的开源库,它允许Java开发者轻松地读取、写入和修改Microsoft Excel文件。在"JXL读写Excel例子demo"中,我们将探讨如何利用JXL库来处理Excel数据。这个示例程序包含了一个名...

    Java利用JXL读写Excel

    JXL库是一个广泛使用的开源库,它允许开发者在Java应用程序中方便地读取和写入Excel文件。本篇将详细介绍如何使用JXL进行Excel的读写操作,并提供一个在MyEclipse环境中可以直接运行的示例代码。 首先,你需要在...

    jxl操作excel文件

    ### jxl操作Excel文件知识点详解 #### 一、jxl简介 jxl 是一款用于 Java 环境下的 Excel 操作库,由一位韩国开发者所编写。与 Apache POI 相比,jxl 的功能略显简单,但在中文支持方面表现出色。jxl API 不依赖于...

    jxl导出excel加水印.zip

    `jxl`库是一个流行的Java库,它允许开发者读取、写入和修改Excel文件。本教程将详细介绍如何使用`jxl`库在导出Excel时添加水印,以及涉及的核心类`WritableWorkbook`、`WritableSheet`和`WritableCellFormat`。 `...

    jxl读写excelAPI文档

    JXL库是Java平台上用于处理Microsoft Excel文件的一个开源工具,它允许开发者在Java应用程序中方便地读取和写入Excel数据。本篇将详细介绍JXL API的使用,帮助你理解如何通过JXL来操作Excel文件。 1. **JXL简介** ...

    jxl实现excel上传下载全部功能

    Excel下载涉及从服务器生成Excel文件并提供给客户端下载。主要步骤如下: 1. 根据需要从数据库或其他数据源获取数据。 2. 使用JXL的`Workbook.createWorkbook()`方法创建一个新的工作簿对象。 3. 创建一个`Sheet`...

Global site tag (gtag.js) - Google Analytics