Java ダウンロード Excel テンプレート ファイル

I.はじめに

最近、Excelをインポートする機能を作成しました。要件は次のとおりです。

  1. まずはExcelテンプレートをダウンロードする機能を提供します。
  2. ユーザーはテンプレートをダウンロードした後、アップロードする内容をテンプレート ファイルに入力して Excel にインポートし、ユーザーが入力したデータをデータベースに保存できます。

2. テンプレートをダウンロードする

1. テンプレートをリソース ディレクトリに置き、次のようにテンプレートを保存するための特別なフォルダーを作成してみます。

2. ここでは 2 つの依存関係を使用します。1 つは hutool の最も人気のあるツール クラスで、基本的に easyexcel は Excel のインポートとエクスポートに使用されます。

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.8.18</version>
</dependency>
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.2.1</version>
</dependency>
@GetMapping("/downInChargeOfTemplate")
public void downInChargeOfTemplate(HttpServletResponse response) {
    
    
    downloadService.downInChargeOfTemplate(response);
}
import cn.hutool.core.io.IoUtil;
import org.apache.poi.xssf.usermodel.XSSFWorkbook;
import org.springframework.stereotype.Service;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;

@Service
public class DownloadService {
    
    
    public void downInChargeOfTemplate(HttpServletResponse response) {
    
    
        responseSetting(response, "各分任务负责人导入模板", ".xlsx",
                "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet");

        InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
    
    
            // 读取文件的输入流
            inputStream = Thread.currentThread().getContextClassLoader().getResourceAsStream("templates/各分任务负责人导入模板.xlsx");
            XSSFWorkbook wb = new XSSFWorkbook(inputStream);
            outputStream = response.getOutputStream();
            wb.write(outputStream);
            outputStream.flush();
        } catch (IOException e) {
    
    
            e.printStackTrace();
        } finally {
    
    
            IoUtil.close(inputStream);
            IoUtil.close(outputStream);
        }
    }

    public void responseSetting(HttpServletResponse response, String fileName, String suffix, String contentType) {
    
    
        // 这里URLEncoder.encode可以防止中文乱码 当然和easyexcel没有关系
        String newFileName = null;
        try {
    
    
            newFileName = URLEncoder.encode(fileName, "UTF-8").replaceAll("\\+", "%20");
        } catch (UnsupportedEncodingException e) {
    
    
            e.printStackTrace();
        }
        // 当客户端请求的资源是一个可下载的资源(这里的“可下载”是指浏览器会弹出下载框或者下载界面)时,对这个可下载资源的描述(例如下载框中的文件名称)就是来源于该头域。
        response.setHeader("Content-disposition", "attachment;filename*=utf-8''" + newFileName + suffix);
        // 服务器告诉浏览器它发送的数据属于什么文件类型,也就是响应数据的MIME类型
        response.setContentType(contentType);
        response.setCharacterEncoding("utf-8");
        // 关闭缓存(HTTP/1.1)
        response.setHeader("Cache-Control", "no-store");
        // 关闭缓存(HTTP/1.0)
        response.setHeader("Pragma", "no-cache");
        // 缓存有效时间
        response.setDateHeader("Expires", 0);
    }
}

3. テストインターフェイス

4. 補足知識

ファイルの InputStream 入力ストリームを取得した後、XSSFWorkbook を使用せずに入力ストリームを出力ストリームに書き込むこともでき、ストリーム コピー メソッドを直接使用して、テンプレートのエクスポート機能も完了できます。

ここに画像の説明を挿入

3. Excelインポート

インポート機能については、easyexcel の公式 Web サイトを参照してください: https://easyexcel.opensource.alibaba.com/docs/current/quickstart/read

おすすめ

転載: blog.csdn.net/weixin_43888891/article/details/130108377#comments_27828754