Java使用POI导入导出Excel

这篇博客介绍了如何使用Java的POI库进行Excel的导入和导出操作。首先,列出了所需的jar依赖版本,接着详细讲解了工具类包括DownloadUtil、FileUtil和数据实体类ExcelDataTest的实现。博主还提供了模板文件的存放路径,并展示了导出和导入Excel的实际运行结果,包括Excel数据和操作后的结果。
摘要由CSDN通过智能技术生成

一、使用的jar依赖版本

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

<!-- 只支持2007以前的excel(文件扩展名为xls) -->
<!-- <dependency>
    <groupId>org.apache.poi</groupId>
    <artifactId>poi</artifactId>
    <version>3.17</version>
</dependency> -->
注:jar包poi与poi-ooxml的区别:
poi:使用前缀为HSSF的类(HSSFWorkbook),只支持2007以前的excel(文件扩展名为xls)。
poi-ooxml:使用前缀为XSSH的类(XSSFWorkbook),支持2007以前和以后的excel(文件扩展名为xlsx)。
依赖和版本的差异可能会导致代码的差异。

以下代码只支持2007以前和以后的excel(文件扩展名为xlsx。

二、工具类

package test.poi;

import java.io.ByteArrayOutputStream;
import java.io.File;
import java.io.InputStream;
import java.lang.reflect.Field;
import java.text.DecimalFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.apache.poi.ss.usermodel.VerticalAlignment;
import org.apache.poi.ss.usermodel.BorderStyle;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.HorizontalAlignment;
import org.apache.poi.ss.usermodel.IndexedColors;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.xssf.usermodel.XSSFCellStyle;
import org.apache.poi.xssf.usermodel.XSSFFont;
import org.apache.poi.xssf.usermodel.XSSFSheet;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;

/**
 * Excel工具类
 */
public class ExcelUtil {
   
	
	/**
	 * 通过模板导出excel文件
	 * 只支持 xlsx格式
	 * 只支持 读取excle第一个sheet
	 * 模板文件默认读取templates/
	 * @param dataList 数据集合
	 * @param dataEntityClass 数据实体类
	 * @param templateName 模板名称 
	 * @param titleRowNum 固定标题行数
	 * @return
	 * @throws Exception
	 */
	public static <T> ByteArrayOutputStream exportExcel(List<T> dataList, Class<T> dataEntityClass, String templateName, int titleRowNum) throws Exception {
   
		if (dataList == null || dataList.size() == 0) {
   
			throw new Exception("数据为空");
		} 
		XSSFWorkbook workbook = null;
		try {
   
			// 读取excel模板文件
			InputStream in = ExcelUtil.class.getClassLoader().getResourceAsStream("templates/"+templateName);
			workbook = new XSSFWorkbook(in);
	        XSSFSheet sheet = workbook.getSheetAt(0);
	        // 设置默认行高
	        //sheet.setDefaultRowHeightInPoints(25F);
	        // 获取数据实体类的所有字段
	        Field[] declaredFields = dataEntityClass.getDeclaredFields();
	        int declaredFieldsSize = declaredFields.length;
	        // ByteArray输出字节流
	        ByteArrayOutputStream baos = new ByteArrayOutputStream();
	        
	        // 遍历数据写入到excel
	        int dataListSize = dataList.size();
	        for (int i = 0; i < dataListSize; i++) {
    
	        	// 获取数据list里面的对象实例
	            T instance = dataList.get(i);
	            // 创建行
	            Row row = sheet.createRow(i + titleRowNum);
	            for(int j = 0; j < declaredFieldsSize; j++){
   
		        	Field field = declaredFields[j];
		        	field.setAccessible(true);
		        	// 获取字段的值
		            Object value = field.get(instance);
		            
		            // 创建单元格
		            Cell cell = row.createCell(j);
		            
		            // 设置单元格样式
		            XSSFCellStyle cellStyle = workbook.createCellStyle(); 
		            
		            // 设置文本对齐方式
		            cellStyle.setWrapText(true); //设置自动换行  
		            cellStyle.setAlignment(HorizontalAlignment
  • 0
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值