当前位置: 首页 > news >正文

网站没有备案可以做百度推广吗国外黄冈网站推广软件有哪些

网站没有备案可以做百度推广吗,国外黄冈网站推广软件有哪些,沈阳市网站,精简wordpress博客程序需求背景&#xff1a; 导出excel的设置某些表头动态导出(可以根据筛选条件或一些属性的数据量)&#xff0c;方便导出后用户查看想看的信息。 一、技术选型&#xff1a; easyExcel的原生数据处理 二、方案设计&#xff1a; 根据EasyExcel支持的表头List<List<String>…

需求背景

       导出excel的设置某些表头动态导出(可以根据筛选条件或一些属性的数据量),方便导出后用户查看想看的信息。

一、技术选型:

        easyExcel的原生数据处理

二、方案设计:

        根据EasyExcel支持的表头List<List<String>>手动设置,可参考Easy Excel 官网(动态表头),本文给的可自行研究,Demo简单易懂。

三、代码实现:

3.1:pom.xml
<dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.2</version>
</dependency>
3.2: API
    @ApiOperation(value = "导出")@PostMapping("/export")public void export(HttpServletResponse response, @RequestBody DemoExportParam param) throws BaseException {exportService.export(response, param);}
3.3:通用服务层API
import com.alibaba.excel.write.handler.WriteHandler;import javax.servlet.http.HttpServletResponse;
import java.util.List;/*** @author c*/
public interface IEasyExcelService {/*** 导出excel方法** @param exportData 需要导出的数据* @param response   response* @param tClass     导出excel的字段实体类* @param fileName   文件名字* @param sheetName  sheet名字*/<T> void exportExcel(List<T> exportData, HttpServletResponse response, Class<T> tClass, String fileName, String sheetName);/*** 导出excel方法 (携带自定义策略)* @param exportData 需要导出的数据* @param response HttpServletResponse* @param tClass 导出excel的字段实体类* @param fileName 文件名字* @param sheetName sheet名字* @param writeHandler 自定义策略(可扩展多个)* @param <T> T*/<T> void exportExcelWithHandler(List<T> exportData, HttpServletResponse response, Class<T> tClass, String fileName, String sheetName, WriteHandler writeHandler);/*** 导出excel方法(动态表头-动态数据) 携带自定义handler* @param response HttpServletResponse* @param head 表头* @param data 数据* @param fileName 文件名字* @param sheetName sheet名字* @param writeHandler 自定义策略(可扩展多个)* @param <T> T*/<T> void exportExcelWithDynamicsHead(HttpServletResponse response, List<List<String>> head, List<List<Object>> data,String fileName, String sheetName, WriteHandler writeHandler);
}
3.4:通用服务层API实现类
import com.alibaba.excel.EasyExcelFactory;
import com.alibaba.excel.write.handler.WriteHandler;
import com.galaplat.marketing.oas.easyexcel.IEasyExcelService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;import javax.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.util.List;/*** @author c* Description: 文件excel处理方法* date: 2024-07-26 10:10:10*/
@Service
@Slf4j
public class EasyExcelServiceImpl implements IEasyExcelService {private static final String ENCODING_UTF_8 = "UTF-8";private static final String FILE_END = ".xlsx";private static final String CONTENT_DISPOSITION = "Content-Disposition";private static final String CONTENT_DISPOSITION_VALUE = "attachment;filename=";private static final String ACCESS_CONTROL_EXPOSE_HEADERS = "Access-Control-Expose-Headers";private static final String CONTENT_TYPE = "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet";/*** 本地转:response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + fileNameEncoder + ".xlsx");* @param exportData 需要导出的数据* @param response   response* @param tClass     导出excel的字段实体类* @param fileName   文件名字* @param sheetName  sheet名字* @param <T> T*/@Overridepublic <T> void exportExcel(List<T> exportData, HttpServletResponse response, Class<T> tClass, String fileName, String sheetName){// 使用swagger 会导致各种问题,直接用浏览器或者用postmanresponse.setContentType(CONTENT_TYPE);response.setCharacterEncoding(ENCODING_UTF_8);try{// fileName encoderString fileNameEncoder = URLEncoder.encode(fileName, ENCODING_UTF_8).replaceAll("\\+", "%20");response.setHeader(CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE + fileNameEncoder + FILE_END);response.setHeader(ACCESS_CONTROL_EXPOSE_HEADERS, CONTENT_DISPOSITION);// write to excelEasyExcelFactory.write(response.getOutputStream(), tClass).autoCloseStream(Boolean.FALSE).sheet(sheetName).doWrite(exportData);}catch (Exception e){log.error("EasyExcelServiceImpl->exportExcel error, message is :{}", e.getMessage());}}@Overridepublic <T> void exportExcelWithHandler(List<T> exportData, HttpServletResponse response, Class<T> tClass,String fileName, String sheetName, WriteHandler writeHandler){// 使用swagger 会导致各种问题,直接用浏览器或者用postmanresponse.setContentType(CONTENT_TYPE);response.setCharacterEncoding(ENCODING_UTF_8);try{// fileName encoderString fileNameEncoder = URLEncoder.encode(fileName, ENCODING_UTF_8).replaceAll("\\+", "%20");response.setHeader(CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE + fileNameEncoder + FILE_END);response.setHeader(ACCESS_CONTROL_EXPOSE_HEADERS, CONTENT_DISPOSITION);// write to excelEasyExcelFactory.write(response.getOutputStream(), tClass).autoCloseStream(Boolean.FALSE)// 自定义策略(支持扩展多个).registerWriteHandler(writeHandler).sheet(sheetName).doWrite(exportData);}catch (Exception e){log.error("EasyExcelServiceImpl->exportExcel error, message is :{}", e.getMessage());}}@Overridepublic <T> void exportExcelWithDynamicsHead(HttpServletResponse response, List<List<String>> head, List<List<Object>> data,String fileName, String sheetName, WriteHandler writeHandler){// 使用swagger 会导致各种问题,直接用浏览器或者用postmanresponse.setContentType(CONTENT_TYPE);response.setCharacterEncoding(ENCODING_UTF_8);try {// fileName encoderString fileNameEncoder = URLEncoder.encode(fileName, ENCODING_UTF_8).replaceAll("\\+", "%20");response.setHeader(CONTENT_DISPOSITION, CONTENT_DISPOSITION_VALUE + fileNameEncoder + FILE_END);response.setHeader(ACCESS_CONTROL_EXPOSE_HEADERS, CONTENT_DISPOSITION);// write to excelEasyExcelFactory.write(response.getOutputStream()).head(head).sheet(sheetName)// handle.registerWriteHandler(writeHandler).doWrite(data);} catch (Exception e) {log.error("EasyExcelServiceImpl->exportExcelWithHandlerAndHead error, message is :{}", e.getMessage());}}}
3.5:服务Demo查询参数DemoExportParam
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;import java.util.List;@Data
public class DemoExportParam {@ApiModelProperty(value = "参数1")private String param1;@ApiModelProperty(value = "参数1")private String param2;@ApiModelProperty(value = "动态可选择参数")private List<String> choiceParam;}

 注意:参数DemoExportParam 中的choiceParam是可以多个的选项,本文中的动态表头也是根据它来实现动态表头的,支持扩展(比如根据查询数据中某个字段来设置,具体可以参考下面的实现代码)

3.6:服务Demo方法实现层

       注意:其中IDemoService 是自己的服务方法,可以自行修改,只用来获取数据

/*** Demo Export Service Impl* author: c* date: 2024-8-15 16:46:08*/
@Service
@Slf4j
public class DemoExportServiceImpl {private static final String FILE_NAME_PRODUCT_DETAIL = "测试动态表头";private final IDemoService service;private final IEasyExcelService excelService;public DemoExportServiceImpl(IDemoService service, IEasyExcelService excelService) {this.service = service;this.excelService = excelService;}public void export(HttpServletResponse response, DemoExportParam param) throws BaseException {// 根据param获取查询到的参数List<DemoDataVO> pageInfoList =  service.listAllData(param);// export with dynamics headexcelService.exportExcelWithDynamicsHead(response, head(param), getData(pageInfoList, param),FILE_NAME_PRODUCT_DETAIL, FILE_NAME_PRODUCT_DETAIL, new FreezeRowColHandler(FreezeRowColConstant.PRODUCT_DETAIL));}public List<List<Object>> getData(List<DemoDataVO> detailList, DemoExportParam param){if (CollectionUtils.isEmpty(detailList)){return new ArrayList<>();}// 查询的动态参数List<String> choiceParam = param.getChoiceParam();return detailList.stream().map(c -> {List<Object> objectList = new LinkedList<>();objectList.add(c.getParamData1());// 设置动态表头的数据this.setChoiceParamValue(objectList, c, choiceParam);objectList.add(c.getParamData2());return objectList;}).collect(Collectors.toList());}private void setChoiceParamValue(List<Object> objectList, DemoDataVO vo, List<String> choiceParams){List<String> paramData = vo.getChoiceParamData();if (CollectionUtils.isEmpty(paramData) || CollectionUtils.isEmpty(choiceParams)){return;}// 转成mapMap<String, String> paramDataMap = paramData.stream().collect(Collectors.toMap(Function.identity(), Function.identity()));for (String choiceData : choiceParams) {// 获取对应的值String matchingValue = paramDataMap.get(choiceData);// 添加 对应的值 到 objectListif (StringUtils.isNotBlank(matchingValue)) {objectList.add(matchingValue);} else {objectList.add("");}}}private List<List<String>> head(DemoExportParam param) {List<List<String>> headList = new ArrayList<>();addHeadItem(headList, "参数1");// 动态表头 此处是根据参数中的动态参数设置,选择多少参数就动态加多少表头 其它同理// 这里也可以自定义:比如 根据查询的数据量设置等List<String> choiceParam = param.getChoiceParam();if (!CollectionUtils.isEmpty(choiceParam)){for (String choice : choiceParam) {addHeadItem(headList, "动态头" + "-" + choice);}}addHeadItem(headList, "参数2");// .......其他表头return headList;}private static void addHeadItem(List<List<String>> headList, String value) {List<String> item = new ArrayList<>();item.add(value);headList.add(item);}}

四、总结

        本文主要通过EasyExcel实现动态表头,扩展性还可以,提供的是基本实现,方便自行研究,本文所在栏目有多个EasyExcel实现可以自行查看,如有其它问题或者好的方法,可直接留言或私信,欢迎指正。

   👍如果对你有帮助,给博主一个免费的点赞以示鼓励
欢迎各位🔎点赞👍评论收藏⭐️

http://www.yayakq.cn/news/634574/

相关文章:

  • 去哪网网站设计风格企业做定制网站的好处
  • 网站怎么做域名实名认证在线识图
  • 区域文化网站建设方案天津网站建设索王道下拉
  • 迈网科技 官方网站wordpress前台发文积分
  • 在线手机网站制作网站设计科技有限公司
  • 创建网站费用湖北城乡住房建设厅网站
  • 商丘旅游网站的建设马云做中国最大的网站
  • 廊坊网站建设费用烟台网站制作网站
  • 企业营销型网站建设的可行性分析深圳建设网站速成班
  • 常州网站建设教程零售app开发公司
  • 汉中专业网站建设开发大牌装修公司
  • 做包装盒子的厂家哪个网站自己做的网站怎么放上网
  • 站长之家查询的网址广东网站备案多长时间
  • 关于一学一做的短视频网站网站建设准备
  • 网站地图做计划任务盐城网站开发市场
  • 三位数的域名网站好的网站或网页
  • 精品课程网站的设计与建设要求东莞网站建设牛魔网a
  • 新邱建设网站坪山手机网站建设
  • 网站效果图用什么做区块链开发技术
  • wordpress 最弱网站怎么优化seo
  • 海淀区做网站厂家网站建设炎陵
  • 建设自己网站的流程陕西商城网站建设
  • 网站如何链接备案系统广东省建设厅三库一平台
  • 库尔勒西部建设网站网页制作与设计答案
  • 广告网站建设制作设计商丘网站开发公司
  • site 危险网站网站设计不同的原因
  • 有没有免费的源码网站wordpress 广告插件下载
  • 简单网站建设合同汕头高端模板建站
  • 我市强化属地网站建设app制作成本
  • 生成静态页面网站源码制作移动端网页