package cn.linksla.common.utils;
import cn.hutool.core.collection.CollUtil;
import cn.hutool.core.convert.Convert;
import cn.hutool.core.io.IoUtil;
import cn.hutool.core.lang.Validator;
import cn.hutool.core.util.IdUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.poi.excel.BigExcelWriter;
import cn.hutool.poi.excel.ExcelUtil;
import cn.hutool.poi.excel.ExcelWriter;
import cn.hutool.poi.excel.sax.handler.RowHandler;
import cn.linksla.common.cache.DictCache;
import cn.linksla.common.security.login.handler.DefineException;
import cn.linksla.entity.SysAssetGroup;
import cn.linksla.entity.SysAssetTypeCmdbItem;
import cn.linksla.entity.SysDict;
import cn.linksla.entity.SysProducer;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.multipart.MultipartFile;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.IOException;
import java.net.URLEncoder;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class ExcelUtils {
private static final Logger logger = LoggerFactory.getLogger(ExcelUtils.class);
private static List<List<Object>> lineList = new ArrayList<>();
/**
* excel 导出工具类
*
* @param response
* @param fileName 文件名
* @param projects 对象集合
* @param columnNames 导出的excel中的列名
* @param keys 对应的是对象中的字段名字
* @throws IOException
*/
public static void export(HttpServletResponse response, String fileName, List<?> projects, String[] columnNames, String[] keys) throws IOException {
ExcelWriter bigWriter = ExcelUtil.getBigWriter();
for (int i = 0; i < columnNames.length; i++) {
bigWriter.addHeaderAlias(columnNames[i], keys[i]);
bigWriter.setColumnWidth(i, 20);
}
// 一次性写出内容,使用默认样式,强制输出标题
bigWriter.write(projects, true);
//response为HttpServletResponse对象
response.setContentType("application/vnd.ms-excel;charset=utf-8");
//test.xls是弹出下载对话框的文件名,不能为中文,中文请自行编码
response.setHeader("Content-Disposition", "attachment;filename=" + new String((fileName + ".xlsx").getBytes(), "iso-8859-1"));
ServletOutputStream out = response.getOutputStream();
bigWriter.flush(out, true);
// 关闭writer,释放内存
bigWriter.close();
//此处记得关闭输出Servlet流
IoUtil.close(out);
}
/**
* excel导入工具类
*
* @param file 文件
* @param columNames 列对应的字段名
* @return 返回数据集合
* @throws DefineException
* @throws IOException
*/
public static List<Map<String, Object>> leading(MultipartFile file, String[] columNames) throws DefineException, IOException {
String fileName = file.getOriginalFilename();
// 上传文件为空
if (StrUtil.isEmpty(fileName)) {
throw new DefineException("没有导入文件");
}
//上传文件大小为1000条数据
if (file.getSize() > 1024 * 1024 * 10) {
logger.error("upload | 上传失败: 文件大小超过10M,文件大小为:{}", file.getSize());
throw new DefineException("上传失败: 文件大小不能超过10M!");
}
// 上传文件名格式不正确
if (fileName.lastIndexOf(".") != -1 && !".xlsx".equals(fileName.substring(fileName.lastIndexOf("."))) &&
!".xls".equals(fileName.substring(fileName.lastIndexOf(".")))) {
throw new DefineException("文件名格式不正确, 请使用后缀名为.XLSX的文件");
}
//读取数据
Exc
excel导入工具类
最新推荐文章于 2024-07-02 11:28:53 发布
本文介绍如何使用Java编程实现Excel文件的数据导入功能,通过解析Excel文件,将其内容整合到应用程序中,适用于数据处理和分析场景。
摘要由CSDN通过智能技术生成