En el desarrollo de formularios, ¿cómo elegir la herramienta de procesamiento que más le convenga?

introducción

GcExcel y EasyExcel son excelentes bibliotecas de procesamiento de Excel de alto rendimiento. GcExcel fue desarrollado por Grape City Company y puede usarse en plataformas Java y .Net, mientras que EasyExcel es una biblioteca de procesamiento de Excel de código abierto basada en Java desarrollada por Alibaba. En este artículo, compararemos GcExcel y EasyExcel para ayudar a los lectores a tomar una decisión acertada en escenarios reales.

La diferencia entre EasyExcel y GcExcel

Cada producto tiene su intención de diseño original detrás. El objetivo principal de EasyExcel es resolver algunos problemas que encuentra POI al leer y escribir archivos de Excel, como el uso excesivo de memoria, errores frecuentes de OOM (memoria insuficiente) y rendimiento insuficiente para fácilmente Limitaciones en el manejo de archivos grandes. Por lo tanto, EasyExcel tiene como objetivo proporcionar una solución de lectura y escritura de Excel más eficiente y estable para satisfacer las necesidades de procesamiento de archivos grandes.

A diferencia de EasyExcel, el diseño de API de GcExcel tiene intenciones originales únicas. EasyExcel se centra en leer y escribir archivos de Excel de forma rápida y sencilla, mientras que GcExcel se centra más en mejorar el rendimiento de lectura y escritura, el rendimiento de cálculo de fórmulas y la compatibilidad con funciones avanzadas de Excel, como gráficos, tablas dinámicas, validación de datos, formato condicional, etc.

Para ir más allá de las funciones de Excel, GcExcel invierte activamente en mejorar el rendimiento y proporciona a los desarrolladores una rica variedad de funciones avanzadas de Excel. Ya sea análisis de datos, producción de informes o cálculos de fórmulas complejas, GcExcel ha demostrado su valor único con un rendimiento y funciones excelentes.

Escenarios de aplicación de EasyExcel y GcExcel

Ambas bibliotecas de componentes tienen un rendimiento extremadamente alto debido a las diferencias en los problemas que resuelven, pero aplican sus beneficios de rendimiento a diferentes escenarios.

Para EasyExcel, Excel es más bien un método de transporte de datos. Cuando los usuarios necesitan lidiar con alta concurrencia y altos requisitos de memoria, EasyExcel muestra un rendimiento más adecuado.

Sin embargo, después de años de desarrollo por parte de Microsoft, Excel ha derivado en muchos escenarios de aplicación diferentes, como cálculo de fórmulas, llenado de datos, impresión e informes, etc. En estos escenarios, generalmente se requiere que la biblioteca de componentes cubra suficientes funciones de Excel. Por tanto, en estos casos, GcExcel es más adecuado.

Por ejemplo, industrias como las de fondos, seguros, finanzas e impuestos suelen requerir cálculos con fórmulas de Excel. Al utilizar GcExcel, se puede implementar una solución de cálculo de fórmulas automatizada del lado del servidor.

Además, en campos como las pruebas metrológicas y la gestión de laboratorios, existe una gran demanda de funciones de exportación. Funciones como la exportación automatizada de PDF y el envío programado se pueden realizar a través de GcExcel.

Al mismo tiempo, Grape City también proporciona un producto de biblioteca de componentes de Excel de front-end puro, SpreadJS. Si el escenario requiere colaboración front-end y back-end para el procesamiento de Excel, GcExcel es obviamente más apropiado.

En resumen, de acuerdo con los diferentes escenarios de demanda, elegir la biblioteca de componentes adecuada puede aprovechar al máximo sus ventajas de rendimiento y proporcionar mejores soluciones de procesamiento de Excel.

Estilo de diseño API de EasyExcel y GcExcel

La API de EasyExcel adopta lectura y escritura en tiempo real y métodos basados ​​en eventos. Este concepto de diseño permite lograr el equilibrio entre rendimiento y memoria al operar Excel. Al mismo tiempo, su concepto de diseño basado en anotaciones desacopla la lógica del código de los archivos de Excel, de modo que los desarrolladores sólo necesitan pensar mejor en el diseño del modelo sin tener que preocuparse por las tediosas operaciones de Excel. En resumen, la API de EasyExcel proporciona una solución de operación de Excel eficiente y de alto rendimiento, lo que le permite centrarse más en la implementación de la lógica empresarial.

// 摘自EasyExcel官方文档

 // 有个很重要的点 DemoDataListener 不能被spring管理,要每次读取excel都要new,然后里面用到spring可以构造方法传进去
 @Slf4j
 public class DemoDataListener implements ReadListener<DemoData> {

   /**
   * 每隔5条存储数据库,实际使用中可以100条,然后清理list ,方便内存回收
   */
   private static final int BATCH_COUNT = 100;
   /**
   * 缓存的数据
   */
   private List<DemoData> cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
   /**
   * 假设这个是一个DAO,当然有业务逻辑这个也可以是一个service。当然如果不用存储这个对象没用。
   */
   private DemoDAO demoDAO;

   public DemoDataListener() {
     // 这里是demo,所以随便new一个。实际使用如果到了spring,请使用下面的有参构造函数
     demoDAO = new DemoDAO();
   }

   /**
   * 如果使用了spring,请使用这个构造方法。每次创建Listener的时候需要把spring管理的类传进来
   *
   * @param demoDAO
   */
   public DemoDataListener(DemoDAO demoDAO) {
     this.demoDAO = demoDAO;
   }

   /**
   \* 这个每一条数据解析都会来调用
   *
   * @param data  one row value. Is is same as {@link AnalysisContext#readRowHolder()}
   * @param context
   */
   @Override
   public void invoke(DemoData data, AnalysisContext context) {
     log.info("解析到一条数据:{}", JSON.toJSONString(data));
     cachedDataList.add(data);
     // 达到BATCH_COUNT了,需要去存储一次数据库,防止数据几万条数据在内存,容易OOM
     if (cachedDataList.size() >= BATCH_COUNT) {
       saveData();
       // 存储完成清理 list
       cachedDataList = ListUtils.newArrayListWithExpectedSize(BATCH_COUNT);
     }
   }

   /**
   * 所有数据解析完成了 都会被调用
   *
   * @param context
   */
   @Override
   public void doAfterAllAnalysed(AnalysisContext context) {
     // 这里也要保存数据,确保最后遗留的数据也存储到数据库
     saveData();
     log.info("所有数据解析完成!");
   }

   /**
   * 加上存储数据库
   */
   private void saveData() {
     log.info("{}条数据,开始存储数据库!", cachedDataList.size());
     demoDAO.save(cachedDataList);
     log.info("存储数据库成功!");
   }
 }

La API de GcExcel está modelada en Excel y utiliza conceptos como libro de trabajo, hoja de trabajo y rango, de modo que toda la biblioteca de componentes puede admitir perfectamente varias funciones de Excel. Si está muy familiarizado con Excel, se sentirá muy amigable y natural al usar GcExcel.

Estos dos métodos de diseño son como dos productos que resuelven diferentes escenarios y son adecuados para desarrolladores de diferentes estilos.

Para los desarrolladores que buscan lo último en tecnología, la flexibilidad de EasyExcel es muy adecuada. Para aquellos desarrolladores pragmáticos que prestan más atención a resolver rápidamente las necesidades comerciales, GcExcel proporciona una variedad de opciones de API y es altamente compatible con Excel, lo que puede potenciar eficazmente este escenario.

 Workbook wb = new Workbook();
 IWorksheet sheet1 = wb.getWorksheets().get(0);
 Object[][] values = (Object[][]) sheet1.getRange("A1:Z26").getValue();

por fin

Según la comparación anterior, EasyExcel y GcExcel son adecuados para diferentes situaciones.

Al elegir, puede pensar en diferentes dimensiones y elegir una biblioteca de procesamiento de Excel que sea más adecuada para su propio escenario.

Multado con 200 yuanes y más de 1 millón de yuanes confiscados You Yuxi: La importancia de los documentos chinos de alta calidad El servidor de migración de núcleo duro de Musk Solon para JDK 21, ¡los hilos virtuales son increíbles! ! ! El control de congestión de TCP salva Internet Flutter para OpenHarmony está aquí El período LTS del kernel de Linux se restaurará de 6 años a 2 años Go 1.22 solucionará el error de la variable del bucle for Svelte construyó una "nueva rueda" - runas Google celebra su 25 aniversario
{{o.nombre}}
{{m.nombre}}

Supongo que te gusta

Origin my.oschina.net/powertoolsteam/blog/10114541
Recomendado
Clasificación