简单的 Java 导出 Excel 表格 小例子《一抹茶CSDN》

Java 导出 Excel

  1. 为什么要有导出Excel表格的功能呢?
    因为我们在使用软件时会有,一些数据需要导出来,进行留存,大多数人使用的都是office的办公软件,就会使用常用的Excel表格。因此为了方便,所以就有了这个功能。

  2. 工作准备
    首先我们需要一个导入,一个架包,
    poi.jar最新版
    这个poi是4.0.1版本的只支持jdk8和以上版版本运行,
    如果你使用的jdk8以下版本,就需要下载poi4.0以下版,如poi3.6.jar
    在这里插入图片描述
    api文档:http://poi.apache.org/apidocs/index.html
    .
    将根目录下的poi-4.0.jar和Lib目录下三个通用包 commons-logging-1.2.jar junit-4.1.2.jar log4j-1.2.17.jar拷贝到项目的Lib下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    如果是用maven的可自行到maven中央仓库搜索poi然后选择对应的版本即可,也可以直接将下面代码复制到pom.xml。

    <!-- https://mvnrepository.com/artifact/org.apache.poi/poi -->
    <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>4.0.1</version>
    </dependency>
    

3.常用api

	常用:
	
	HSSFWorkbook                      excel的文档对象
	
	HSSFSheet                         excel的表单
	
	HSSFRow                           excel的行
	
	HSSFCell                          excel的格子单元
	
	HSSFFont                          excel字体
	
	HSSFDataFormat                    日期格式
	
	HSSFHeader                        sheet头
	
	HSSFFooter                        sheet尾(只有打印的时候才能看到效果)
	
	辅助操作包括:
	
	HSSFDateUtil                        日期
	
	HSSFPrintSetup                      打印
	
	HSSFErrorConstants                  错误信息表
	
	样式:

	HSSFCellStyle                       cell样式
  1. 使用jar理解步骤
    3.1、HSSFWorkbook打开或者创建“Excel文件对象
    3.2、HSSFWorkbook对象返回Sheet对象”
    3.3、Sheet对象返回对象、用行对象得到Cell对象
    3.4、使用Cell对象读写

    来看一个效果:

    	package com.zsx.excl;
    
    	import java.io.FileOutputStream;
    	import java.io.IOException;
    
    	import org.apache.poi.hssf.usermodel.HSSFCell;
    	import org.apache.poi.hssf.usermodel.HSSFRow;
    	import org.apache.poi.hssf.usermodel.HSSFSheet;
    	import org.apache.poi.hssf.usermodel.HSSFWorkbook;
    
    	public class ToExcl {
    
    	public static void main(String[] args) {
    	
    	HSSFWorkbook wb = new HSSFWorkbook();// 创建HSSFWorkbook对象
    	
    	HSSFSheet sheet = wb.createSheet("sheet1");// 创建HSSFSheet对象
    	
    	HSSFRow row = sheet.createRow(0);// 创建HSSFRow对象
    	
    	HSSFCell cell = row.createCell(0);// 创建HSSFCell对象
    	
    	cell.setCellValue("我的Excel表格标题");// 设置单元格的值
    	// 输出Excel文件
    	try {
    		FileOutputStream output = new FileOutputStream("d:\\oExcl.xls");
    		wb.write(output);
    		output.flush();
    		System.out.println("成功");
    	} catch (IOException e) {
    		// TODO Auto-generated catch block
    		e.printStackTrace();
    		System.out.println("文件导出出错");
    	}
    	
    	}
    
    	}
    	```
    	
    
    

贴图
在这里插入图片描述

  1. 例子1
package com.zsx.excl;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.Date;

import org.apache.poi.hssf.usermodel.HSSFCell;
import org.apache.poi.hssf.usermodel.HSSFCellStyle;
import org.apache.poi.hssf.usermodel.HSSFDataFormat;
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.ss.util.CellRangeAddress;

public class ToExcel2 {

	public static void main(String[] args) {

		HSSFWorkbook wb = new HSSFWorkbook(); // 创建excel文档对象

		HSSFSheet sheet = wb.createSheet("用户信息表"); // 创建excel表单

		HSSFRow row1 = sheet.createRow(0); // 创建一行,0-代表第一行,可以是0~65535之间的任何一个

		HSSFCell cell = row1.createCell(0); // 创建一列,0-代表第一列,可以是0~255之间的任何一个

		cell.setCellValue("系统用户信息"); // 设置单元格内容

		sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4)); // 合并单元格,CellRangeAddress构造参数依次表示起始行,截至行,起始列,
																	// 截至列

		HSSFRow row2 = sheet.createRow(1); // 在sheet里面创建第二行
		row2.createCell(0).setCellValue("ID");
		row2.createCell(1).setCellValue("用户名");
		row2.createCell(2).setCellValue("角色");
		row2.createCell(3).setCellValue("创建时间");
		row2.createCell(4).setCellValue("登录次数");
		
		HSSFRow row3 = sheet.createRow(2); // 在sheet里面创建第三行
		HSSFCell cell3_3 = row3.createCell(3); // 为了给这一行设样式
		HSSFCellStyle cellStyle = wb.createCellStyle(); // 样式
		cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")); // 格式

		row3.createCell(0).setCellValue(530);
		row3.createCell(1).setCellValue("张三");
		row3.createCell(2).setCellValue("超级管理员");
		cell3_3.setCellValue(new Date());
		cell3_3.setCellStyle(cellStyle);
		row3.createCell(4).setCellValue(1000);
		//。。。省略部分代码
		
		// 输出Excel文件
		try {
			FileOutputStream output = new FileOutputStream("d:\\oExcl2.xls");
			wb.write(output);
			output.flush();
			System.out.println("成功");
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
			System.out.println("文件导出出错");
		}
	}
}

贴图:
在这里插入图片描述
ps: 上面的例子,是通过io流来输出,这个并不能满足我们的需求,在实际的开发中我还是希望能,通过浏览器下载

  1. web功能的列子,这里我就写一个servlet的小例子
    在实际开发中还是使用ssm框架,或者springboot,ssh框架中的事务层中,这里例子太小,所以不做过多。
    创建servlet足以。
    5.1、创建servlet
package com.zsx.servlet;

import java.io.IOException;
import java.io.OutputStream;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
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.HSSFDataFormat;
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.ss.util.CellRangeAddress;

/**
 * Servlet implementation class ToExcelServlet
 */
@WebServlet("/toExcelServlet")
public class ToExcelServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
	
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		HSSFWorkbook wb = new HSSFWorkbook(); // 创建excel文档对象

		HSSFSheet sheet = wb.createSheet("用户信息表"); // 创建excel表单

		HSSFRow row1 = sheet.createRow(0); // 创建一行,0-代表第一行,可以是0~65535之间的任何一个

		HSSFCell cell = row1.createCell(0); // 创建一列,0-代表第一列,可以是0~255之间的任何一个

		cell.setCellValue("系统用户信息"); // 设置单元格内容

		sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4)); // 合并单元格,CellRangeAddress构造参数依次表示起始行,截至行,起始列,
																	// 截至列

		HSSFRow row2 = sheet.createRow(1); // 在sheet里面创建第二行
		row2.createCell(0).setCellValue("ID");
		row2.createCell(1).setCellValue("用户名");
		row2.createCell(2).setCellValue("角色");
		row2.createCell(3).setCellValue("创建时间");
		row2.createCell(4).setCellValue("登录次数");
		
		HSSFRow row3 = sheet.createRow(2); // 在sheet里面创建第三行
		HSSFCell cell3_3 = row3.createCell(3); // 为了给这一行设样式
		HSSFCellStyle cellStyle = wb.createCellStyle(); // 样式
		cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")); // 格式

		row3.createCell(0).setCellValue(530);
		row3.createCell(1).setCellValue("张三");
		row3.createCell(2).setCellValue("超级管理员");
		cell3_3.setCellValue(new Date());
		cell3_3.setCellStyle(cellStyle);
		row3.createCell(4).setCellValue(1000);
		//。。。
		
		//输出Excel文件
	    OutputStream output=response.getOutputStream();
	    response.reset();
	    response.setHeader("Content-disposition", "attachment; filename=test.xls");
	    response.setContentType("application/msexcel");        
	    wb.write(output);
	    output.close();
	}

	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		doGet(request, response);
	}

}

jsp页面:

<%@ page language="java" contentType="text/html; charset=utf-8"
    pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>我的jsp页面</title>
</head>
<body>
	<a href="toExcelServlet">下载Excel文档</a>
</body>
</html>

成功:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

样式设置

  1. 设置单元格的行高,列宽

    HSSFSheet sheet=wb.createSheet();
     
    sheet.setDefaultRowHeightInPoints(10);//设置默认列	
    sheet.setDefaultColumnWidth(20);//设置默认列宽
    
    sheet.setColumnWidth(cell.getColumnIndex(), 256 * 50); //单位是单个字符的256分之一
    
  2. 合并单元格

sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 4)); // 合并单元格,CellRangeAddress构造参数依次表示起始行,截至行,起始列,
																	// 截至列
  1. 单元格样式
HSSFCell cell3_3 = row3.createCell(3); // 为了给这一行设样式
		HSSFCellStyle cellStyle = wb.createCellStyle(); // 样式
		cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm")); // 格式

		row3.createCell(0).setCellValue(530);
		row3.createCell(1).setCellValue("张三");
		row3.createCell(2).setCellValue("超级管理员");
		cell3_3.setCellValue(new Date());
		cell3_3.setCellStyle(cellStyle);  // 在这里使用
		row3.createCell(4).setCellValue(1000);
下面是引用,我是陌生人的样式例子
// 设置单元格的横向和纵向对齐方式,具体参数就不列了,参考HSSFCellStyle
 
 cellStyle.setAlignment(HSSFCellStyle.ALIGN_JUSTIFY);
 
 cellStyle.setVerticalAlignment(HSSFCellStyle.VERTICAL_CENTER);
 
 /* 设置单元格的填充方式,以及前景颜色和背景颜色
 
  三点注意:
 
  1.如果需要前景颜色或背景颜色,一定要指定填充方式,两者顺序无所谓;
 
  2.如果同时存在前景颜色和背景颜色,前景颜色的设置要写在前面;
 
  3.前景颜色不是字体颜色。
 
 */
 
 //设置填充方式(填充图案)
 
 cellStyle.setFillPattern(HSSFCellStyle.DIAMONDS);
 
 //设置前景色
 
 cellStyle.setFillForegroundColor(HSSFColor.RED.index);
 
 //设置背景颜色
 
 cellStyle.setFillBackgroundColor(HSSFColor.LIGHT_YELLOW.index);
 
 // 设置单元格底部的边框及其样式和颜色
 
 // 这里仅设置了底边边框,左边框、右边框和顶边框同理可设
 
 cellStyle.setBorderBottom(HSSFCellStyle.BORDER_SLANTED_DASH_DOT);
 
 cellStyle.setBottomBorderColor(HSSFColor.DARK_RED.index);
 
 //设置日期型数据的显示样式
 
 cellStyle.setDataFormat(HSSFDataFormat.getBuiltinFormat("m/d/yy h:mm"));
  1. 字体样式

    HSSFWorkbook wb=new HSSFWorkbook();
     
    HSSFFont  fontStyle=wb.createFont();
     
    HSSFWorkbook wb=new HSSFWorkbook ();
    
     //设置字体样式
     
      fontStyle.setFontName("宋体");  
     
      //设置字体高度
     
      fontStyle.setFontHeightInPoints((short)20);  
     
      //设置字体颜色
     
      font.setColor(HSSFColor.BLUE.index);
     
      //设置粗体
     
      fontStyle.setBoldweight(HSSFFont.BOLDWEIGHT_BOLD);
     
      //设置斜体
     
    font.setItalic(true);
     
    //设置下划线
     
    font.setUnderline(HSSFFont.U_SINGLE);	
    
    
    //字体也是单元格格式的一部分,所以从属于HSSFCellStyle
     
    // 将字体对象赋值给单元格样式对象
     
    cellStyle.setFont(font);
     
    // 将单元格样式应用于单元格
     
    cell.setCellStyle(cellStyle);
    

猜你喜欢

转载自blog.csdn.net/weixin_43760328/article/details/85295569