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

最新域名网站贵州公司网站建设

最新域名网站,贵州公司网站建设,坪山附近公司做网站建设哪家技术好,高新手机网站建设价格背景 有这样一个场景:前端下载Excel模板,进行数据导入,这个下载模板过程需要经过后端接口去数据库查询数据进行某些列的下拉数据填充,下拉填充的数据过程中会出现错误String literals in formulas can’t be bigger than 255 cha…

背景

有这样一个场景:前端下载Excel模板,进行数据导入,这个下载模板过程需要经过后端接口去数据库查询数据进行某些列的下拉数据填充,下拉填充的数据过程中会出现错误String literals in formulas can’t be bigger than 255 characters ASCII,超过字符限制。
那么,如何解决?

解决方案

引入隐藏区域方式,比如 可以创建一个隐藏Sheet专门存储该下拉填充数据,需要使用到的地方进行引用该Sheet区域范围内容。

实现过程

下载接口
@ApiOperation(value = "下载EXCEL文件模板", produces = MediaType.APPLICATION_OCTET_STREAM_VALUE)@GetMapping("/download/{bizType}")public void downloadExcel(HttpServletResponse response, @PathVariable("bizType") String bizType) throws IOException {if (Arrays.stream(AliYunOssBizTypeEnum.values()).noneMatch(x -> x.getCode().equals(bizType))) {throw new RuntimeException("类型有误!");}String fileName = bizType + ".xls";InputStream inputStream = aliYunOssService.download("template/" + fileName);if (inputStream == null) {throw new RuntimeException("获取阿里云文件模板失败,请检查是否上传到阿里云OSS");}HSSFWorkbook wb = new HSSFWorkbook(inputStream);Sheet sheet = wb.getSheetAt(0);ExcelAbstractHandler handler = ExcelHandlerFactory.getHandler(bizType);if (Objects.nonNull(handler)) {// 3. 创建隐藏工作表存储选项Sheet hiddenSheet = wb.createSheet("HiddenSheet");wb.setSheetHidden(wb.getSheetIndex(hiddenSheet), true); // 隐藏工作表handler.handle(hiddenSheet, sheet, bizType);}ServletOutputStream output = response.getOutputStream();response.setContentType("application/vnd.ms-excel");String desc = Arrays.stream(AliYunOssBizTypeEnum.values()).filter(x -> x.getCode().equals(bizType)).findFirst().get().getDesc();fileName = URLEncoder.encode(desc, "UTF-8");response.setHeader("Content-Disposition", "attachment;filename=" + fileName);wb.write(output);output.flush();output.close();wb.close();}
抽象处理器
public abstract class ExcelAbstractHandler {public abstract void handle(Sheet hiddenSheet, Sheet sheet, String bizType);protected void buildDropdownData(Sheet mainSheet, List<String> list, int col, String referenceRange) {if (CollectionUtil.isEmpty(list)) {return;}DataValidationHelper dvHelper = mainSheet.getDataValidationHelper();DataValidationConstraint dvConstraint = dvHelper.createFormulaListConstraint(referenceRange);CellRangeAddressList addressList = new CellRangeAddressList(1, 2000, col, col);DataValidation validation = dvHelper.createValidation(dvConstraint, addressList);mainSheet.addValidationData(validation);}
}
处理工厂类

public class ExcelHandlerFactory {private static final Map<String, ExcelAbstractHandler> handlerMap = new ConcurrentHashMap<>();public static ExcelAbstractHandler getHandler(String type) {return handlerMap.get(type);}public static void register(String type, ExcelAbstractHandler handler) {Assert.notNull(type, "type can't be null");handlerMap.put(type, handler);}
}
产品标准价格模板
@Component
@Slf4j
@RequiredArgsConstructor
public class ExcelProductPlatformPriceHandler extends ExcelAbstractHandler implements InitializingBean {private final BusinessBaseCountryMapper businessBaseCountryMapper;private final BusinessBaseShopPlatformMapper businessBaseShopPlatformMapper;@Overridepublic void afterPropertiesSet() throws Exception {ExcelHandlerFactory.register(AliYunOssBizTypeEnum.PRODUCT_PLATFORM_PRICE.getCode(), this);}@Overridepublic void handle(Sheet hiddenSheet, Sheet sheet, String bizType) {// 1.平台数据List<BusinessBaseShopPlatform> platforms = businessBaseShopPlatformMapper.selectList(Wrappers.lambdaQuery());List<String> platformList = platforms.stream().map(BusinessBaseShopPlatform::getPlatformName).collect(Collectors.toList());//   写入选项到隐藏工作表(逐行填充)for (int i = 0; i < platformList.size(); i++) {Row row = hiddenSheet.createRow(i);Cell cell = row.createCell(0);cell.setCellValue(platformList.get(i));}//   定义引用区域(例如:Hidden!A1:A100)String referenceRange = hiddenSheet.getSheetName() + "!$A$1:$A$" + platformList.size();buildDropdownData( sheet, platformList, 1, referenceRange);// 2.国家数据List<BusinessBaseCountry> countries = businessBaseCountryMapper.selectList(Wrappers.lambdaQuery());List<String> countryList = countries.stream().map(BusinessBaseCountry::getCountryName).collect(Collectors.toList());//  写入选项到隐藏工作表(逐行填充)int preCount = platformList.size();for (int i = preCount; i < (preCount + countryList.size()); i++) {Row row = hiddenSheet.createRow(i);Cell cell = row.createCell(0);cell.setCellValue(countryList.get(i - preCount));}//  定义引用区域(例如:Hidden!A1:A100)referenceRange = hiddenSheet.getSheetName() + "!$A$" + (preCount + 1) + ":$A$" + (preCount + countryList.size());buildDropdownData(sheet, countryList, 2 , referenceRange);}
}

最后

以上是一个简单操作下载导出模板并填充数据后下载模板接口,经供参考!

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

相关文章:

  • 网站制作 杭州龙之向导外贸论坛
  • 成都营销型网站建设熊掌号成都优化推广公司
  • 哪些网站开发网站推广到海外怎么做
  • 网站建设案例行情开发公司未售的空置房物业费
  • 重庆制作网站培训2021世界500强企业排名
  • 网站服务器租用注意事项宜昌做网站
  • 分类信息网站营销我想弄个网站
  • 山东省山东省建设厅网站怎么在百度上设置自己的门店
  • 泰安网站营销推广站长之家whois
  • 兰州网站建设程序打字赚钱一单一结app
  • 网站模块如何添加尚品中国多年专注于高端网站建设
  • 在线购物网站建设流程图银川兴庆建设局网站
  • 广东h5网站建设十大社区团购平台有哪些
  • 嵊州市建设银行网站网上自建网站开店
  • 百度抓取网站图片相亲网站建设策划方案
  • 网站建设规划设计公司排名重庆公司章程在哪里打印
  • 建设无障碍网站宿迁网站建设要多少钱
  • 手机怎样建设网站南京网站搜索优化
  • 免费建立自己微网站吗上海做网站设计的公司
  • 怎么样做网站卖东西网站刷收益是怎么做的
  • 闵行区网站建设有什么网站可以接单做兼职的
  • 厦门本地企业网站建设做站群网站会被k吗
  • 如何弄网站排名建设网站网站
  • 自己做的网站转成二维码Tp5即做网站又提供api接口
  • 做网站与不做网站的区别仿牌网站 域名注册
  • TP5企业网站开发教程百度云山东网站建设设计
  • 网站的相关链接怎么做绵阳建设股份有限公司
  • 网站关键词排名分析广告制作协议
  • 福州网站制作哪里好网络营销与网络推广的关系
  • 导航网站开发用户文档科技霸主从新能源车开始