Таблицы обработки Java, действительно здорово!

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

Простая и быстрая библиотека обработки форм

Всем привет, я Fish Skin.

Обработка таблиц Excel — это часто встречающееся требование при разработке, например объединение таблиц, фильтрация определенных строк и столбцов в таблице, изменение данных ячеек и т. д.

Сегодня я поделюсь с вами библиотекой инструментов для обработки таблиц на Java, она не требует никаких профессиональных знаний, ее можно использовать быстро и легко~

Некоторые студенты, возможно, сказали, что для обработки таблиц удобнее использовать Python? Использовать Java для Мао?

Конечно, потому что большая часть внутренней разработки на предприятии выполняется на Java! Если вы хотите создать службу, позволяющую пользователям загружать Excel для обработки, очевидно, наиболее удобно использовать Java напрямую~

Easy Excel

Библиотека, которая будет представлена, — Ali Easy Excel, простой и экономящий память проект с открытым исходным кодом для чтения и записи Excel.

Адрес документа:у-у-у-у. yuque.com/easy excel/’s…

Откройте официальный документ напрямую, и вы увидите инструкции по использованию проекта:

官方文档

Во-первых, внедрите Easy Excel в проект (номер версии основан на последнем номере версии в документе):

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>easyexcel</artifactId>
    <version>3.0.5</version>
</dependency>

затем перейдите к документубыстрый стартразделе вы можете увидеть методы чтения и записи табличных данных.

Давайте возьмем в качестве примера фактическое требование и попробуем использовать эту библиотеку.

нужно

Предположим, у нас есть такая таблица Excel:

Если вы хотите обменятьИмя столбеца такжестолбец возрастаприказ, что делать?

читать форму

Первое, что нужно сделать, это прочитать данные в исходной таблице.

Easy Excel предоставляет два способа чтения таблиц:создать объект читатьа такжечтение без создания объекта.

создать объект читать

Если вам известна информация заголовка всей таблицы, например имена столбцов (например, «имя») и типы данных столбцов (например, строки), вы можете создать соответствующий класс для представления метаинформации таблицы в Java.

Например, создайте для приведенной выше таблицыYupiDataкласс, код выглядит следующим образом:

@Data
public class YupiData {
  // 姓名
  private String name;
  // 年龄
  private Integer age;
  // 出生日期
  private Date bornDate;
}

По умолчанию порядок столбцов таблицы связан с порядком атрибутов, например, имя соответствует имени (столбец 0), возраст соответствует возрасту (столбец 1).

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

@Data
public class YupiData {
  // 强制读取下标为 2 的列(第三列)
  @ExcelProperty(index = 2)
  // 指定接受日期的格式
  @DateTimeFormat("yyyy/MM/dd")
  private Date bornDate;
    
  // 用名字去匹配,不能和其他列重复
  @ExcelProperty("年龄")
  private Integer age;
    
  @ExcelProperty("姓名")
  private String name;
}

После определения класса табличных данных можно приступать к чтению.Библиотека очень интимная и предоставляетСинхронизироватьа такжеасинхронныйДва способа чтения.

Синхронизация означает одновременное чтение всех строк в таблице, возврат их в виде списка и последующую обработку их целиком. Так как данные полностью загружаются в память таким образом, толькоПодходит для меньшего количества строк таблицыСлучай. код показывает, как показано ниже:

/**
 * 同步读取
 */
public void synchronousRead() {
  String fileName = "鱼皮的表格.xlsx";
  // 读取到的数据
  List<YupiData> list = EasyExcel.read(fileName)
  	.head(YupiData.class)
    .sheet()
    .doReadSync();
}

Асинхронный режим должен определятьслушатель, каждый раз, когда считывается строка, строка данных должна обрабатываться немедленно. Таким образом, нет необходимости загружать все данные в память, читать построчно, и теоретически их можно отбросить после расчета. код показывает, как показано ниже:

/**
 * 定义监听器
 */ 
public class YupiDataListener 
    implements ReadListener<YupiData> {
  /**
   * 每读一行数据,都会调用一次
   *
   * @param data 一行数据
   * @param context 上下文
   */
  @Override
  public void invoke(YupiData data, AnalysisContext context) {
    // 输出姓名
    System.out.println(data.getName());
  }
}

/**
 * 开始读取
 */
void assynchronousRead() {
  String fileName = "鱼皮的表格.xlsx";
  EasyExcel.read(fileName, YupiData.class,
      new YupiDataListener())
      .sheet()
      .doRead();
}

чтение без создания объекта

Если заранее не ясно, какие столбцы и типы будут у таблицы (например, разрешить пользователям загружать таблицы самостоятельно), можно использоватьчтение без создания объектаспособ, непосредственно использоватьMap<Integer, String>Общий класс для получения:

List<Map<Integer, String>> list = EasyExcel
    .read(fileName)
    .sheet()
    .doReadSync();
// Map 的 key 为列下标,value 为单元格的值
for (Map<Integer, String> data : list) {
	... 
}

Конечно, этот метод чтения также поддерживает как синхронный, так и асинхронный режим, и вы можете выбрать метод в соответствии с вашими потребностями, гибкий пакет!

написать в форму

После того, как вы научитесь читать, вам будет легче записывать в таблицу.Все еще необходимо сначала определить класс для представления метаинформации (имя столбца, тип данных столбца и т. д.), которая будет записана в таблицу.

Например, чтобы выполнить требование об изменении порядка столбцов таблицы, при определении класса данных таблицы просто измените порядок атрибутов возраста и имени:

@Data
public class YupiWriteData {
  // 年龄 ↑
  private Integer age;
  // 姓名 ↓
  private String name;
  // 出生日期
  private Date bornDate;
}

Затем выполните метод записи Easy Excel, и все готово.Код выглядит следующим образом:

void doWrite() {
  // 已读取和处理后的数据列表
  List<YupiWriteData> dataList = xxx;
  String fileName = "result.xlsx";
  EasyExcel.write(fileName, YupiWriteData.class)
      .sheet("工作表1")
      .doWrite(dataList);
}

Получите это, не так ли просто!

В дополнение к этой библиотеке существует множество библиотек для работы с Excel в Java, таких как Apache POI, Hutool и т. д. Вы можете попробовать их. Но лично мне больше нравится Easy Excel.


Хорошо, не правда ли, это очень просто, если вам интересно, напишите программу обработки таблиц сами~

Если вы узнаете это, помогите рыбьей шкуреотличныйпение, спасибо!