下载资源后端资源详情
excel.zip
大小:11.56KB
价格:41积分
下载量:0
评分:
5.0
上传者:qq_44962256
更新日期:2025-09-22

好用的excel工具包

资源文件列表(大概)

文件名
大小
excel/ExcelClassField.java
1.46KB
excel/ExcelExport.java
738B
excel/ExcelImport.java
778B
excel/ExcelUtils.java
52.11KB
excel/
-

资源内容介绍

好用的excel工具包
package com.tjchy.util.excel;import com.alibaba.fastjson.JSONArray;import com.alibaba.fastjson.JSONObject;import org.apache.poi.hssf.usermodel.HSSFDataValidation;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import org.apache.poi.poifs.filesystem.POIFSFileSystem;import org.apache.poi.ss.usermodel.*;import org.apache.poi.ss.usermodel.ClientAnchor.AnchorType;import org.apache.poi.ss.util.CellRangeAddress;import org.apache.poi.ss.util.CellRangeAddressList;import org.apache.poi.xssf.streaming.SXSSFSheet;import org.apache.poi.xssf.streaming.SXSSFWorkbook;import org.apache.poi.xssf.usermodel.XSSFClientAnchor;import org.apache.poi.xssf.usermodel.XSSFDataValidation;import org.apache.poi.xssf.usermodel.XSSFWorkbook;import org.springframework.web.multipart.MultipartFile;import javax.servlet.ServletOutputStream;import javax.servlet.http.HttpServletResponse;import java.io.*;import java.lang.reflect.Field;import java.math.BigDecimal;import java.math.RoundingMode;import java.net.URL;import java.net.URLEncoder;import java.text.NumberFormat;import java.text.SimpleDateFormat;import java.util.*;import java.util.Map.Entry;import java.util.regex.Pattern;/** * Excel导入导出工具类 * 原文链接(不定时增加新功能): https://zyqok.blog.csdn.net/article/details/121994504 * * @author sunnyzyq * @date 2021/12/17 */@SuppressWarnings("unused")public class ExcelUtils { private static final String XLSX = ".xlsx"; private static final String XLS = ".xls"; public static final String ROW_MERGE = "row_merge"; public static final String COLUMN_MERGE = "column_merge"; private static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss"; private static final String ROW_NUM = "rowNum"; private static final String ROW_DATA = "rowData"; private static final String ROW_TIPS = "rowTips"; private static final int CELL_OTHER = 0; private static final int CELL_ROW_MERGE = 1; private static final int CELL_COLUMN_MERGE = 2; private static final int IMG_HEIGHT = 30; private static final int IMG_WIDTH = 30; private static final char LEAN_LINE = '/'; private static final int BYTES_DEFAULT_LENGTH = 10240; private static final NumberFormat NUMBER_FORMAT = NumberFormat.getNumberInstance(); public static <T> List<T> readFile(File file, Class<T> clazz) throws Exception { JSONArray array = readFile(file); return getBeanList(array, clazz); } public static <T> List<T> readMultipartFile(MultipartFile mFile, Class<T> clazz) throws Exception { JSONArray array = readMultipartFile(mFile); return getBeanList(array, clazz); } public static JSONArray readFile(File file) throws Exception { return readExcel(null, file); } public static JSONArray readMultipartFile(MultipartFile mFile) throws Exception { return readExcel(mFile, null); } public static Map<String, JSONArray> readFileManySheet(File file) throws Exception { return readExcelManySheet(null, file); } public static Map<String, JSONArray> readFileManySheet(MultipartFile file) throws Exception { return readExcelManySheet(file, null); } private static <T> List<T> getBeanList(JSONArray array, Class<T> clazz) throws Exception { List<T> list = new ArrayList<>(); Map<Integer, String> uniqueMap = new HashMap<>(16); for (int i = 0; i < array.size(); i++) { list.add(getBean(clazz, array.getJSONObject(i), uniqueMap)); } return list; } /** * 获取每个对象的数据 */ private static <T> T getBean(Class<T> c, JSONObject obj, Map<Integer, String> uniqueMap) throws Exception { T t = c.newInstance(); Field[] fields = c.getDeclaredFields(); List<String> errMsgList = new ArrayList<>(); boolean hasRowTipsField = false; StringBuilder uniqueBuilder = new StringBuilder(); int rowNum = 0; for (Field field : fields) { // 行号 if (field.getName().equals(ROW_NUM)) { rowNum = obj.getInteger(ROW_NUM); field.setAccessible(true); field.set(t, rowNum); continue; } // 是否需要设置异常信息 if (field.getName().equals(ROW_TIPS)) { hasRowTipsField = true; continue; } // 原始数据 if (field.getName().equals(ROW_DATA)) { field.setAccessible(true); field.set(t, obj.toString()); continue; } // 设置对应属性值 setFieldValue(t, field, obj, uniqueBuilder, errMsgList); } // 数据唯一性校验 if (uniqueBuilder.length() > 0) { if (uniqueMap.containsValue(uniqueBuilder.toString())) { Set<Integer> rowNumKeys = uniqueMap.keySet(); for (Integer num : rowNumKeys) { if (uniqueMap.get(num).equals(uniqueBuilder.toString())) { errMsgList.add(String.format("数据唯一性校验失败,(%s)与第%s行重复", uniqueBuilder, num)); } } } else { uniqueMap.put(rowNum, uniqueBuilder.toString()); } } // 失败处理 if (errMsgList.isEmpty() && !hasRowTipsField) { return t; } StringBuilder sb = new StringBuilder(); int size = errMsgList.size(); for (int i = 0; i < size; i++) { if (i == size - 1) { sb.append(errMsgList.get(i)); } else { sb.append(errMsgList.get(i)).append(";"); } } // 设置错误信息 for (Field field : fields) { if (field.getName().equals(ROW_TIPS)) { field.setAccessible(true); field.set(t, sb.toString()); } } return t; } private static <T> void setFieldValue(T t, Field field, JSONObject obj, StringBuilder uniqueBuilder, List<String> errMsgList) { // 获取 ExcelImport 注解属性 ExcelImport annotation = field.getAnnotation(ExcelImport.class); if (annotation == null) { return; } String cname = annotation.value(); if (cname.trim().length() == 0) { return; } // 获取具体值 String val = null; if (obj.containsKey(cname)) { val = getString(obj.getString(cname)); } if (val == null) { return; } field.setAccessible(true); // 判断是否必填 boolean require = annotation.required(); if (require && val.isEmpty()) { errMsgList.add(String.format("[%s]不能为空", cname)); return; } // 数据唯一性获取 boolean unique = annotation.unique(); if (unique) { if (uniqueBuilder.length() > 0) { uniqueBuilder.append("--").append(val); } else { uniqueBuilder.append(val); } } // 判断是否超过最大长度 int maxLength = annotation.maxLength(); if (maxLength > 0 && val.length() > maxLength) { errMsgList.add(String.format("[%s]长度不能超过%s个字符(当前%s个字符)", cname, maxLength, val.length())); } // 判断当前属性是否有映射关系 LinkedHashMap<String, String> kvMap = getKvMap(annotation.kv()); if (!kvMap.isEmpty()) { boolean isMatch = false; for (String key : kvMap.keySet()) {

用户评论 (0)

发表评论

captcha

相关资源

ISO 26262 2018 Published 2nd.zip

ISO 26262 2018 1-12

21.26MB11积分

三菱mc4c开发Java代码Demo

详细参考博客https://blog.csdn.net/h4241778/article/details/140947315?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22140947315%22%2C%22source%22%3A%22h4241778%22%7D解压密码博客中

9.28MB42积分

一款摩尔斯电码发报练习软件Lakey

乳山市业余无线电知识库文件////此处仅为软件备份,软件相关权益归原作者所有////Lakey是一款摩尔斯电码发报练习软件,具有摩尔斯电码解析、音频频谱分析、摩尔斯电码听抄练习、可进行多主机网络通联练习或试验等特点。 主要特性:1、利用键盘或鼠标进行摩尔斯电码发报练习,支持键盘直接录入,支持手键和自动键方式;2、摩尔斯电码听抄练习,可以将听抄音频转换为WAV文件,用于通过手机或其他移动设备进行听抄练习;3、摩尔斯电码解析,可以用做发报练习参考;4、音频频谱分析,可以对电脑音频模拟输入(Line in、Aux in或Mic in等)进行音频分析并显示;5、发报键状态可以输出到计算机I/O接口,对外围设备进行简单控制;6、可进行多主机网络通联练习或试验。

141.12KB10积分

基于web3和cnn的新闻分析系统

基于web3和cnn的新闻分析系统【项目资源】:包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。【项目质量】:所有源码都经过严格测试,可以直接运行。功能在确认正常工作后才上传。【适用人群】:适用于希望学习不同技术领域的小白或进阶学习者。可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。【附加价值】:项目具有较高的学习借鉴价值,也可直接拿来修改复刻。对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。【沟通交流】:有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。鼓励下载和使用,并欢迎大家互相学习,共同进步。

6.76MB36积分