如何使用FTP中的模板文件和EasyPOI来导出Excle?

本文介绍如何使用EasyPOI从FTP服务器下载模板并导出Excel文件。通过将模板文件存储在FTP上,避免了项目体积膨胀的问题,并展示了具体的实现步骤。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题描述

因工作需要导出Excel文件,使用技术为EasyPOI,EasyPOI是一个非常好的导出文件工具,官网提供非常详细的使用文档,在项目中使用EasyPOI的模板导出功能,官方提供的示例代码中,模板的路径都是本地,我使用时也是把Excle模板文件放在本地,因为之前需要导出的地方,不是很多,模板文件放在本地也没有太大问题,但是由于现在需求变更,会有大量的模板需要导出,如果放在本地会造成项目容量变大。现在想把导出的模板保存在远程的FTP服务中,EasyPOI读取FTP的中模板文件生成Excle文件。

解决步骤

1、 查找解决方式
上网找了许多相关资料,官网上也没有找到解决方法,意外浏览了一篇文章,文章中提到了一句话,说EasyPOI读取模板文件,只支持读取本地模板文件,换句话来说,我只需要把FTP中的模板文件下载到本地指定路径,然后,就可以读取模板文件。

2、创建测试项目
创建一个SpringBoot项目,POM文件中引入需要的Jar包,如下

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.7.5</version>
</dependency>

<dependency>
    <groupId>cn.afterturn</groupId>
    <artifactId>easypoi-spring-boot-starter</artifactId>
    <version>4.3.0</version>
</dependency>
<dependency>
    <groupId>commons-net</groupId>
    <artifactId>commons-net</artifactId>
    <version>3.6</version>
</dependency>

3、添加一些配置文件

ftp:
  host: 192.168.2.2  # IP
  port: 21  # 端口
  username: root # 用户名
  password: 123456 # 密码
  mode: Passive # ftp模式
  remotePath: /root/export/ # ftp模板路径
  localPath: /Users/simonxue/Developer/Temp/ # 本地模板路径
template:
  employee: employee.xlsx #模板文件

3、 创建一个FTP下载方法,方法返回地址模板全路径名,如下所示

@Value("${ftp.host}")
private String host;
@Value("${ftp.port}")
private Integer port;
@Value("${ftp.username}")
private String username;
@Value("${ftp.password}")
private String password;
@Value("${ftp.mode}")
private String mode;
@Value("${ftp.remotePath}")
private String remotePath;
@Value("${ftp.localPath}")
private String localPath;

/**
    * 拷贝FTP中的文件到本地
    * @param fileName  ftp中的文件名
    * @return
    */
@SneakyThrows
public String localPathName(String fileName) {
    Ftp ftp = new Ftp(host, port, username, password, Charset.defaultCharset());
    ftp.setMode(FtpMode.Passive.name().equals(mode)? FtpMode.Passive: FtpMode.Active);
    String localName = localPath + fileName;
    ftp.download(remotePath, fileName, FileUtil.file(localName));
    ftp.close();
    return localName;
}

4、需要根据模板导出的地方,使用上面的方法,如下

@SneakyThrows
@Override
public void templateTest(HttpServletResponse response) {
    String localPathName = ftpUtil.localPathName(employeeTemplateName);
    response.setCharacterEncoding("utf-8");
    response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");
    response.setHeader("Content-Disposition", "attachment;filename="+ IdUtil.getSnowflake(0,0).nextIdStr()+".xlsx");
    Map<String, Object> resultMap = new HashMap<>();
    List<Employee> employeeList = new ArrayList<>();
    Employee employee = new Employee();
    employee.setJobNumber("0001");
    employee.setUsername("小码农薛尧");
    employee.setPhone("1234567901");
    employee.setEmail("xueyao.me@gmail.com");
    employeeList.add(employee);
    List<Map<String, Object>> maps = employeeList.stream().map(a -> {
        Map<String, Object> map = BeanUtil.beanToMap(a);
        return map;
    }).collect(Collectors.toList());
    resultMap.put("employees", maps);
    // 此处需要指定模板路径
    TemplateExportParams params = new TemplateExportParams(localPathName, "test");
    Workbook workbook = ExcelExportUtil.exportExcel(params, resultMap);
    OutputStream outputStream = response.getOutputStream();
    workbook.write(outputStream);
    outputStream.close();
}

5、运行代码,生成的文件如下

总结

EasyPOI不提供读取远程模板文件,但是我们可以通过其它方法来实现,下次导出Excle有格式样式改变,我们可以直接调整FTP中的模板文件就可以实现,不用重新部署项目。

项目代码已存放在Github上

链接地址

在这里插入图片描述

### 关于 UniApp 框架推荐资源与教程 #### 1. **Uniapp 官方文档** 官方文档是最权威的学习资料之一,涵盖了从基础概念到高级特性的全方位讲解。对于初学者来说,这是了解 UniApp 架构技术细节的最佳起点[^3]。 #### 2. **《Uniapp 从入门到精通:案例分析与最佳实践》** 该文章提供了系统的知识体系,帮助开发者掌握 Uniapp 的基础知识、实际应用以及开发过程中的最佳实践方法。它不仅适合新手快速上手,也能够为有经验的开发者提供深入的技术指导[^1]。 #### 3. **ThorUI-uniapp 开源项目教程** 这是一个专注于 UI 组件库设计实现的教学材料,基于 ThorUI 提供了一系列实用的功能模块。通过学习此开源项目的具体实现方式,可以更好地理解如何高效构建美观且一致的应用界面[^2]。 #### 4. **跨平台开发利器:UniApp 全面解析与实践指南** 这篇文章按照章节形式详细阐述了 UniApp 的各个方面,包括但不限于其工作原理、技术栈介绍、开发环境配置等内容,并附带丰富的实例演示来辅助说明理论知识点。 以下是几个重要的主题摘选: - **核心特性解析**:解释了跨端运行机制、底层架构组成及其主要功能特点。 - **开发实践指南**:给出了具体的页面编写样例代码,展示了不同设备间 API 调用的方法论。 - **性能优化建议**:针对启动时间缩短、图形绘制效率提升等方面提出了可行策略。 ```javascript // 示例代码片段展示条件编译语法 export default { methods: { showPlatform() { console.log(process.env.UNI_PLATFORM); // 输出当前平台名称 #ifdef APP-PLUS console.log('Running on App'); #endif #ifdef H5 console.log('Running on Web'); #endif } } } ``` #### 5. **其他补充资源** 除了上述提到的内容外,还有许多在线课程视频可供选择,比如 Bilibili 上的一些免费系列讲座;另外 GitHub GitCode 平台上也有不少优质的社区贡献作品值得借鉴研究。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

薛尧笔记

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值