Práctica de archivo de Excel de operación por lotes de Java

Resumen: Este artículo fue publicado originalmente en CSDN por el equipo técnico de Grape City. Indique la fuente de la reimpresión: sitio web oficial de Grape City , Grape City proporciona a los desarrolladores herramientas, soluciones y servicios de desarrollo profesional para empoderar a los desarrolladores.

Prefacio | Antecedentes del problema

En el escenario de operar Excel, generalmente hay algunas operaciones por lotes para Excel. Generalmente hay dos significados de lote:

Operar lotes de archivos de Excel. Como importar varios archivos de Excel y procesar datos, o exportar varios archivos de Excel. En tales escenarios, la operación suele ser muy similar, pero el archivo de Excel debe leerse y escribirse repetidamente. Realice operaciones por lotes en uno o varios. Por ejemplo, para archivos de Excel, reemplace texto en lotes, agregue fórmulas en lotes o agregue estilos en lotes. En tales escenarios, generalmente no hay muchos archivos de Excel que deban operarse, pero las operaciones específicas deben realizarse repetidamente. En este caso, se necesita una API fácil de usar para ayudar.

Entre los componentes de Excel existentes, POI es un componente de uso muy común, pero para los diferentes escenarios mencionados anteriormente, presenta dos tipos de requisitos para los componentes.

El primer tipo de escenario lee o escribe archivos repetidamente y requiere que los componentes estén bien optimizados para la memoria; de lo contrario, es propenso a problemas de desbordamiento de memoria (sin memoria).

El segundo tipo de escenario requiere componentes para proporcionar API fáciles de usar, como reemplazar cadenas, si no hay una API de interfaz para buscar (buscar) o reemplazar (reemplazar). Debe iterar a través de las celdas usted mismo para encontrar el valor.

Aunque los dos requisitos anteriores pueden carecer de POI, hay otros componentes para elegir, como EasyExcel, GcExcel, etc.

A continuación se utiliza GcExcel como ejemplo para enumerar ejemplos de los dos tipos de escenarios anteriores.

¿Qué es GcExcel?

Escenario 1 Importar archivos de Excel en lotes y leer datos en un área específica

Por ejemplo, hay varios archivos de Excel con nombres GUID. Estos archivos de Excel provienen de los datos informados y los contenidos deben resumirse.

Por ejemplo, el contenido del formulario de Excel es el siguiente:

Es necesario obtener los valores de las cuadrículas de B3 a C6, y se puede usar el siguiente código para extraer los datos.

@Test

  public void testImportFormFile() {
    
    

    String folderPath = "path/testFolder"; //使用你的路径

    File folder = new File(folderPath);

    File[] files = folder.listFiles();

    if (files != null) {
    
    

      for (File file: files){
    
    

       if(file.isFile() && file.getName().endsWith(".xlsx")){
    
    

          Workbook wb = new Workbook();

          wb.open(file.getAbsolutePath());

          Object[][] value = (Object[][]) wb.getActiveSheet().getRange("B3:C6").getValue();

          System.out.println(value[0][1]); //小葡萄

          System.out.println(value[1][1]); //20.0

          System.out.println(value[2][1]); //开发部

          System.out.println(value[3][1]); //610123456789012345

           //添加处理数据的逻辑

        }

      }

    }

  }

Obtenga todos los archivos de Excel a través del método listFiles(). Lea cada archivo en un bucle y abra el archivo de Excel a través de GcExcel. Utilice el método getValue() en IRange para leer la cuadrícula en Excel como una matriz bidimensional.

A continuación, la lógica empresarial se puede procesar accediendo a la matriz bidimensional.

Escenario 2 Exportar archivos de Excel en lotes y escribir los datos en una ubicación específica antes de exportar

Continuando con el primer archivo de Excel como ejemplo, cuando ya hay algunos datos en la base de datos, desea escribir y exportar los datos a varios archivos de Excel o exportarlos como un archivo PDF.

Los escenarios reales incluyen, por ejemplo, cuando una empresa paga salarios, necesita emitir un recibo de pago electrónico a cada empleado todos los meses, porque la información del recibo de sueldo de cada empleado es diferente. En este escenario, los datos deben exportarse en lotes como PDF en plural.

@Test
  public void testExportFormFile() {
    
    
    String outPutPath = "E:/testFolder";
    //给valueList初始化数据,替换为从数据库,CSV或者JSON等中获取数据。
    ArrayList<Object[][]> valueList = new ArrayList<Object[][]>();
    for (Object[][] value : valueList) {
    
    
      Workbook wb = new Workbook();
      wb.getActiveSheet().getRange("B3:C6").setValue(value);
      wb.save(outPutPath + UUID.randomUUID().toString() + ".xlsx");
    }
  }

GcExcel puede establecer directamente una matriz bidimensional en un rango y, después de cargar los datos de la base de datos, se puede ordenar en una matriz bidimensional.

Luego configure la matriz bidimensional directamente en la hoja a través de SetValue() de GcExcel, y finalmente guárdela y expórtela a través del método de guardar en el libro de trabajo.

Escenario 3 Abra el archivo de Excel y reemplace las palabras clave en lotes

En este escenario, debe usar el archivo de Excel como plantilla y reemplazar algunas palabras clave personalizadas con datos.

Por ejemplo, si hay un informe estándar, los datos deben completarse. Como el encabezado de la tabla, el nombre, las entradas relacionadas con el informe, los datos y otra información. Es posible convertir el informe en una plantilla y luego dejar el encabezado, el nombre, etc. en blanco, o usar palabras clave como marcadores de posición. Por ejemplo, "%Nombre%" se puede usar como marcador de posición para el nombre y %Nombre% se puede reemplazar al completar los datos.

@Test
    public void testReplaceTemplateFile() {
    
    
        String templateFilePath = "test.xlsx";
        Workbook wb = new Workbook();
        wb.open(templateFilePath);
        IRange usedRange = wb.getActiveSheet().getUsedRange();
        //load data
        ArrayList<Object[]> valueList = new ArrayList<Object[]>();
        for (Object[] value : valueList) {
    
    
            usedRange.replace(value[0],value[1]);
        }
        wb.save("result.xlsx", SaveFileFormat.Xlsx);
    }

Abra el archivo de plantilla a través del libro de trabajo y, después de preparar los datos, reemplace las palabras clave personalizadas directamente a través del método de reemplazo de IRange.

Después del reemplazo, guárdelo como un nuevo Excel.

Para completar datos más avanzados y complejos, GcExcel también tiene una función de plantilla. Después de configurar la plantilla, puede vincular directamente la fuente de datos y GcExcel completará automáticamente los datos en la plantilla.

Escenario 4 Abra el archivo de plantilla de Excel y obtenga resultados de cálculo en lotes

Por ejemplo, hay un archivo de Excel para calcular datos de seguros o de la industria. Debe completar un valor en una posición fija y usar una fórmula en Excel para calcular el resultado.

@Test
  public void testCalcFormulaByTemplateFile() {
    
    
    String templateFilePath = "E:/testFolder/testFormula.xlsx";
    Workbook wb = new Workbook();
    wb.open(templateFilePath);
	 //``获取特定的值,比如以下
    ArrayList<Object[]> valueList = new ArrayList<Object[]>();
    for (Object[] value : valueList) {
    
    
      
       Object A1Value = value[0];
      Object A2Value = value[1];
      Object result = null;
      wb.getActiveSheet().getRange("A1").setValue(A1Value);
      wb.getActiveSheet().getRange("A2").setValue(A2Value);
      result = wb.getActiveSheet().getRange("A3").getValue();
      System.out.println(result);
    }
  }

El cálculo de la fórmula de GcExcel se calcula cuando se obtiene el valor, por lo que no es necesario mostrar y llamar a métodos como calcular, solo necesita preparar los parámetros de entrada y colocarlos en una celda específica en Excel para obtener directamente los resultados del cálculo. de la fórmula. .

Los anteriores son algunos métodos comunes de procesamiento por lotes de Excel. Solo usamos el código de GcExcel Java como ejemplo. La misma idea también se puede implementar usando otros componentes.

Enlace de extensión:

GrapeCity Documents for Excel (componente de Excel del lado del servidor) V3.0 se lanza oficialmente

¡Es tan simple usarlo para desarrollar el sistema "Excel en línea"!

Cómo usar JavaScript para implementar archivos de Excel de importación y exportación front-end

Supongo que te gusta

Origin blog.csdn.net/powertoolsteam/article/details/131539634
Recomendado
Clasificación