`

jxl excelUtils

阅读更多
package com.ruijie.dinnerorder.web.utils;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.util.List;

import javax.faces.context.FacesContext;
import javax.servlet.ServletContext;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

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;

public class ExcelUtils {
	private static String sheetName = "data";  
	private HSSFWorkbook wb;  
	private HSSFSheet sheet;  
	private HSSFRow row;  
	private HSSFCell cell;  
	private HSSFFont font;  
	private HSSFCellStyle cellStyle;  
	private FileOutputStream fileOut;  
	public ExcelUtils() { 
		wb = new HSSFWorkbook();  
	} 						

	/**  
	 * @param excelName 
	 * excel名称。 
	 * @param list  
	 * 这个list里面存放的是对象数组。数组元素可以转化为字符串显示的。这个对象数组一般对应数据库里的几列。  
	 * @param firstRowValue 
	 * */  
	public void outputExcel(String excelName, List list, String[] firstRowValue) { 
		try {  
			this.createSheet(firstRowValue);  
			this.setValueToRow(excelName, list);  
		} catch (Exception ex) {  
			System.out.print(ex); 
		}  // System.out.println("文件名是:" + excelName);  downloadFile(excelName);  }  
	}
	
	public void outputExcel(String excelName, List list) {
	    try {
	      this.setValueToRow(excelName, list);
	    } catch (Exception e) {
	      // TODO: handle exception
	    }
	    downloadFile(excelName);
	  }

	/**
	 * 设置excel的没一行的值...
	 * @param excelName
	 * @param list
	 */
	 private void setValueToRow(String excelName, List list) {
		    // 获得JSF上下文环境
		    FacesContext context = FacesContext.getCurrentInstance();
		    // 获得ServletContext对象
		    ServletContext servletContext = (ServletContext) context
		        .getExternalContext().getContext();
		    // 取得文件的绝对路径
		    excelName = servletContext.getRealPath("/UploadFile") + "/" + excelName;
		    System.out.println("生成文件的路径是:" + excelName);
		    Object[] obj;
		    try {
		      for (int i = 0; i < list.size(); i++) {
		        row = sheet.createRow(i + 1);
		        obj = (Object[]) list.get(i);
		        this.createCell(row, obj);
		      }
		      fileOut = new FileOutputStream(excelName);
		      wb.write(fileOut);

		    } catch (Exception ex) {
		      System.out.print("生成报表有误:" + ex);
		    } finally {
		      try {
		        fileOut.flush();
		        fileOut.close();
		      } catch (Exception e) {
		        System.out.println("ExcelUtil.setValueToRow()");
		      }
		    }
		  }

	 	/**
	 	 * 创建表头
	 	 * @param firstRowValue
	 	 */
		  private void createSheet(String[] firstRowValue) {
		    try {
		      sheet = wb.createSheet(ExcelUtils.sheetName);
		      row = sheet.createRow(0);
		      font = wb.createFont();
		      font.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
		      cellStyle = wb.createCellStyle();
		      cellStyle.setFont(font);
		      for (int i = 0; i < firstRowValue.length; i++) {
		        cell = row.createCell((short) i);
		        cell.setCellStyle(cellStyle);
//		        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
		        cell.setCellValue(firstRowValue[i]);
		      }
		    } catch (Exception ex) {
		      System.out.print(ex);
		    }
		  }
		  
		  /**
		   * 创建表格的值
		   * @param row
		   * @param obj
		   */
		  private void createCell(HSSFRow row, Object[] obj) {
		    try {
		      for (int i = 0; i < obj.length; i++) {
		        cell = row.createCell((short) i);
//		        cell.setEncoding(HSSFCell.ENCODING_UTF_16);
		        cell.setCellValue(obj[i].toString());
		      }
		    } catch (Exception ex) {
		      System.out.print(ex);
		    }
		  }

		  /**
		   * <p>
		   * 功能说明:根据提供的文件名下载文件,不支持中文文件名
		   * </p>
		   * 此方法由yongtree添加,实现文件生成后的下载
		   * 
		   * @param strfileName
		   *            String
		   * @return void
		   */
		  private static void downloadFile(String strfileName) {
		    try {
		      // 获得JSF上下文环境
		      FacesContext context = FacesContext.getCurrentInstance();
		      // 获得ServletContext对象
		      ServletContext servletContext = (ServletContext) context
		          .getExternalContext().getContext();
		      // 取得文件的绝对路径
		      String excelName = servletContext.getRealPath("/UploadFile") + "/"
		          + strfileName;
		      File exportFile = new File(excelName);
		      
		      HttpServletResponse httpServletResponse = (HttpServletResponse) FacesContext
		          .getCurrentInstance().getExternalContext().getResponse();
		      ServletOutputStream servletOutputStream = httpServletResponse
		          .getOutputStream();
		      httpServletResponse.setHeader("Content-disposition",
		          "attachment; filename=" + strfileName);
		      httpServletResponse.setContentLength((int) exportFile.length());
		      httpServletResponse.setContentType("application/x-download");
		      // httpServletResponse.setContentType("application/vnd.ms-excel");

		      byte[] b = new byte[1024];
		      int i = 0;
		      FileInputStream fis = new java.io.FileInputStream(exportFile);
		      while ((i = fis.read(b)) > 0) {
		        servletOutputStream.write(b, 0, i);
		      }
		    } catch (IOException e) {
		      e.printStackTrace();
		    }
		    FacesContext.getCurrentInstance().responseComplete();
		  }
}

分享到:
评论

相关推荐

    excelUtils公共导出支持xls与xlsx

    因此,这个"excelUtils"库可能是基于JXL构建的,以提供对新旧两种Excel格式的支持。 "excelUtils中最后一个方法是excel文件导入例子"这部分描述可能意味着在提供的源代码中,有一个名为`ExcelUtil`的类,其中包含一...

    jxl导出excel实践

    在IT行业中,处理数据并以易于理解和分析的形式呈现是一个关键任务。...结合“ExcelUtils.java”文件,你将能够更好地理解JXL库的工作原理,并将其应用于自己的项目中,提高数据处理的效率和灵活性。

    jxl 读取Excel模板并写入数据通用工具类

    接下来,我们可以创建一个名为`ExcelUtils`的工具类,其中包含两个主要方法:`readTemplate`用于读取Excel模板,`writeData`用于将数据写入到模板中。这里我们假设模板中的某些单元格被标记为数据占位符,这些占位符...

    JAVA EXCEL 处理

    public class ExcelUtils { /**读取Excel文件的内容 * @param file 待读取的文件 * @return */ public static String readExcel(File file){ StringBuffer sb = new StringBuffer(); ...

    ExcleUtils工具类,poi-4.0.1.jar,poi-ooxml-4.0.1.jar稳定jar包

    5. **jxl-2.6.12.jar**: 除了Apache POI之外,还提到了jxl库,这是一个较早的用于处理Excel的Java库。尽管它不支持.xlsx格式,但对于.xls文件的操作仍然有效。在这个场景中,可能是为了兼容旧版本的Excel文件。 6. ...

    jexcelapi_2_6_9_1.4.zip

    本文将深入探讨jExcelAPI的使用,并结合提供的示例文件`ExcelUtils.java`,展示如何借助这个库高效地进行Excel操作。 首先,让我们了解jExcelAPI的核心功能。jExcelAPI支持读取和写入Excel的.xls格式文件(Excel 97...

    Android开发实现的导出数据库到Excel表格功能【附源码下载】

    ExcelUtils类提供了一个统一的接口来操作Excel文件,使得我们可以轻松地将数据导出到Excel表格。 知识点三:Android用户界面设计 在本文中,我们使用了Android的用户界面组件来设计用户界面。我们使用了EditText...

    java导入导出Excel工具类

    ExcelUtils 一个实用的java导入导出Excel工具类,基于开源的Java Excel API(JXL)纯java类库实现,Windows和Linux系统下均可使用。 主要实现功能如下: 导出:将List转化为Excel(listToExcel)。 导入:将Excel...

    Desktop --java操作excel

    在给定的"ExcelUtils.java"文件中,很可能就是使用了POI库来实现Excel操作。 2. **写入Excel**:使用Java写入Excel通常包括创建工作簿(Workbook)、工作表(Sheet)以及单元格(Row和Cell)。首先,需要创建一个...

    JAVA导出excel文件2003版,结合具体框架的实现

    - 使用`jxl.write.Workbook.createWorkbook()`方法创建一个可写的Excel工作簿对象。 2. **定义样式**: - 创建字体样式(`WritableFont`)和单元格格式(`WritableCellFormat`),用于设置字体大小、颜色等。 3. **...

    解析excel的方法

    提到解析Excel,JXL是一个经典的Java库,对应压缩包中的"JXL解析Excel.txt"文件。JXL支持读取和写入.xls格式的Excel文件。使用JXL,你可以轻松地访问单元格内容、行列信息,甚至样式和公式。例如,通过`Workbook`、...

    java实现excel导入数据的工具类

    `ExcelUtils`类是这个工具类的核心,包含了一个静态logger实例,用于日志记录,以及两个表示操作状态的常量:`STATUS_OK`(成功)和`STATUS_NO`(失败)。这个类是私有的,不允许外部实例化,而是通过静态方法提供...

    execl导出-execl导出

    - **JXL**: JXL(Java Excel)是一个用于读写Excel文件的Java库。 - **Apache Log4j**: 一个开源的日志记录工具。 - **Spring Framework**: 一个用于构建Java应用程序的基础框架。 - **Apache Struts 2**: 一个基于...

    测试工具

    在典型安装中,此文件夹位于“ C:\ Program Files \ SmartBear \ SoapUI-5.6.0 \ bin \ ext” jxl-2.6.jar-用于处理Excel电子表格的Java库soapuitools.jar-此存储库中定义的实用程序。 包含用于在SoapUI中快速设置...

Global site tag (gtag.js) - Google Analytics