Excel导出

              Excel导出是比较常见的场景,以前都是直接用用公司的工具类,这次自己封装了一个。导出的文件的格式是xlsx的,
需要office2007才能打开。小编的上一篇解决下载中文名文件乱码的问题就是来自这个工具类。下面直接上代码

一、代码

        (1)maven依赖
	<!-- poi的jar包  -->
	<dependency> 
		<groupId>org.apache.poi</groupId>
		<artifactId>poi</artifactId>
		<version>3.15</version>
	</dependency>
	<dependency>
		<groupId>org.apache.poi</groupId>
		<artifactId>poi-ooxml</artifactId>
		<version>3.15</version>
	</dependency>
11
 
1
    <!-- poi的jar包  -->
2
    <dependency> 
3
        <groupId>org.apache.poi</groupId>
4
        <artifactId>poi</artifactId>
5
        <version>3.15</version>
6
    </dependency>
7
    <dependency>
8
        <groupId>org.apache.poi</groupId>
9
        <artifactId>poi-ooxml</artifactId>
10
        <version>3.15</version>
11
    </dependency>
        (2)工具类代码
package com.tax.core.util;
import java.util.ArrayList;
import java.util.List;
import javax.servlet.http.HttpServletResponse;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.util.CellRangeAddress;
import org.apache.poi.xssf.usermodel.XSSFCell;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFRow;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * Excel工具类
 * @author   ZENG.XIAO.YAN
 * @date 	 2017年7月27日 下午3:02:22
 * @version  v1.0
 */
public class ExcelUtils {
	
	/**
	 * 导出数据到Excel
	 * @param fileName	     		文件名,不包含后缀
	 * @param sheetName   			sheet名
	 * @param title		     		标题 
	 * @param cellTitles  			每一列的标题	
	 * @param autoSizeColumnNum    	需要自动调整列宽的列的编号(从0开始)的数组,该参数可以为null
	 * @param data		   			数据: 一行数据封装成一个ArrayList,最后将所有ArrayList封装到一个List
	 * @param response	  			HttpServletResponse对象
	 * @throws Exception 
	 */
	public static void exportExcel(String fileName, String sheetName, String title, String[] cellTitles,
			int[] autoSizeColumnNum, List<ArrayList<Object>> data, HttpServletResponse response) throws Exception {
		
		/** 创建空的工作簿 */
		XSSFWorkbook workbook = new XSSFWorkbook();
		/** 创建工作表 */
		XSSFSheet sheet = workbook.createSheet(sheetName);
		
		/** 第一行标题处理  */
		// 合并单元格
		sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, cellTitles.length-1)); 
		XSSFRow row01 = sheet.createRow(0);
		XSSFCell cell01 = row01.createCell(0);
		// 设置单元格内容
		cell01.setCellValue(title);
		// 创建单元格样式
		XSSFCellStyle cellStyle01 = createCellStyle(workbook,"Courier New",(short)18,true);
		// 设置单元格样式
		cell01.setCellStyle(cellStyle01);
		
		/** 第二行列标题的处理  */
		// 创建单元格样式
		XSSFCellStyle cellStyle02 = createCellStyle(workbook,"Courier New",(short)13,true);
		XSSFRow row02 = sheet.createRow(1);
		// for循环创建单元格并赋值和设置样式
		for (int i = 0; i < cellTitles.length; i++) {
			XSSFCell titleCell = row02.createCell(i);
			titleCell.setCellValue(cellTitles[i]);
			titleCell.setCellStyle(cellStyle02);
		}
		
		/** 中间行的处理  */
		// 创建单元格样式
		XSSFCellStyle cellStyle03 = createCellStyle(workbook,null,(short)12,false);
		// for循环处理
		for (int i = 0; i < data.size(); i++) {
			XSSFRow row = sheet.createRow(i + 2);
			for(int j = 0; j < data.get(i).size(); j++) {
				XSSFCell cell = row.createCell(j);
				Object value = data.get(i).get(j);
				cell.setCellValue(value == null ? "" : value.toString());
				cell.setCellStyle(cellStyle03);
			}
		}
		
		/** 设置自动调整列宽  */
		// 某些情况下,有的列内容太长需要自动调整列宽
		for (int i = 0; i < autoSizeColumnNum.length; i++) {
			sheet.autoSizeColumn(autoSizeColumnNum[i]);
		}
		/** 下载时文件名为中文:乱码解决 */
		// 响应的过程:
		// 服务器: utf-8|gbk --> iso8859-1    浏览器: iso8859-1 --> utf-8|gbk (firefox、chrome)
		// 服务器: gbk --> iso8859-1    浏览器: iso8859-1 --> gbk (msie)
		fileName = new String(fileName.getBytes("gbk"), "iso8859-1");
		/** 设置下载的文件名 */
		response.setHeader("content-disposition", "attachment;filename=" + fileName + ".xlsx");
        /** 向浏览器输出Excel文件 */
		workbook.write(response.getOutputStream());
		/** 关闭工作簿 */
		workbook.close();
	}

	
	/**
	 * 创建单元格样式方法
	 * @param workbook  工作簿
	 * @param fontName  字体名字
	 * @param fontSize	字体大小
	 * @param isBlod    是否加粗
	 * @return  单元格样式XSSFCellStyle
	 */
	private static XSSFCellStyle createCellStyle(XSSFWorkbook workbook, String fontName, short fontSize,
			boolean isBlod) {
		// 通过工作簿创建样式
		XSSFCellStyle cellStyle = workbook.createCellStyle();
		// 设置水平和垂直居中
		cellStyle.setAlignment(HorizontalAlignment.CENTER);
		cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
		// 通过工作簿创建字体
		XSSFFont font = workbook.createFont();
		// 设置字体
		if (null != fontName && !"".equals(fontName)) {
			font.setFontName(fontName);
		}
		// 设置字体大小
		font.setFontHeightInPoints(fontSize);
		// 设置字体是否加粗
		font.setBold(isBlod);
		// 把字体set到样式中
		cellStyle.setFont(font);

		return cellStyle;
	}
}
x
 
1
package com.tax.core.util;
2
import java.util.ArrayList;
3
import java.util.List;
4
import javax.servlet.http.HttpServletResponse;
5
import org.apache.poi.ss.usermodel.HorizontalAlignment;
6
import org.apache.poi.ss.usermodel.VerticalAlignment;
7
import org.apache.poi.ss.util.CellRangeAddress;
8
import org.apache.poi.xssf.usermodel.XSSFCell;
9
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
10
import org.apache.poi.xssf.usermodel.XSSFFont;
11
import org.apache.poi.xssf.usermodel.XSSFRow;
12
import org.apache.poi.xssf.usermodel.XSSFSheet;
13
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
14
 
          
15
/**
16
 * Excel工具类
17
 * @author   ZENG.XIAO.YAN
18
 * @date     2017年7月27日 下午3:02:22
19
 * @version  v1.0
20
 */
21
public class ExcelUtils {
22
    
23
    /**
24
     * 导出数据到Excel
25
     * @param fileName              文件名,不包含后缀
26
     * @param sheetName             sheet名
27
     * @param title                 标题 
28
     * @param cellTitles            每一列的标题  
29
     * @param autoSizeColumnNum     需要自动调整列宽的列的编号(从0开始)的数组,该参数可以为null
30
     * @param data                  数据: 一行数据封装成一个ArrayList,最后将所有ArrayList封装到一个List
31
     * @param response              HttpServletResponse对象
32
     * @throws Exception 
33
     */
34
    public static void exportExcel(String fileName, String sheetName, String title, String[] cellTitles,
35
            int[] autoSizeColumnNum, List<ArrayList<Object>> data, HttpServletResponse response) throws Exception {
36
        
37
        /** 创建空的工作簿 */
38
        XSSFWorkbook workbook = new XSSFWorkbook();
39
        /** 创建工作表 */
40
        XSSFSheet sheet = workbook.createSheet(sheetName);
41
        
42
        /** 第一行标题处理  */
43
        // 合并单元格
44
        sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, cellTitles.length-1)); 
45
        XSSFRow row01 = sheet.createRow(0);
46
        XSSFCell cell01 = row01.createCell(0);
47
        // 设置单元格内容
48
        cell01.setCellValue(title);
49
        // 创建单元格样式
50
        XSSFCellStyle cellStyle01 = createCellStyle(workbook,"Courier New",(short)18,true);
51
        // 设置单元格样式
52
        cell01.setCellStyle(cellStyle01);
53
        
54
        /** 第二行列标题的处理  */
55
        // 创建单元格样式
56
        XSSFCellStyle cellStyle02 = createCellStyle(workbook,"Courier New",(short)13,true);
57
        XSSFRow row02 = sheet.createRow(1);
58
        // for循环创建单元格并赋值和设置样式
59
        for (int i = 0; i < cellTitles.length; i++) {
60
            XSSFCell titleCell = row02.createCell(i);
61
            titleCell.setCellValue(cellTitles[i]);
62
            titleCell.setCellStyle(cellStyle02);
63
        }
64
        
65
        /** 中间行的处理  */
66
        // 创建单元格样式
67
        XSSFCellStyle cellStyle03 = createCellStyle(workbook,null,(short)12,false);
68
        // for循环处理
69
        for (int i = 0; i < data.size(); i++) {
70
            XSSFRow row = sheet.createRow(i + 2);
71
            for(int j = 0; j < data.get(i).size(); j++) {
72
                XSSFCell cell = row.createCell(j);
73
                Object value = data.get(i).get(j);
74
                cell.setCellValue(value == null ? "" : value.toString());
75
                cell.setCellStyle(cellStyle03);
76
            }
77
        }
78
        
79
        /** 设置自动调整列宽  */
80
        // 某些情况下,有的列内容太长需要自动调整列宽
81
        for (int i = 0; i < autoSizeColumnNum.length; i++) {
82
            sheet.autoSizeColumn(autoSizeColumnNum[i]);
83
        }
84
        /** 下载时文件名为中文:乱码解决 */
85
        // 响应的过程:
86
        // 服务器: utf-8|gbk --> iso8859-1    浏览器: iso8859-1 --> utf-8|gbk (firefox、chrome)
87
        // 服务器: gbk --> iso8859-1    浏览器: iso8859-1 --> gbk (msie)
88
        fileName = new String(fileName.getBytes("gbk"), "iso8859-1");
89
        /** 设置下载的文件名 */
90
        response.setHeader("content-disposition", "attachment;filename=" + fileName + ".xlsx");
91
        /** 向浏览器输出Excel文件 */
92
        workbook.write(response.getOutputStream());
93
        /** 关闭工作簿 */
94
        workbook.close();
95
    }
96
 
          
97
    
98
    /**
99
     * 创建单元格样式方法
100
     * @param workbook  工作簿
101
     * @param fontName  字体名字
102
     * @param fontSize  字体大小
103
     * @param isBlod    是否加粗
104
     * @return  单元格样式XSSFCellStyle
105
     */
106
    private static XSSFCellStyle createCellStyle(XSSFWorkbook workbook, String fontName, short fontSize,
107
            boolean isBlod) {
108
        // 通过工作簿创建样式
109
        XSSFCellStyle cellStyle = workbook.createCellStyle();
110
        // 设置水平和垂直居中
111
        cellStyle.setAlignment(HorizontalAlignment.CENTER);
112
        cellStyle.setVerticalAlignment(VerticalAlignment.CENTER);
113
        // 通过工作簿创建字体
114
        XSSFFont font = workbook.createFont();
115
        // 设置字体
116
        if (null != fontName && !"".equals(fontName)) {
117
            font.setFontName(fontName);
118
        }
119
        // 设置字体大小
120
        font.setFontHeightInPoints(fontSize);
121
        // 设置字体是否加粗
122
        font.setBold(isBlod);
123
        // 把字体set到样式中
124
        cellStyle.setFont(font);
125
 
          
126
        return cellStyle;
127
    }
128
}

二、工具类在struts2中使用示例

1222688-20180711200416843-2143915129.png

 结果:
          1222688-20180711200417270-680564211.png
 

转载于:https://www.cnblogs.com/zeng1994/p/7397627.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Excel导出Java是指将Java对象中的数据导出Excel表格中。通常情况下,我们需要使用第三方库来实现这个功能,比如Apache POI和EasyExcel等。在Java对象中,我们需要使用注解来标记需要导出的字段,以及字段的顺序、名称、映射关系等信息。在导出时,我们需要将Java对象转换为Excel表格,并设置表头、样式等属性。最后,我们将生成的Excel表格保存到本地或者输出到浏览器中供用户下载。Excel导出Java是指将Java对象中的数据导出Excel表格中。通常情况下,我们需要使用第三方库来实现这个功能,比如Apache POI和EasyExcel等。在Java对象中,我们需要使用注解来标记需要导出的字段,以及字段的顺序、名称、映射关系等信息。在导出时,我们需要将Java对象转换为Excel表格,并设置表头、样式等属性。最后,我们将生成的Excel表格保存到本地或者输出到浏览器中供用户下载。 在上面的引用中,我们可以看到一个Excel导出的注解@ExcelExport,它包含了字段名称、导出排序、导出映射、导出模板示例值等属性。我们还可以看到一个Excel导入的注解@ExcelImport,它用于标记Java实体对象中需要导入的字段,并指定对应的表头名称。 在实际开发中,我们通常会在Controller层中编写导出Excel的代码。我们可以使用第三方库来生成Excel表格,并将其输出到浏览器中供用户下载。同时,我们还可以编写导入Excel的代码,将Excel表格中的数据读取到Java对象中进行处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值