`

Excel操作 >> 导出

阅读更多

ExcelBean.java

public class ExcelBean {
	
	private String path; //Excel寫入的路徑名
	private String sheetName; //工作表名稱(Excel的左下角)
	private int row; //行數
	private int col; //列數
	private List<String> titleList; //列表頭標題
	private int[] width; //每列所占寬度
	private List dataList; //數據集合

           //setter getter

}

 

 ExcelUtil.java

package app.other.poi.excel;

import java.io.BufferedInputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URLEncoder;
import java.util.List;

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

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
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;




/**
 * @version 創建時間:Apr 13, 2009 1:49:49 PM
 * 類說明:Excel工具類
 */
public class ExcelUtil{
	
	private static final Log log = LogFactory.getLog(ExcelUtil.class);//日志

	/**
	 * 創建Excel對象
	 * @param excelBean
	 * @return
	 */
	public static HSSFWorkbook creatExcel(ExcelBean excelBean){
		HSSFWorkbook wb = new HSSFWorkbook(); //創建Excel工作薄
		//在Excel工作薄中建一工作表,默認為缺省值
//		HSSFSheet sheet = wb.createSheet();
        HSSFSheet sheet = wb.createSheet(excelBean.getSheetName());
        //設置工作表各列寬度
       // setColumnWidth(sheet, excelBean.getWidth());
        //設置字體,樣式
        //HSSFFont font = setFont(wb, "宋體");
        //HSSFCellStyle style = setCellStyle(wb, font);
        //設置第一行
        List<String> titleList = excelBean.getTitleList();
        setRowValue(sheet, titleList, 0); //在索引0的位置創建行(最頂端的行)
        //設置數據行
        List dataList = excelBean.getDataList();
        if(dataList != null){
        	for(int i=0; i<dataList.size(); i++){        		
        		List rowList = (List) dataList.get(i);
        		setRowValue(sheet, rowList, i+1); //在索引1的位置創建行(第2行)        		
        	}
        }
        return wb;
	}
	
	/**
	 * 創建Excel對象  
	 * @param excelBean
	 * @param excelBean2
	 * @return
	 */
	public static HSSFWorkbook creatExcel(ExcelBean excelBean, ExcelBean excelBean2){
		HSSFWorkbook wb = new HSSFWorkbook(); //創建Excel工作薄
		//在Excel工作薄中建一工作表,默認為缺省值
//		HSSFSheet sheet = wb.createSheet();
        HSSFSheet sheet = wb.createSheet(excelBean.getSheetName());
        //設置工作表各列寬度
       // setColumnWidth(sheet, excelBean.getWidth());
        //設置字體,樣式
        //HSSFFont font = setFont(wb, "宋體");
        //HSSFCellStyle style = setCellStyle(wb, font);
        //設置第一行
        List<String> titleList = excelBean.getTitleList();
        setRowValue(sheet, titleList, 0); //在索引0的位置創建行(最頂端的行)
        //設置數據行
        List dataList = excelBean.getDataList();
        if(dataList != null){
        	for(int i=0; i<dataList.size(); i++){        		
        		List rowList = (List) dataList.get(i);
        		setRowValue(sheet, rowList, i+1); //在索引1的位置創建行(第2行)        		
        	}
        }
        HSSFSheet sheet2 = wb.createSheet(excelBean2.getSheetName());
        //設置工作表各列寬度
       // setColumnWidth(sheet, excelBean.getWidth());
        //設置字體,樣式
        //HSSFFont font = setFont(wb, "宋體");
        //HSSFCellStyle style = setCellStyle(wb, font);
        //設置第一行
        List<String> titleList2 = excelBean2.getTitleList();
        setRowValue(sheet2, titleList2, 0); //在索引0的位置創建行(最頂端的行)
        //設置數據行
        List dataList2 = excelBean2.getDataList();
        if(dataList2 != null){
        	for(int i=0; i<dataList2.size(); i++){        		
        		List rowList = (List) dataList2.get(i);
        		setRowValue(sheet2, rowList, i+1); //在索引1的位置創建行(第2行)        		
        	}
        }
        return wb;
	}
	
	/**
	 * 寫入到物理地址中
	 * @param wb
	 * @param path
	 * @return
	 */
	public static boolean writeExcel(HSSFWorkbook wb, String path){
		boolean flag = true;
		try{
            // Write the output to a file
            FileOutputStream fileOut = new FileOutputStream(path);
            wb.write(fileOut);
            fileOut.close();
            log.info("Excel寫入到" + path + ", 成功!");
        }catch(Exception e){
        	log.error("Excel寫入到" + path + ", 失敗!");
        	flag = false;
            e.printStackTrace();
        }
        return flag;
	}
	
	/**
	 * 下載Excel
	 * @param wb
	 * @param filename MemberList.xls
	 * @param response
	 * @return
	 */
	public static boolean downloadExcel(HSSFWorkbook wb, String filename, HttpServletResponse response){
		boolean flag = true;		
		//設置輸入流
		OutputStream output = null;
		try {
//			設置響應類型
			response.setHeader("Content-disposition", "attachment;filename="+new String(filename.getBytes("GBK"),"ISO-8859-1"));
			response.setContentType("application/x-msdownload");
			
			output = response.getOutputStream();			
			wb.write(output);//輸出到網頁中
			output.flush();
			log.info("下載Excel:" + filename + ", 成功!");
		} catch (Exception e) {
			flag = false;
			log.info("下載Excel:" + filename + ", 失敗!");
			e.printStackTrace();
		} finally{
			try {
				output.close();
			} catch (IOException e) {
				e.printStackTrace();
			}
		}
		return flag;		
	}
	
	/**
	 * 設置工作表各列寬度
	 * @param sheet
	 * @param width
	 */
	public static void setColumnWidth(HSSFSheet sheet, int[] width){
        for(int i=0;i<width.length;i++){
            sheet.setColumnWidth((short)i, (short)(width[i]*256));
        }
    }
	
	/**
	 * 設置字體
	 * @param wb
	 * @param fontName 
	 */
	public static HSSFFont setFont(HSSFWorkbook wb, String fontName){
		HSSFFont font = wb.createFont();
		font.setFontName(fontName); //宋體, 
		return font;		
	}
	
	/**
	 * 將字體對象賦值給單格樣式對象
	 * @param wb
	 * @param font
	 * @return
	 */
	public static HSSFCellStyle setCellStyle(HSSFWorkbook wb, HSSFFont font){
		HSSFCellStyle style = wb.createCellStyle();
        style.setFont(font);
        return style;
	}
	
	/**
	 * 設置行值
	 * @param sheet
	 * @param List
	 * @return
	 */
	public static HSSFSheet setRowValue(HSSFSheet sheet, List<String> list,int rowNo){
		if(list != null){
			//在索引rowNo的位置創建行
			HSSFRow rowTitle = sheet.createRow(rowNo);
			for(int i= 0 ; i<list.size();i++){
				String title = list.get(i);
				//從索引0的位置開始創建單元格(左上端)
				HSSFCell cell = rowTitle.createCell((short)i);
				cell.setCellValue(title); //設置單元格內容
			}
		}
		return sheet;
	}
	
	/**
	 * 設置行值
	 * @param sheet
	 * @param List
	 * @return
	 */
	public static HSSFSheet setRowValue(HSSFSheet sheet, List<String> list,
			int rowNo,  HSSFCellStyle style){
		if(list != null){
			//在索引0的位置創建行(最頂端的行)
			HSSFRow rowTitle = sheet.createRow(rowNo);
			for(int i= 0 ; i<list.size();i++){
				String title = list.get(i);
				//從索引0的位置開始創建單元格(左上端)
				HSSFCell cell = rowTitle.createCell((short)i);
				cell.setCellValue(title); //設置單元格內容
				cell.setCellStyle(style);//單元格樣式  
			}
		}
		return sheet;
	}
	
	/**
	 * 下載(从服务器上下载现程的Excel文件)
	 * @param request
	 * @param response
	 * @param path 路径Z:\PowerTest\
	 * @param fileName 文件名 ExampleFile/UserProfileExample.xls
	 * @throws Exception
	 * @return loadFlag ---true 下載成功, false  下載失敗
	 */
	public static boolean download(HttpServletRequest request, HttpServletResponse response, String path, String fileName) throws Exception{  
		boolean loadFlag = true; //下載成功標志位
		File file = null;
		InputStream in = null; // 輸入流
		OutputStream out = null; // 輸出流
		//在下載附件之前設置響應類型和頭部文件
		response.setContentType("application/x-msdownload");
		response.setHeader("Content-disposition", "attachment;filename="+ URLEncoder.encode(ExcelUtil.subLastStr(fileName, "/"),"UTF-8"));		
		try{
			file = new File(path + fileName); //取得文件對像
//			從下載附件創建輸入流,并向請求獲取并寫入(客戶端或網絡)輸出流
			in = new BufferedInputStream(new FileInputStream(file));
			out = response.getOutputStream();
			int readSize = 1024 * 10; //讀取大小
			int length = 0; //讀取剩余大小
			byte[] readByte = new byte[readSize];
			while ((length = in.read(readByte, 0, readSize)) != -1) {
				out.write(readByte, 0, length);
			}
			out.flush();
		}catch(Exception e){
			loadFlag = false;
			e.printStackTrace();
		}finally{
			if(in!=null || out!=null ){
				try {
					in.close();
					out.close();
				} catch (IOException e) {
					loadFlag = false;
					e.printStackTrace();
				}	
			}
		}
		return loadFlag;
	}
	
	/**
	 * 取得分割符最后的字符串
	 * @param path 路径
	 * @param regex '/'
	 * @return
	 */
	public static String subLastStr(String path, String regex){
		String temp = "";
		if(path == null){
			temp = "";
		}else{
			String[] arr = path.split(regex);
			temp = arr[arr.length-1];
		}
		return temp;		
	}


}

 

 

实例:

//匯出Excel
	public void sendExcel(List list,HttpServletResponse response) throws Exception{
		
		ExcelBean excelBean = new ExcelBean();
		excelBean.setWidth(new int[3033]);
		excelBean.setSheetName("會員信息汇出");
//		List<String> topNameList = new ArrayList();
//		topNameList.add("會員管理");
//		excelBean.setTitleList(topNameList);// 設置第一行標題列表
		List<String> titleList = new ArrayList();
		titleList.add("序號");
		titleList.add("帳號");
		titleList.add("姓名");
		titleList.add("E-Mail");
		titleList.add("訂閱電子報");
		titleList.add("加入日期");
		titleList.add("剩餘影片點數");
		List excelList = new ArrayList();
		excelBean.setTitleList(titleList);// 設置標題列表
//		excelList.add(titleList);// 設置標題列表
		int i = 0;
		//循環取出list的值
		for (Iterator iter = list.iterator(); iter.hasNext();) {
			++i;
			Member member = (Member) iter.next();
			List rowList = new ArrayList();
			rowList.add(String.valueOf(i));//給rowList賦值序號
			rowList.add(member.getLoginId());//給rowList賦值帳號
			rowList.add(member.getName());//給rowList賦值姓名
			rowList.add(member.getEmail());//給rowList賦值E-Mail
			//先判斷訂閱電子報,如果有值就進行轉換,然後給rowList賦值訂閱電子報
			if(member.getEpaper()!=null&&member.getEpaper()!=""){
				if("Y".equals(member.getEpaper())){
					rowList.add("是");
				}else{
					rowList.add("否");
				}
			}else{
				rowList.add("");
			}
			//先判斷加入日期,如果有值就進行轉換,然後給rowList賦值加入日期
			if(member.getCreateDT()!=null){
				String dt = String.valueOf(member.getCreateDT());
				int dtLen = dt.indexOf(" ");
				dt = dt.substring(0, dtLen);
				rowList.add(dt);
			}else{
				rowList.add("");
			}
			
			rowList.add(member.getSurplusFilmNum());//給rowList賦值剩餘影片點數
			excelList.add(rowList);
		}
	    
		excelBean.setDataList(excelList);
		HSSFWorkbook wb = ExcelUtil.creatExcel(excelBean);
		ExcelUtil.downloadExcel(wb, "member.xls", response);
		
	}

 

分享到:
评论

相关推荐

    QT 高效 导入导出excel , tableWidget显示

    - 对于导出,可以一次性将所有数据写入Excel,而非逐行操作,以减少API调用次数。 以上就是QT高效导入导出Excel并使用tableWidget显示的基本流程和优化策略。实际开发时,根据项目需求和资源限制,可能还需要进行...

    ABAP-操作Excel导出数据

    为了更好地理解这一过程,你可以参考提供的文档:《用OLE DOI 实现ABAP导出EXCEL表格.docx》和《ABAP-透過OLE操作OFFICE.docx》。同时,《OLE.pdf》可能包含更深入的OLE和DOI技术细节,这对于优化和调试代码会非常有...

    C# excel 操作类 支持excel的各种导出

    总之,C#的Excel操作类为开发者提供了强大的工具,使他们能够轻松地处理Excel文件,实现数据的导入导出、格式设置等复杂任务,大大提升了工作效率。对于处理大量Excel数据的企业级应用来说,这样的类库是不可或缺的...

    excel 自定义列导出, excel导出

    标题说的很清楚,利用asm-3.1.jar,cglib-2.2.jar,commons-io-1.3.2.jar,poi-3.9-20121203.jar 开发的一个工具包。...其中用到字节码编码,反射,excel操作。 主要功能1、自定义列导出excel Main()类为测试用例

    使用aspose导出Excel(根据模板导出excel).zip

    首先,Aspose库提供了强大的Excel操作功能,允许开发者无需依赖Microsoft Office就可以创建、修改和渲染Excel文件。在.NET环境中,Aspose.Excel组件是实现这一目标的关键。你需要先在项目中引用Aspose.Excel的DLL...

    导出Excel文档.

    在IT行业中,尤其是在数据处理和报告生成的场景下,导出Excel文档是一项常见的任务。...在实际开发中,根据具体需求,可以结合数据库操作、数据处理逻辑以及前端展示等环节,构建完整的Excel导出系统。

    jquery 导出excel方法

    当需要将数据从网页导出为Excel格式时,jQuery提供了多种方法来实现这一功能。下面将详细介绍jQuery导出Excel的方法,以及相关知识点。 1. **jQuery插件:TableExport** 文件`tableExport.jquery.plugin-a891806`...

    C#导出Excel 导出PDF

    Excel文件通常以`.xlsx`或`.xls`格式存储,C#可以借助Microsoft Office Interop库直接操作Excel对象,但这要求目标机器上安装了Office。另一种更灵活且无需依赖Office的方法是使用开源库,如EPPlus。EPPlus库支持...

    js操作table导出excel

    总结,JavaScript操作HTML表格导出Excel主要涉及以下几个步骤: 1. 引入`FileSaver.js`库。 2. 创建HTML表格并填充数据。 3. 使用JavaScript获取表格数据并转换为CSV格式。 4. 创建Blob对象,并使用`saveAs`方法保存...

    导出excel注解方式

    在Java编程中,导出Excel是一项常见的数据处理任务,尤其在数据分析、报表生成等领域中广泛应用。本教程将探讨如何利用注解方式实现简单的Excel表格导出功能。这种方法通常结合Java库,如Apache POI,来简化操作流程...

    poi导出根据模板导出excel和简单列表导出excel源码

    这两个接口允许开发者创建、修改和操作 Excel 工作簿、工作表、单元格等。 2. **根据模板导出 Excel** 根据模板导出 Excel 的关键是预先创建一个包含静态样式和内容的模板文件,然后在程序运行时替换模板中的动态...

    delphi高效率导出数据到excel

    Delphi 高效率导出数据到 Excel Delphi 是一个功能强大的开发工具,可以用于开发各种类型的应用程序,而 Excel 是一个非常popular的电子表格软件,经常用于数据分析和处理。在实际开发中,我们经常需要将数据从 ...

    pb导出excel2007

    在实际开发中,有时我们需要将PB的数据窗口数据导出到Excel以便于分析、处理或分享,而这个过程可以通过调用特定的DLL(动态链接库)来实现,而不是依赖于OLE自动化(即直接启动Excel进程进行操作)。 首先,使用...

    layui数据表格导出Excel插件

    这两个文件都是JavaScript库,通过在layui表格中添加相应的操作按钮,实现一键导出数据到Excel的功能。 要使用这个插件,首先需要确保你的项目已经引入了layui框架,并且正确配置了layui的基本元素。然后,你需要在...

    易语言高级表格快速导出EXCEL

    本主题聚焦于易语言在处理高级表格数据时的高效导出功能,特别是如何将数据快速导出为Excel格式。Excel作为微软Office套件的一部分,是广泛用于数据分析和报表制作的工具,其丰富的公式、图表和自定义功能使得数据...

    qt导出、操作excel(多线程)

    在Qt框架下,导出和操作Excel...总之,通过Qt的QAxObject和多线程技术,我们可以高效且流畅地处理大量数据的导出和Excel操作,提升用户体验。在实际开发中,还需要注意错误处理和异常安全,确保程序的稳定性和可靠性。

    前端导出Excel table2excel

    在前端开发中,有时我们需要提供一个功能,让用户能够将网页上的表格数据导出为Excel文件。"前端导出Excel table2excel"就是这样一个解决方案,它实现了在浏览器端将HTML表格直接转换为Excel文件,实现了“所见即...

    导入导出EXCEL 导出Excel 导出带线的Excel 导入DataSet

    在.NET开发环境中,导入和导出Excel数据是一项常见的任务,特别是在数据分析、报表生成以及数据迁移等场景中。本文将详细讲解如何使用给定的压缩包文件中的代码来实现这一功能,特别是导出带边框的Excel和将数据导入...

    easyui导出excel工具

    (0)" class="easyui-linkbutton" onclick="exportExcel()"&gt;导出Excel&lt;/a&gt; &lt;/div&gt; ``` (2)导出函数:在JavaScript中编写导出Excel的逻辑。这通常涉及到与后端接口的通信,发送请求获取DataGrid的全部数据。 ```...

    excel导出实现代码

    在IT行业中,Excel导出是一项常见的需求,尤其是在数据处理、报表生成和数据分析等领域。Apache POI是一个开源项目,专门用于读取和写入Microsoft Office格式的文件,包括Excel(.xlsx和.xls)。以下是对"Excel导出...

Global site tag (gtag.js) - Google Analytics