欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java导出Excel通用方法实例

程序员文章站 2023-12-01 12:30:04
数据导出到excel几乎是所有客户都会提出的一个需求。下面我就分享一下我的代码。 首先需要引入的jar包: 然后就是正式代码了。 package lcy....

数据导出到excel几乎是所有客户都会提出的一个需求。下面我就分享一下我的代码。

首先需要引入的jar包:

java导出Excel通用方法实例

然后就是正式代码了。

package lcy._41_50;
 
import java.io.fileoutputstream;
import java.io.outputstream;
import java.net.urlencoder;
 
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;
import org.apache.poi.hssf.util.cellrangeaddress;
import org.apache.poi.hssf.util.hssfcolor;
 
@suppresswarnings( { "deprecation" })
public class test46 {
 
	public static void main(string[] args) throws exception {
 
		string sheetname = "用车统计表单";
		string titlename = "用车申请数据统计表";
		string filename = "用车申请统计表单";
		int columnnumber = 3;
		int[] columnwidth = { 10, 20, 30 };
		string[][] datalist = { { "001", "2015-01-01", "it" },
				{ "002", "2015-01-02", "市场部" }, { "003", "2015-01-03", "测试" } };
		string[] columnname = { "单号", "申请时间", "申请部门" };
		new test46().exportnoresponse(sheetname, titlename, filename,
				columnnumber, columnwidth, columnname, datalist);
	}
 
	public void exportwithresponse(string sheetname, string titlename,
			string filename, int columnnumber, int[] columnwidth,
			string[] columnname, string[][] datalist,
			httpservletresponse response) throws exception {
		if (columnnumber == columnwidth.length&& columnwidth.length == columnname.length) {
			// 第一步,创建一个webbook,对应一个excel文件
			hssfworkbook wb = new hssfworkbook();
			// 第二步,在webbook中添加一个sheet,对应excel文件中的sheet
			hssfsheet sheet = wb.createsheet(sheetname);
			// sheet.setdefaultcolumnwidth(15); //统一设置列宽
			for (int i = 0; i < columnnumber; i++) 
			{
				for (int j = 0; j <= i; j++) 
				{
					if (i == j) 
					{
						sheet.setcolumnwidth(i, columnwidth[j] * 256); // 单独设置每列的宽
					}
				}
			}
			// 创建第0行 也就是标题
			hssfrow row1 = sheet.createrow((int) 0);
			row1.setheightinpoints(50);// 设备标题的高度
			// 第三步创建标题的单元格样式style2以及字体样式headerfont1
			hssfcellstyle style2 = wb.createcellstyle();
			style2.setalignment(hssfcellstyle.align_center);
			style2.setverticalalignment(hssfcellstyle.vertical_center);
			style2.setfillforegroundcolor(hssfcolor.light_turquoise.index);
			style2.setfillpattern(hssfcellstyle.solid_foreground);
			hssffont headerfont1 = (hssffont) wb.createfont(); // 创建字体样式
			headerfont1.setboldweight(hssffont.boldweight_bold); // 字体加粗
			headerfont1.setfontname("黑体"); // 设置字体类型
			headerfont1.setfontheightinpoints((short) 15); // 设置字体大小
			style2.setfont(headerfont1); // 为标题样式设置字体样式
 
			hssfcell cell1 = row1.createcell(0);// 创建标题第一列
			sheet.addmergedregion(new cellrangeaddress(0, 0, 0,
					columnnumber - 1)); // 合并列标题
			cell1.setcellvalue(titlename); // 设置值标题
			cell1.setcellstyle(style2); // 设置标题样式
 
			// 创建第1行 也就是表头
			hssfrow row = sheet.createrow((int) 1);
			row.setheightinpoints(37);// 设置表头高度
 
			// 第四步,创建表头单元格样式 以及表头的字体样式
			hssfcellstyle style = wb.createcellstyle();
			style.setwraptext(true);// 设置自动换行
			style.setalignment(hssfcellstyle.align_center);
			style.setverticalalignment(hssfcellstyle.vertical_center); // 创建一个居中格式
 
			style.setbottombordercolor(hssfcolor.black.index);
			style.setborderbottom(hssfcellstyle.border_thin);
			style.setborderleft(hssfcellstyle.border_thin);
			style.setborderright(hssfcellstyle.border_thin);
			style.setbordertop(hssfcellstyle.border_thin);
 
			hssffont headerfont = (hssffont) wb.createfont(); // 创建字体样式
			headerfont.setboldweight(hssffont.boldweight_bold); // 字体加粗
			headerfont.setfontname("黑体"); // 设置字体类型
			headerfont.setfontheightinpoints((short) 10); // 设置字体大小
			style.setfont(headerfont); // 为标题样式设置字体样式
 
			// 第四.一步,创建表头的列
			for (int i = 0; i < columnnumber; i++) 
			{
				hssfcell cell = row.createcell(i);
				cell.setcellvalue(columnname[i]);
				cell.setcellstyle(style);
			}
 
			// 第五步,创建单元格,并设置值
			for (int i = 0; i < datalist.length; i++) 
			{
				row = sheet.createrow((int) i + 2);
				// 为数据内容设置特点新单元格样式1 自动换行 上下居中
				hssfcellstyle zidonghuanhang = wb.createcellstyle();
				zidonghuanhang.setwraptext(true);// 设置自动换行
				zidonghuanhang.setverticalalignment(hssfcellstyle.vertical_center); // 创建一个居中格式
 
				// 设置边框
				zidonghuanhang.setbottombordercolor(hssfcolor.black.index);
				zidonghuanhang.setborderbottom(hssfcellstyle.border_thin);
				zidonghuanhang.setborderleft(hssfcellstyle.border_thin);
				zidonghuanhang.setborderright(hssfcellstyle.border_thin);
				zidonghuanhang.setbordertop(hssfcellstyle.border_thin);
 
				// 为数据内容设置特点新单元格样式2 自动换行 上下居中左右也居中
				hssfcellstyle zidonghuanhang2 = wb.createcellstyle();
				zidonghuanhang2.setwraptext(true);// 设置自动换行
				zidonghuanhang2
						.setverticalalignment(hssfcellstyle.vertical_center); // 创建一个上下居中格式
				zidonghuanhang2.setalignment(hssfcellstyle.align_center);// 左右居中
 
				// 设置边框
				zidonghuanhang2.setbottombordercolor(hssfcolor.black.index);
				zidonghuanhang2.setborderbottom(hssfcellstyle.border_thin);
				zidonghuanhang2.setborderleft(hssfcellstyle.border_thin);
				zidonghuanhang2.setborderright(hssfcellstyle.border_thin);
				zidonghuanhang2.setbordertop(hssfcellstyle.border_thin);
				hssfcell datacell = null;
				for (int j = 0; j < columnnumber; j++) 
				{
					datacell = row.createcell(j);
					datacell.setcellvalue(datalist[i][j]);
					datacell.setcellstyle(zidonghuanhang2);
				}
			}
 
			// 第六步,将文件存到浏览器设置的下载位置
			string filename = filename + ".xls";
			response.setcontenttype("application/ms-excel;charset=utf-8");
			response.setheader("content-disposition", "attachment;filename="
					.concat(string.valueof(urlencoder.encode(filename, "utf-8"))));
			outputstream out = response.getoutputstream();
			try {
				wb.write(out);// 将数据写出去
				string str = "导出" + filename + "成功!";
				system.out.println(str);
			} catch (exception e) {
				e.printstacktrace();
				string str1 = "导出" + filename + "失败!";
				system.out.println(str1);
			} finally {
				out.close();
			}
 
		} else {
			system.out.println("列数目长度名称三个数组长度要一致");
		}
 
	}
 
	public void exportnoresponse(string sheetname, string titlename,
			string filename, int columnnumber, int[] columnwidth,
			string[] columnname, string[][] datalist) throws exception {
		if (columnnumber == columnwidth.length&& columnwidth.length == columnname.length) {
			// 第一步,创建一个webbook,对应一个excel文件
			hssfworkbook wb = new hssfworkbook();
			// 第二步,在webbook中添加一个sheet,对应excel文件中的sheet
			hssfsheet sheet = wb.createsheet(sheetname);
			// sheet.setdefaultcolumnwidth(15); //统一设置列宽
			for (int i = 0; i < columnnumber; i++) 
			{
				for (int j = 0; j <= i; j++) 
				{
					if (i == j) 
					{
						sheet.setcolumnwidth(i, columnwidth[j] * 256); // 单独设置每列的宽
					}
				}
			}
			// 创建第0行 也就是标题
			hssfrow row1 = sheet.createrow((int) 0);
			row1.setheightinpoints(50);// 设备标题的高度
			// 第三步创建标题的单元格样式style2以及字体样式headerfont1
			hssfcellstyle style2 = wb.createcellstyle();
			style2.setalignment(hssfcellstyle.align_center);
			style2.setverticalalignment(hssfcellstyle.vertical_center);
			style2.setfillforegroundcolor(hssfcolor.light_turquoise.index);
			style2.setfillpattern(hssfcellstyle.solid_foreground);
			hssffont headerfont1 = (hssffont) wb.createfont(); // 创建字体样式
			headerfont1.setboldweight(hssffont.boldweight_bold); // 字体加粗
			headerfont1.setfontname("黑体"); // 设置字体类型
			headerfont1.setfontheightinpoints((short) 15); // 设置字体大小
			style2.setfont(headerfont1); // 为标题样式设置字体样式
 
			hssfcell cell1 = row1.createcell(0);// 创建标题第一列
			sheet.addmergedregion(new cellrangeaddress(0, 0, 0,
					columnnumber - 1)); // 合并第0到第17列
			cell1.setcellvalue(titlename); // 设置值标题
			cell1.setcellstyle(style2); // 设置标题样式
 
			// 创建第1行 也就是表头
			hssfrow row = sheet.createrow((int) 1);
			row.setheightinpoints(37);// 设置表头高度
 
			// 第四步,创建表头单元格样式 以及表头的字体样式
			hssfcellstyle style = wb.createcellstyle();
			style.setwraptext(true);// 设置自动换行
			style.setalignment(hssfcellstyle.align_center);
			style.setverticalalignment(hssfcellstyle.vertical_center); // 创建一个居中格式
 
			style.setbottombordercolor(hssfcolor.black.index);
			style.setborderbottom(hssfcellstyle.border_thin);
			style.setborderleft(hssfcellstyle.border_thin);
			style.setborderright(hssfcellstyle.border_thin);
			style.setbordertop(hssfcellstyle.border_thin);
 
			hssffont headerfont = (hssffont) wb.createfont(); // 创建字体样式
			headerfont.setboldweight(hssffont.boldweight_bold); // 字体加粗
			headerfont.setfontname("黑体"); // 设置字体类型
			headerfont.setfontheightinpoints((short) 10); // 设置字体大小
			style.setfont(headerfont); // 为标题样式设置字体样式
 
			// 第四.一步,创建表头的列
			for (int i = 0; i < columnnumber; i++) 
			{
				hssfcell cell = row.createcell(i);
				cell.setcellvalue(columnname[i]);
				cell.setcellstyle(style);
			}
 
			// 第五步,创建单元格,并设置值
			for (int i = 0; i < datalist.length; i++) 
			{
				row = sheet.createrow((int) i + 2);
				// 为数据内容设置特点新单元格样式1 自动换行 上下居中
				hssfcellstyle zidonghuanhang = wb.createcellstyle();
				zidonghuanhang.setwraptext(true);// 设置自动换行
				zidonghuanhang
						.setverticalalignment(hssfcellstyle.vertical_center); // 创建一个居中格式
 
				// 设置边框
				zidonghuanhang.setbottombordercolor(hssfcolor.black.index);
				zidonghuanhang.setborderbottom(hssfcellstyle.border_thin);
				zidonghuanhang.setborderleft(hssfcellstyle.border_thin);
				zidonghuanhang.setborderright(hssfcellstyle.border_thin);
				zidonghuanhang.setbordertop(hssfcellstyle.border_thin);
 
				// 为数据内容设置特点新单元格样式2 自动换行 上下居中左右也居中
				hssfcellstyle zidonghuanhang2 = wb.createcellstyle();
				zidonghuanhang2.setwraptext(true);// 设置自动换行
				zidonghuanhang2
						.setverticalalignment(hssfcellstyle.vertical_center); // 创建一个上下居中格式
				zidonghuanhang2.setalignment(hssfcellstyle.align_center);// 左右居中
 
				// 设置边框
				zidonghuanhang2.setbottombordercolor(hssfcolor.black.index);
				zidonghuanhang2.setborderbottom(hssfcellstyle.border_thin);
				zidonghuanhang2.setborderleft(hssfcellstyle.border_thin);
				zidonghuanhang2.setborderright(hssfcellstyle.border_thin);
				zidonghuanhang2.setbordertop(hssfcellstyle.border_thin);
				hssfcell datacell = null;
				for (int j = 0; j < columnnumber; j++) 
				{
					datacell = row.createcell(j);
					datacell.setcellvalue(datalist[i][j]);
					datacell.setcellstyle(zidonghuanhang2);
				}
			}
 
			// 第六步,将文件存到指定位置
			try {
				fileoutputstream fout = new fileoutputstream("d:students.xls");
				wb.write(fout);
				string str = "导出" + filename + "成功!";
				system.out.println(str);
				fout.close();
			} catch (exception e) {
				e.printstacktrace();
				string str1 = "导出" + filename + "失败!";
				system.out.println(str1);
			}
		} else {
			system.out.println("列数目长度名称三个数组长度要一致");
		}
 
	}
 
}

为了本地测试效果,单独写了一个无response参数的exportnoresponse方法,直接将文件保存到指定目录d盘。

两个方法的不同就在于第六步中,有response参数的方法可以将文件存到浏览器设置的下载位置。

下面是导出效果截图:

java导出Excel通用方法实例

以上所述是小编给大家介绍的java导出excel方法详解整合,希望对大家有所帮助