SpringBoot интегрирует использование EasyExcel

Java задняя часть

Это 8-й день моего участия в Gengwen Challenge, смотрите подробности мероприятия:Обновить вызов

1. Введение в EasyExcel

EasyExcel — это один из подключаемых модулей poi с открытым исходным кодом от Alibaba. Он в основном решает проблемы сложного использования инфраструктуры poi, сложную работу в режиме синтаксического анализа и простой OOM при большом объеме данных. Он также решает отчет об ошибках. вызвано параллелизмом POI. Основное решение: загрузка путем распаковки файла, загрузка построчно и отбрасывание неважных данных, таких как шрифты стилей, для уменьшения использования памяти.

Преимущества EasyExcel

  •     Пользовательские действия с комментариями.
  •     Простой ввод и вывод, обеспечивающий интерфейс для процесса ввода и вывода
  •     В определенной степени поддерживает гибкие операции, такие как слияние ячеек

2. Общие примечания

  • @ExcelPropertyУказывает столбец в Excel, которому соответствует текущее поле. Вы можете сопоставлять по имени или индексу. Можно конечно и не писать, по умолчанию первое поле index=0 и так далее. Будьте осторожны, либо не пишите все, либо используйте все индексы, либо все используйте имена для соответствия. Никогда не смешивайте эти три, если вы не очень хорошо знаете, как они отсортированы в исходном коде.
  • @ExcelIgnoreПо умолчанию все поля будут сопоставлены с Excel. При добавлении этой аннотации это поле будет игнорироваться.
  • @DateTimeFormatПреобразование даты с использованием String для получения данных в формате даты excel вызовет эту аннотацию. Значение внутри относится к java.text.SimpleDateFormat
  • @NumberFormatПреобразование чисел с использованием String для получения данных в числовом формате Excel вызовет эту аннотацию. Значение внутри относится к java.text.DecimalFormat
  • @ExcelIgnoreUnannotatedПо умолчанию те, кто не добавляет аннотации ExcelProperty, будут участвовать в чтении и записи, если они будут добавлены, они не будут участвовать.

3. Зависимость


  <!-- easyexcel 主要依赖  这一个基本上就够了-->
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>easyexcel</artifactId>
   <version>2.1.4</version>
</dependency>
    <!-- servlet-api -->
<dependency>
   <groupId>javax.servlet</groupId>
   <artifactId>javax.servlet-api</artifactId>
   <version>4.0.1</version>
   <scope>provided</scope>
</dependency>
<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.47</version>
</dependency>

4. Мониторинг


/**
 * EasyExcel 导入监听
 */
public class ExcelListener extends AnalysisEventListener {
    //可以通过实例获取该值
    private List<Object> datas = new ArrayList<Object>();

    @Override
    public void invoke(Object o, AnalysisContext analysisContext) {
        datas.add(o);//数据存储到list,供批量处理,或后续自己业务逻辑处理。
        doSomething(o);//根据自己业务做处理
    }

    private void doSomething(Object object) {
        //1、入库调用接口
    }

    public List<Object> getDatas() {
        return datas;
    }

    public void setDatas(List<Object> datas) {
        this.datas = datas;
    }

    @Override
    public void doAfterAllAnalysed(AnalysisContext analysisContext) {
        // datas.clear();//解析结束销毁不用的资源
    }
}

Пять, импорт интерфейса Excel

try {
            //获取文件名
            String filename = file.getOriginalFilename();
            //获取文件流
            InputStream inputStream = file.getInputStream();
            //实例化实现了AnalysisEventListener接口的类
            ExcelListener listener = new ExcelListener();
            //传入参数
            ExcelReader excelReader = new ExcelReader(inputStream, ExcelTypeEnum.XLS, null, listener);
            //读取信息
            excelReader.read(new Sheet(1, 0, Test.class));
            //获取数据
            List<Object> list = listener.getDatas();
            if (list.size() > 1) {
                for (int i = 0; i < list.size(); i++) {
                    Testobj = (Test) list.get(i);
                    JSONObject jo = new JSONObject();
                }
            }
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }

6. Экспорт интерфейса в Excel (ответ HttpServletResponse, запрос HttpServletRequest)


try {
    String filenames = "111111";
    String userAgent = request.getHeader("User-Agent");
    if (userAgent.contains("MSIE") || userAgent.contains("Trident")) {
        filenames = URLEncoder.encode(filenames, "UTF-8");
    } else {
        filenames = new String(filenames.getBytes("UTF-8"), "ISO-8859-1");
    }
    response.setContentType("application/vnd.ms-exce");
    response.setCharacterEncoding("utf-8");
    response.addHeader("Content-Disposition", "filename=" + filenames + ".xlsx");
    EasyExcel.write(response.getOutputStream(), Test.class).sheet("sheet").doWrite(testList);
} catch (Exception e) {
}

Семь, местный импорт, местный экспорт

List<Test> testList = new ArrayList<>();
try {
    String strUrl = "C:\\Users\\Administrator\\Desktop\\json.xlsx";
    File multipartFile = new File(strUrl);
    InputStream inputStream = new FileInputStream(multipartFile);
    //实例化实现了AnalysisEventListener接口的类
    ExcelListener listener = new ExcelListener();
    //传入参数
    ExcelReader excelReader = new ExcelReader(inputStream, ExcelTypeEnum.XLS, null, listener);
    //读取信息
    excelReader.read(new Sheet(1, 0, Test.class));
    //获取数据
    List<Object> list = listener.getDatas();
    if (list.size() > 1) {
        for (int i = 0; i < list.size(); i++) {
            Testobj = (Test) list.get(i);
        }
    }
} catch (Exception e) {
    System.out.println(e.getMessage());
}
try {
    String strUrl = "C:\\Users\\Administrator\\Desktop\\json"+System.currentTimeMillis()+".xlsx";
    EasyExcel.write(strUrl,Test.class).sheet("sheet").doWrite(testList);
} catch (Exception e) {
}

   Вышеизложенное является основным процессом использования EasyExcel. Добро пожаловать, чтобы поставить лайк и подписаться.