package com.lth.excelexport.excel_export.utils;
import com.lth.excelexport.excel_export.annotation.JcExcelName;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.io.IOUtils;
import org.springframework.util.StringUtils;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.text.SimpleDateFormat;
import java.util.*;
/**
* @ClassName MyCsvFileUtil
* @description TODO
* @Author JCcco
* @Date 2023/4/12 0012
**/
@Slf4j
public class MyCsvFileUtil {
public static final String FILE_SUFFIX = ".csv";
//分隔符
public static final String CSV_DELIMITER = ",";
//文件结尾
public static final String CSV_TAIL = "\r\n";
protected static final String DATE_STR_FILE_NAME = "yyyyMMddHHmmssSSS";
/**
* 将字符串转成csv文件
* 字符串写入文件
*/
public static void createCsvFile(String savePath, String contextStr) throws IOException {
File file = new File(savePath);
//创建文件
file.createNewFile();
//创建文件输出流
FileOutputStream fileOutputStream = new FileOutputStream(file);
//将指定字节写入此文件输出流
fileOutputStream.write(contextStr.getBytes("gbk"));
fileOutputStream.flush();
fileOutputStream.close();
}
/**
* 写文件
*
* @param fileName
* @param content
*/
public static void writeFile(String fileName, String content) {
FileOutputStream fos = null;
OutputStreamWriter writer = null;
try {
fos = new FileOutputStream(fileName, true);
writer = new OutputStreamWriter(fos, "GBK");
writer.write(content);
writer.flush();
} catch (Exception e) {
log.error("写文件异常|{}", e);
} finally {
if (fos != null) {
IOUtils.closeQuietly(fos);
}
if (writer != null) {
IOUtils.closeQuietly(writer);
}
}
}
/**
* 构建文件名称
* @param dataList
* @return
*/
public static String buildCsvFileFileName(List dataList) {
return dataList.get(0).getClass().getSimpleName() + new SimpleDateFormat(DATE_STR_FILE_NAME).format(new Date()) + FILE_SUFFIX;
}
/**
* 构建excel 标题行名
* @param dataList
* @return
*/
public static String buildCsvFileTableNames(List dataList) {
Map<String, Object> map = toMap(dataList.get(0));
StringBuilder tableNames = new StringBuilder();
for (String key : map.keySet()) {
tableNames.append(key).append(MyCsvFileUtil.CSV_DELIMITER);
}
return tableNames.append(MyCsvFileUtil.CSV_TAIL).toString();
}
/**
* 构建excel内容
* 转成字符串
* @param dataLists
* @return
*/
public static String buildCsvFileBodyMap(List dataLists) {
//不管你传什么玩意,我都给你反射一手,搞成Map
List<Map<String, Object>> mapList = new ArrayList<>();
for (Object o : dataLists) {
mapList.add(toMap(o));
}
//然后利用csv格式,对着map嘎嘎一顿拼接数据
StringBuilder lineBuilder = new StringBuilder();
for (Map<String, Object> rowData : mapList) {
for (String key : rowData.keySet()) {
Object value = rowData.get(key);
if (Objects.nonNull(value)) {
lineBuilder.append(value).append(MyCsvFileUtil.CSV_DELIMITER);
} else {
lineBuilder.append("--").append(MyCsvFileUtil.CSV_DELIMITER);
}
}
lineBuilder.append(MyCsvFileUtil.CSV_TAIL);
}
return lineBuilder.toString();
}
/**
* 类转map
* @param entity
* @param <T>
* @return
*/
public static<T> Map<String, Object> toMap(T entity){
Class<? extends Object> bean = entity.getClass();
Field[] fields = bean.getDeclaredFields();
Map<String, Object> map = new HashMap<>(fields.length);
for(Field field:fields){
try {
if(!"serialVersionUID".equals(field.getName())){
String methodName = "get"+field.getName().substring(0, 1).toUpperCase()+field.getName().substring(1);
Method method = bean.getDeclaredMethod(methodName);
Object fieldValue = method.invoke(entity);
map.put(field.getName(),fieldValue);
}
} catch (Exception e) {
log.warn("toMap() Exception={}",e.getMessage());
}
}
return map;
}
//新的反射解析拿字段属性注解值函数
public static <T> List<String> resolveExcelTableName(T entity) {
List<String> tableNamesList = new ArrayList<>();
Class<? extends Object> bean = entity.getClass();
Field[] fields = bean.getDeclaredFields();
Map<String, Object> map = new HashMap<>(fields.length);
for (Field field : fields) {
try {
if (!"serialVersionUID".equals(field.getName())) {
String tableTitleName = field.getName();
JcExcelName myFieldAnn = field.getAnnotation(JcExcelName.class);
String annName = myFieldAnn.name();
if (StringUtils.hasLength(annName)) {
tableTitleName = annName;
}
tableNamesList.add(tableTitleName);
}
} catch (Exception e) {
log.warn("toMap() Exception={}", e.getMessage());
}
}
return tableNamesList;
}
//然后根据解析出来的注解值列名拼接 表格标题名格式
public static String buildCsvFileTableNamesNew(List<String> dataList) {
StringBuilder tableNames = new StringBuilder();
for (String name : dataList) {
tableNames.append(name).append(MyCsvFileUtil.CSV_DELIMITER);
}
return tableNames.append(MyCsvFileUtil.CSV_TAIL).toString();
}
}
没有合适的资源?快使用搜索试试~ 我知道了~
万能的导出excel工具
共101个文件
xml:84个
java:9个
properties:2个
需积分: 0 2 下载量 17 浏览量
2023-04-12
18:23:47
上传
评论
收藏 117KB ZIP 举报
温馨提示
参考https://blog.csdn.net/qq_35387940/article/details/129062470博文 实现demo
资源推荐
资源详情
资源评论
收起资源包目录
万能的导出excel工具 (101个子文件)
mvnw.cmd 7KB
.gitignore 395B
excelExport.iml 10KB
maven-wrapper.jar 59KB
MyCsvFileUtil.java 6KB
testController.java 3KB
ExcelUtils.java 3KB
District2.java 651B
User.java 519B
District.java 424B
JcExcelName.java 421B
ExcelExportApplication.java 347B
ExcelExportApplicationTests.java 238B
HELP.md 851B
mvnw 10KB
maven-wrapper.properties 1019B
application.properties 16B
workspace.xml 21KB
uiDesigner.xml 9KB
pom.xml 3KB
compiler.xml 824B
Maven__com_fasterxml_jackson_module_jackson_module_parameter_names_2_13_4.xml 736B
Maven__org_springframework_boot_spring_boot_test_autoconfigure_2_7_4.xml 713B
Maven__com_vaadin_external_google_android_json_0_0_20131108_vaadin1.xml 700B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jsr310_2_13_4.xml 695B
Maven__org_springframework_boot_spring_boot_starter_logging_2_7_4.xml 692B
Maven__org_springframework_boot_spring_boot_starter_tomcat_2_7_4.xml 685B
Maven__com_fasterxml_jackson_datatype_jackson_datatype_jdk8_2_13_4.xml 681B
Maven__org_springframework_boot_spring_boot_autoconfigure_2_7_4.xml 678B
Maven__org_springframework_boot_spring_boot_starter_json_2_7_4.xml 671B
Maven__org_springframework_boot_spring_boot_starter_test_2_7_4.xml 671B
Maven__org_springframework_boot_spring_boot_starter_web_2_7_4.xml 664B
Maven__org_apache_tomcat_embed_tomcat_embed_websocket_9_0_65.xml 660B
Maven__com_fasterxml_jackson_core_jackson_annotations_2_13_4.xml 651B
Maven__org_springframework_boot_spring_boot_starter_2_7_4.xml 636B
Maven__org_junit_platform_junit_platform_commons_1_8_2.xml 633B
Maven__jakarta_activation_jakarta_activation_api_1_2_2.xml 633B
Maven__jakarta_annotation_jakarta_annotation_api_1_3_5.xml 633B
Maven__com_fasterxml_jackson_core_jackson_databind_2_13_4.xml 630B
Maven__org_junit_platform_junit_platform_engine_1_8_2.xml 626B
Maven__org_apache_tomcat_embed_tomcat_embed_core_9_0_65.xml 625B
Maven__org_springframework_boot_spring_boot_test_2_7_4.xml 615B
Maven__org_junit_jupiter_junit_jupiter_params_5_8_2.xml 615B
Maven__org_junit_jupiter_junit_jupiter_engine_5_8_2.xml 615B
Maven__org_apache_tomcat_embed_tomcat_embed_el_9_0_65.xml 611B
Maven__jakarta_xml_bind_jakarta_xml_bind_api_2_3_3.xml 611B
Maven__javax_validation_validation_api_2_0_1_Final.xml 611B
Maven__org_springframework_spring_expression_5_3_23.xml 609B
Maven__org_apache_logging_log4j_log4j_to_slf4j_2_17_2.xml 608B
Maven__org_apache_commons_commons_collections4_4_1.xml 605B
Maven__com_fasterxml_jackson_core_jackson_core_2_13_4.xml 602B
Maven__org_mockito_mockito_junit_jupiter_4_5_1.xml 598B
Maven__org_junit_jupiter_junit_jupiter_api_5_8_2.xml 594B
Maven__org_springframework_spring_context_5_3_23.xml 588B
Maven__net_bytebuddy_byte_buddy_agent_1_12_17.xml 585B
Maven__org_springframework_spring_webmvc_5_3_23.xml 581B
Maven__cn_afterturn_easypoi_annotation_3_0_3.xml 581B
Maven__org_springframework_boot_spring_boot_2_7_4.xml 580B
Maven__org_apache_commons_commons_lang3_3_12_0.xml 577B
Maven__ch_qos_logback_logback_classic_1_2_11.xml 575B
Maven__org_apache_poi_poi_ooxml_schemas_3_15.xml 575B
Maven__org_springframework_spring_beans_5_3_23.xml 574B
Maven__org_apache_logging_log4j_log4j_api_2_17_2.xml 573B
Maven__org_apiguardian_apiguardian_api_1_1_2.xml 572B
Maven__org_springframework_spring_test_5_3_23.xml 567B
Maven__org_springframework_spring_core_5_3_23.xml 567B
Maven__org_junit_jupiter_junit_jupiter_5_8_2.xml 566B
Maven__org_springframework_spring_aop_5_3_23.xml 560B
Maven__org_springframework_spring_web_5_3_23.xml 560B
Maven__org_springframework_spring_jcl_5_3_23.xml 560B
Maven__net_minidev_accessors_smart_2_4_8.xml 556B
Maven__ch_qos_logback_logback_core_1_2_11.xml 554B
Maven__com_jayway_jsonpath_json_path_2_7_0.xml 546B
Maven__net_bytebuddy_byte_buddy_1_12_17.xml 543B
Maven__commons_codec_commons_codec_1_15.xml 543B
Maven__org_assertj_assertj_core_3_22_0.xml 542B
Maven__org_apache_xmlbeans_xmlbeans_2_6_0.xml 539B
Maven__cn_afterturn_easypoi_base_3_0_3.xml 539B
Maven__com_github_virtuald_curvesapi_1_04.xml 539B
Maven__org_skyscreamer_jsonassert_1_5_1.xml 537B
Maven__org_xmlunit_xmlunit_core_2_9_0.xml 535B
Maven__org_mockito_mockito_core_4_5_1.xml 535B
Maven__org_slf4j_jul_to_slf4j_1_7_36.xml 534B
Maven__org_opentest4j_opentest4j_1_2_0.xml 533B
Maven__cn_afterturn_easypoi_web_3_0_3.xml 532B
Maven__org_projectlombok_lombok_1_18_24.xml 531B
Maven__net_minidev_json_smart_2_4_8.xml 521B
Maven__org_apache_poi_poi_ooxml_3_15.xml 519B
Maven__com_alibaba_fastjson_1_2_69.xml 514B
Maven__org_slf4j_slf4j_api_1_7_36.xml 513B
Maven__com_google_guava_guava_16_0_1.xml 513B
Maven__org_objenesis_objenesis_3_2.xml 508B
Maven__commons_io_commons_io_2_5.xml 503B
Maven__org_hamcrest_hamcrest_2_2.xml 497B
Maven__org_yaml_snakeyaml_1_30.xml 495B
Maven__stax_stax_api_1_0_1.xml 479B
Maven__org_apache_poi_poi_3_15.xml 477B
Maven__org_ow2_asm_asm_9_1.xml 458B
misc.xml 451B
modules.xml 269B
共 101 条
- 1
- 2
资源评论
weixin_46242102
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功