`
zhangchunxiao
  • 浏览: 16755 次
社区版块
存档分类
最新评论

导出excel的两种方式(二)

    博客分类:
  • Java
 
阅读更多

1.调用类如下:

@RequestMapping("/exportExcel4ServiceFee")
    public void exportExcel4ServiceFee(LoanSplitModel loanSplitModel,HttpServletRequest request, HttpServletResponse response) {
		try {
			PageView<LoanSplitModel> pageView = collectionService.downPageView4RemindersServiceFee(loanSplitModel);
			String[] titles = new String[]{"序号","合同编号","客户姓名","合同金额"};
			SXXExcel excel = new SXXExcel(titles);
			StringBuffer sb = null;
			int count = 1;
			for (LoanSplitModel item : pageView.getRecords()) {
				sb = new StringBuffer();
				sb = sb.append(count++).append(",")//序号
	                   .append(item.getContractCode() != null ? item.getContractCode() : "").append(",")//合同编号
	                   .append(item.getCustomerName() != null ? item.getCustomerName() : "").append(",")//客户姓名
	                   .append(item.getContractMoney() != null ? df.format(item.getContractMoney()) : "").append(",");//合同金额
				excel.addSXSSFRow(sb.toString().split(","));
			}
			excel.outSXSSFFile(response, "催收服务费统计表.xlsx");
		} catch (Exception e) {
			e.printStackTrace();
            logger.error("-----------催收服务费统计列表导出excel异常", e);
		}
    }

 SXXExcel类如下:

import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileOutputStream;
import java.math.BigDecimal;
import java.text.NumberFormat;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.regex.Pattern;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;

import org.apache.commons.io.IOUtils;
import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
import org.apache.poi.ss.usermodel.CellStyle;
import org.apache.poi.ss.usermodel.Font;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.streaming.SXSSFCell;
import org.apache.poi.xssf.streaming.SXSSFRow;
import org.apache.poi.xssf.streaming.SXSSFSheet;
import org.apache.poi.xssf.streaming.SXSSFWorkbook;

public class SXXExcel {
	
	private static SXSSFWorkbook workbook;
	private static CellStyle titleStyle; // 标题行样式
	private static Font titleFont; // 标题行字体
	private static CellStyle dateStyle; // 日期行样式
	private static Font dateFont; // 日期行字体
	private static CellStyle headStyle; // 表头行样式
	private static Font headFont; // 表头行字体
	private static CellStyle contentStyle; // 内容行样式
	private static Font contentFont; // 内容行字体
	private static CellStyle doubleContextStyle;
	
	/**
	 * @Description: 初始化
	 */
	private static void init() {
		workbook = new SXSSFWorkbook(1000);
		titleFont = workbook.createFont();
		titleStyle = workbook.createCellStyle();
		dateStyle = workbook.createCellStyle();
		dateFont = workbook.createFont();
		headStyle = workbook.createCellStyle();
		headFont = workbook.createFont();
		contentStyle = workbook.createCellStyle();
		contentFont = workbook.createFont();
		doubleContextStyle= workbook.createCellStyle();
		initTitleCellStyle();
		initTitleFont();
		initDateCellStyle();
		initDateFont();
		initHeadCellStyle();
		initHeadFont();
		initContentCellStyle();
		initContentFont();
		initDoubleContextStyle();
	}
	
	/**
	 * @Description: 初始化标题行样式
	 */
	private static void initTitleCellStyle() {
		titleStyle.setAlignment(CellStyle.ALIGN_CENTER);
		titleStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
		titleStyle.setFont(titleFont);
		titleStyle.setFillBackgroundColor(IndexedColors.YELLOW.getIndex());

	}

	/**
	 * @Description: 初始化日期行样式
	 */
	private static void initDateCellStyle() {
		dateStyle.setAlignment(CellStyle.ALIGN_CENTER_SELECTION);
		dateStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
		dateStyle.setFont(dateFont);
		dateStyle.setFillBackgroundColor(IndexedColors.SKY_BLUE.getIndex());
	}

	/**
	 * @Description: 初始化表头行样式
	 */
	private static void initHeadCellStyle() {

		headStyle.setAlignment(CellStyle.ALIGN_CENTER);
		headStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
		headStyle.setFont(headFont);
		headStyle.setFillBackgroundColor(IndexedColors.YELLOW.getIndex());
		headStyle.setBorderTop(CellStyle.BORDER_MEDIUM);
		headStyle.setBorderBottom(CellStyle.BORDER_THIN);
		headStyle.setBorderLeft(CellStyle.BORDER_THIN);
		headStyle.setBorderRight(CellStyle.BORDER_THIN);
		headStyle.setTopBorderColor(IndexedColors.BLUE.getIndex());
		headStyle.setBottomBorderColor(IndexedColors.BLUE.getIndex());
		headStyle.setLeftBorderColor(IndexedColors.BLUE.getIndex());
		headStyle.setRightBorderColor(IndexedColors.BLUE.getIndex());
	}

	/**
	 * @Description: 初始化内容行样式
	 */
	private static void initContentCellStyle() {
		contentStyle.setAlignment(CellStyle.ALIGN_CENTER);
		contentStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
		contentStyle.setFont(contentFont);
		contentStyle.setBorderTop(CellStyle.BORDER_THIN);
		contentStyle.setBorderBottom(CellStyle.BORDER_THIN);
		contentStyle.setBorderLeft(CellStyle.BORDER_THIN);
		contentStyle.setBorderRight(CellStyle.BORDER_THIN);
		contentStyle.setTopBorderColor(IndexedColors.BLUE.getIndex());
		contentStyle.setBottomBorderColor(IndexedColors.BLUE.getIndex());
		contentStyle.setLeftBorderColor(IndexedColors.BLUE.getIndex());
		contentStyle.setRightBorderColor(IndexedColors.BLUE.getIndex());
		contentStyle.setWrapText(true); // 字段换行
	}
	
	private static void initDoubleContextStyle(){
		doubleContextStyle.setAlignment(CellStyle.ALIGN_CENTER);
		doubleContextStyle.setVerticalAlignment(CellStyle.VERTICAL_CENTER);
		doubleContextStyle.setFont(contentFont);
		doubleContextStyle.setBorderTop(CellStyle.BORDER_THIN);
		doubleContextStyle.setBorderBottom(CellStyle.BORDER_THIN);
		doubleContextStyle.setBorderLeft(CellStyle.BORDER_THIN);
		doubleContextStyle.setBorderRight(CellStyle.BORDER_THIN);
		doubleContextStyle.setTopBorderColor(IndexedColors.BLUE.getIndex());
		doubleContextStyle.setBottomBorderColor(IndexedColors.BLUE.getIndex());
		doubleContextStyle.setLeftBorderColor(IndexedColors.BLUE.getIndex());
		doubleContextStyle.setRightBorderColor(IndexedColors.BLUE.getIndex());
		doubleContextStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("0.00"));
		doubleContextStyle.setWrapText(true); // 字段换行
	}

	/**
	 * @Description: 初始化标题行字体
	 */
	private static void initTitleFont() {
		titleFont.setFontName("华文楷体");
		titleFont.setFontHeightInPoints((short) 20);
		titleFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
		titleFont.setCharSet(Font.DEFAULT_CHARSET);
		titleFont.setColor(IndexedColors.BLUE_GREY.getIndex());
	}

	/**
	 * @Description: 初始化日期行字体
	 */
	private static void initDateFont() {
		dateFont.setFontName("隶书");
		dateFont.setFontHeightInPoints((short) 10);
		dateFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
		dateFont.setCharSet(Font.DEFAULT_CHARSET);
		dateFont.setColor(IndexedColors.BLUE_GREY.getIndex());
	}

	/**
	 * @Description: 初始化表头行字体
	 */
	private static void initHeadFont() {
		headFont.setFontName("宋体");
		headFont.setFontHeightInPoints((short) 10);
		headFont.setBoldweight(Font.BOLDWEIGHT_BOLD);
		headFont.setCharSet(Font.DEFAULT_CHARSET);
		headFont.setColor(IndexedColors.BLUE_GREY.getIndex());
	}

	/**
	 * @Description: 初始化内容行字体
	 */
	private static void initContentFont() {
		contentFont.setFontName("宋体");
		contentFont.setFontHeightInPoints((short) 10);
		contentFont.setBoldweight(Font.BOLDWEIGHT_NORMAL);
		contentFont.setCharSet(Font.DEFAULT_CHARSET);
		contentFont.setColor(IndexedColors.BLUE_GREY.getIndex());
	}
		
	public SXXExcel(String title, String[] headers){
		init();
		SXSSFSheet sheet = workbook.createSheet();
		SXSSFRow fristRow=sheet.createRow(0);
		SXSSFCell titleCell =fristRow.createCell(0);
		titleCell.setCellStyle(titleStyle);
		titleCell.setCellValue(title);
		sheet.addMergedRegion(new CellRangeAddress(0,0,0,headers.length-1));
		SXSSFRow dateRow=sheet.createRow(1);
		SXSSFCell dateCell = dateRow.createCell(0);
		dateCell.setCellStyle(dateStyle);
		dateCell.setCellValue(new SimpleDateFormat("yyyy-MM-dd")
		.format(new Date()));
		sheet.addMergedRegion(new CellRangeAddress(1,1,0,headers.length-1));
		
		SXSSFRow headerRow=sheet.createRow(2);
		for(int i=0;i<headers.length;i++){
			SXSSFCell cell = headerRow.createCell(i);
			cell.setCellStyle(headStyle);
			cell.setCellType(HSSFCell.CELL_TYPE_STRING);
			cell.setCellValue(headers[i]);
		}
	}
	
	public SXXExcel(String[] headers){
		init();
		SXSSFSheet sheet = workbook.createSheet();
		SXSSFRow headerRow=sheet.createRow(0);
		for(int i=0;i<headers.length;i++)
		{
			SXSSFCell cell = headerRow.createCell(i);
			cell.setCellStyle(headStyle);
			cell.setCellType(HSSFCell.CELL_TYPE_STRING);
			cell.setCellValue(headers[i]);
		}
	}
	
	/**
	 * 往EXCEL追加数据
	 * @param filePath
	 * @param rows
	 */
	public void addSXSSFRow(List<Object[]> rows){
		SXSSFSheet sheet = workbook.getSheetAt(0);
		for(Object[] cells : rows)
		{
			SXSSFRow excelRow=sheet.createRow(sheet.getLastRowNum()+1);
			for(int i=0;i<cells.length;i++)
			{
				if(cells[i] instanceof Number)
				{
					SXSSFCell cell = excelRow.createCell(i);
					cell.setCellStyle(contentStyle);
					cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
					cell.setCellValue(((Number)cells[i]).doubleValue());
				}
				else
				{
					SXSSFCell cell = excelRow.createCell(i);
					cell.setCellStyle(contentStyle);
					cell.setCellType(HSSFCell.CELL_TYPE_STRING);
					cell.setCellValue(this.toString(cells[i]));
				}
			}
		}
	}
	
	/**
	 * 往EXCEL追加数据
	 * @param filePath
	 * @param rows
	 */
	public void addSXSSFRow(Object[] cells){
		SXSSFSheet sheet = workbook.getSheetAt(0);
		SXSSFRow excelRow=sheet.createRow(sheet.getLastRowNum()+1);
		Pattern p2=Pattern.compile("^(([1-9]\\d{0,9})|0)(\\.\\d{2})+$");
		
		for(int i=0;i<cells.length;i++)
		{
			sheet.setColumnWidth(i, 5900);
			if(cells[i] instanceof BigDecimal)
			{
				SXSSFCell cell = excelRow.createCell(i);
				cell.setCellStyle(contentStyle);
				cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
				cell.setCellValue(((BigDecimal)cells[i]).setScale(2,BigDecimal.ROUND_HALF_UP).doubleValue());
			}
			else
			{
				if(null !=cells[i] && !"".equals(cells[i].toString())){
					boolean flag2 = p2.matcher(cells[i].toString()).matches();
					if (flag2) {
						SXSSFCell cell = excelRow.createCell(i);
						cell.setCellStyle(contentStyle);
						cell.setCellType(HSSFCell.CELL_TYPE_NUMERIC);
						cell.setCellValue(Double.parseDouble(cells[i].toString()));
					}else {
						SXSSFCell cell = excelRow.createCell(i);
						cell.setCellStyle(contentStyle);
						cell.setCellType(HSSFCell.CELL_TYPE_STRING);
						cell.setCellValue(this.toString(cells[i]));
					}
				}else {
					SXSSFCell cell = excelRow.createCell(i);
					cell.setCellStyle(contentStyle);
					cell.setCellType(HSSFCell.CELL_TYPE_STRING);
					cell.setCellValue(this.toString(cells[i]));
				}
			}
		}
	}
	
	public void outSXSSFFile(String filePath){
		FileOutputStream outFile = null;
		java.io.BufferedOutputStream outStream = null;
		try {
			File file = new File(filePath);
			file.deleteOnExit();
			file.createNewFile();
			outFile = new FileOutputStream(filePath);
			outStream = new BufferedOutputStream(outFile);
			workbook.write(outStream);
			outStream.flush();
			workbook.dispose();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			IOUtils.closeQuietly(outFile);
			IOUtils.closeQuietly(outStream);
		}
	}
	
	public void outSXSSFFile(HttpServletResponse response, String filename){
		ServletOutputStream outStream = null;
		try {
			filename = new String(filename.getBytes("utf-8"),"iso-8859-1");
			response.setCharacterEncoding("utf-8");
			response.setContentType("multipart/form-data");
			response.setHeader("Content-Disposition", "attachment;fileName="+ filename);
			outStream = response.getOutputStream();
			workbook.write(outStream);
			outStream.flush();
			workbook.dispose();
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			IOUtils.closeQuietly(outStream);
		}
	}
	
	private  String toString(Object val){
		if(val==null)
			return "";
		if(val instanceof String)
			return (String)val;
		else if(val instanceof Integer)
			return String.valueOf(val);
		else if(val instanceof Long)
			return String.valueOf(val);
		else if(val instanceof java.math.BigDecimal){
			NumberFormat format=NumberFormat.getNumberInstance() ;
			format.setMaximumFractionDigits(2);
			format.setGroupingUsed(false);
			return format.format(val) ; 
		}else if(val instanceof java.util.Date){
			SimpleDateFormat format = new SimpleDateFormat("yyyy/MM/dd");
			return format.format(val) ; 
		}else{
			return val.toString();
		}
	}
}

 

分享到:
评论

相关推荐

    unifastreport导出Excel二种方式.rar

    本压缩包文件“unifastreport导出Excel二种方式.rar”主要包含了两种方法将UnifastReport报表导出为Excel格式的详细说明。以下是对这两种方法的详细解释: 1. 使用UnifastReport内置的导出功能: UnifastReport...

    Excel导出两种方式

    **二、使用Map导出Excel** Map是另一种常用的数据结构,它允许以键值对的形式存储数据。使用Map导出Excel的基本流程如下: 1. **创建Map列表**:创建一个List, Object&gt;&gt;,其中Map的键对应列标题,值对应单元格内容...

    unifastreport导出Excel二种方式

    导出过程与导出Excel类似,只需将导出类型设置为frxExportPdf即可。 在Unigui环境中,FastReport的集成非常顺畅,Unigui提供了丰富的控件和事件来支持FastReport的操作,如在按钮点击事件中触发报表的生成和导出。...

    C# 导出excel表格(xls、xlsx两种格式)

    总之,C#提供了多种方式来导出Excel表格,可以根据项目需求和环境选择合适的方法。通过上述代码,你可以根据自己的数据结构创建自定义的Excel文件,不论是xls还是xlsx格式。在实际应用中,还可以进一步完善功能,如...

    POI导出Excel文件

    这个实例提供了两种方法来导出Excel文件:通过Servlet和通过main方法。这两种方法都是在Java环境中操作Excel数据的有效方式。 首先,让我们详细了解一下Apache POI库。POI提供了一个API,允许开发者在Java应用程序...

    VUE导出Excel,两种方法,方法二带样式:文字居中,自动换行,列宽设置,单元格合并,冻结表头等

    在标题提到的两种方法中,我们将重点讨论如何利用SheetJS和xlsx-style库来实现更复杂的Excel导出功能,如文字居中、自动换行、列宽设置、单元格合并以及冻结表头。 SheetJS是一个强大的JavaScript库,它允许开发者...

    asp导出Access数据到Excel两种方法实例

    这两种方法各有优缺点:服务器端方法需要服务器有Excel安装,但能直接生成Excel文件;客户端方法无需服务器端支持Excel,但用户必须手动用Excel打开CSV文件。选择哪种方法取决于具体的应用场景和资源限制。

    C#导出Excel 导出PDF

    这两种格式在数据共享、报告生成和打印等方面非常常见。 首先,我们来看C#导出Excel的实现。Excel文件通常以`.xlsx`或`.xls`格式存储,C#可以借助Microsoft Office Interop库直接操作Excel对象,但这要求目标机器上...

    POI和JXL两种方式导出EXCEL

    这两种库都是Java中广泛使用的处理Microsoft Office文件格式的库,特别是Excel。 首先,Apache POI是一个开源项目,它提供了读取和写入Microsoft Office格式文件的能力,包括Excel。POI库的强大之处在于它可以处理...

    Export2Excel.js导出excel

    在导出Excel的场景中,Blob对象用于创建Excel文件的二进制数据流。Blob.js提供了方便的方法来创建、合并和操作Blob,使得开发者能够更灵活地处理这些数据。 "Export2Excel.js"是核心的导出工具,它封装了生成Excel...

    ALV导出excel时窜行

    双引号在ALV中显示时往往不会出现问题,但当数据被导出到Excel后,由于Excel自身的解析方式,可能将双引号内的内容视作一个整体的字段,从而导致数据窜行。在某些情况下,双引号还可能引起合并单元格的问题,导致本...

    GridView导出Excel DataTable导出Excel 实例源码

    二、DataTable导出Excel 1. DataTable概述:DataTable是.NET Framework中的一个类,它代表内存中的数据表,可以用于存储和操作数据,不依赖任何数据库。 2. 导出步骤: - 创建DataTable:根据需要,创建一个...

    easyPoi模板导出Excel报表(xls 和xlsx 都支持)

    在导出Excel报表时,我们通常会使用模板方式,这样可以预先设定好报表的样式和布局,然后根据实际数据填充。 1. **模板设计**:首先,我们需要设计一个Excel模板,模板中包含了报表的结构、样式和占位符。这些占位...

    easyui datagrid 数据导出到Excel

    **方法二:使用jQuery插件(如Jquery_easyui_datagrid_js导出excel.doc所示)** 文件`Jquery_easyui_datagrid_js导出excel.doc`可能是文档说明或者包含插件使用的示例代码。通常,jQuery插件能简化Datagrid数据导出...

    servlet导入导出excel

    Excel文件有两种主要格式:XLS(Excel 97-2003工作簿)和XLSX(Excel 2007及以后版本的工作簿)。对于XLS格式,Apache POI库中的HSSFWorkBook类是处理此类文件的关键。 首先,让我们深入了解如何导入Excel数据到...

    普通方式和Ext方式导出Excel代码

    本篇将详细讲解两种常见的导出Excel的方法:普通方式和Ext方式。 首先,让我们从普通方式导出Excel开始。普通方式通常指的是使用服务器端编程语言(如Java、Python、C#等)生成Excel文件,然后将其作为HTTP响应返回...

    excel导出支持前台和后台导出

    总结,Excel导出支持前台和后台两种方式,每种都有其适用场景。前台导出适合小数据量和对实时性要求高的情况,而后台导出则适合大数据量和需要保证格式一致性的场景。结合Struts2框架,我们可以轻松地在后台实现高效...

    纯前端:luckysheet在线编辑Excel导出,Excel文件导入

    项目内容主要包括两个核心功能:在线编辑Excel和Excel文件导入导出。在线编辑部分,Luckysheet提供了丰富的API和配置选项,可以定制化地创建各种复杂的表格结构,包括单元格样式、行列操作、公式计算等。此外,它的...

    导出Excel方法大全

    本篇文章将详细介绍两种在ASP.NET中导出Excel的方法,主要关注如何从GridView控件导出数据。 1. 存储在服务器并提供下载链接 这种方法首先将导出的Excel文件存储在服务器的特定文件夹下,然后通过HTTP响应将文件...

    组态王历史数据导出EXCEL表格的方法.docx

    组态王历史数据导出EXCEL表格的方法 组态王是一种工业自动化软件,具有强大的数据采集和处理能力。为了更好地对历史数据进行分析和处理,需要将其导出到EXCEL表格中。本文将介绍组态王历史数据导出EXCEL表格的方法...

Global site tag (gtag.js) - Google Analytics