Java: exportación de Excel con HSSFWorkbook

Empresa: seleccione el campo de archivo que se va a exportar y luego exporte.
La tabla de valores del campo del archivo de la base de datos es: el valor del campo del archivo del ID del archivo de identificación del usuario de la información
ya tiene el método para obtener información del archivo: getFieldValueList (List <Integer> cardFieldIds, Integer userId), identificación del campo del archivo entrante e información del usuario para exportar Si los valores correspondientes están todos vacíos, se devuelve el valor predeterminado establecido.

Imagen del efecto:
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Inserte la descripción de la imagen aquí
Primero obtenga el campo exportado cardFieldIds (cadenas separadas por comas, como 1,2,3) del extremo frontal,
luego obtenga el valor correspondiente al usuario de información y el campo de la base de datos, y
finalmente exporte los datos con HSSFWorkbook.

 @ApiOperation(value = "导出信息数据字段信息", notes = "导出信息数据字段信息")
    @GetMapping("/export")
    @RequiresPermissions("archive:userCardExport:export")
    @ResponseBody
    public void export(String cardFieldIds, HttpServletResponse response) throws Exception {
        List<UserFieldVO> list = new ArrayList<>();
        List<Integer> cardFieldIdList = Convert.toListIntArray(cardFieldIds);
        List<TsysUser> archiveUsers = userCardController.listArchiveUsers().getData().getRows();

        for (TsysUser user : archiveUsers) {
            //用户-字段&值
            UserFieldVO userFieldVO = new UserFieldVO();
            userFieldVO.setUser(user);
            //字段-值集合
            Map<String, Object> map = userCardController.getFieldValueList(cardFieldIdList, user.getId());

            List<FieldValue> fieldValueList = (List<FieldValue>) map.get("fieldValueList");

            //判断字段值是否全为空(即默认值)
            boolean b = (boolean) map.get("ifAllNull");
            if (b) {
                continue;
            }

            //替换图片&附件值
            for (FieldValue fieldValue : fieldValueList) {
                if (fieldValue.getField().getFieldType().equals("附件")) {
                    fieldValue.setFieldValue("附件不支持Excel导出");
                } else if (fieldValue.getField().getFieldType().equals("图片")) {
                    fieldValue.setFieldValue("图片不支持Excel导出");
                }
                continue;
            }
            userFieldVO.setFieldValueList(fieldValueList);
            list.add(userFieldVO);
        }
		
        ExcelUtils.listToExcelByIds(list, "信息数据导出.xls", 6200, response);
    }
 public static void listToExcelByIds(List<UserFieldVO> list, String fileName, int colWidth, HttpServletResponse response) {
        try {
            response.setContentType("application/octect-stream"); // 下载文件能正常显示中文
            fileName = URLEncoder.encode(fileName, "UTF-8");
            response.addHeader("Content-Disposition", "attachment;filename=" + fileName);
            OutputStream out = response.getOutputStream();

            if (list.size() == 0 || list == null) {
                Map<String, String> fields = new LinkedHashMap<>();
                fields.put("message", "导出档案信息为空!");
                ExcelUtils.ListtoExecl(null, out, fields);
                out.flush();
                out.close();
            } else {
                //  创建一个工作簿
                HSSFWorkbook workbook = new HSSFWorkbook();
                //  创建一个工作表
                HSSFSheet sheet = workbook.createSheet();
                int colSize = list.get(0).getFieldValueList().size();
                for (int j = 0; j <= colSize; j++) {
                    // 调整每一列宽度
                    sheet.autoSizeColumn((short) j);
                    // 解决自动设置列宽中文失效的问题
                    sheet.setColumnWidth(j, colWidth);
                }

                //  创建标题(第一行)
                HSSFRow title = sheet.createRow(0);
                for (int j = 0; j <= colSize; j++) {
                    HSSFCell cell = title.createCell(j);

                    //设置样式
                    HSSFCellStyle style = workbook.createCellStyle();
                    HSSFFont font = workbook.createFont();
                    font.setFontName("宋体");
                    font.setFontHeightInPoints((short) 12);// 字体大小
                    style.setFont(font); //设置字体
                    cell.setCellStyle(style);

                    //设置值
                    if (j == 0) {
                        cell.setCellValue("信息用户");
                        continue;
                    }
                    cell.setCellValue(list.get(0).getFieldValueList().get((j - 1)).getField().getFieldName());
                }

                //  创建内容(第二行开始)
                for (int i = 1; i <= list.size(); i++) {
                    HSSFRow row = sheet.createRow(i);
                    for (int j = 0; j <= colSize; j++) {
                        HSSFCell cell = row.createCell(j);
                        if (j == 0) {
                            cell.setCellValue(list.get((i - 1)).getUser().getUsername());
                            continue;
                        }
                        cell.setCellValue(list.get((i - 1)).getFieldValueList().get((j - 1)).getFieldValue());
                    }
                }
                // 将创建好的数据写入输出流
                workbook.write(out);
                // 关闭workbook
                workbook.close();
                out.flush();
                out.close();
            }
        } catch (Exception e) {
            logger.info(e.toString());
        }
    }

Lo anterior es la lógica principal del fondo.

Cómo realizar el front-end "al verificar el campo, determinar si existe el mismo campo y, si existe, verificar al mismo tiempo",
primero, vincular el evento de clic al realizar la operación de selección y luego determinar si se debe verificar, si está marcado, el otro valor es el mismo Las casillas de verificación múltiple se marcan al mismo tiempo; si no se marcan, no se marcan al mismo tiempo.

                 <div class="row">
                    <div th:each="field : ${entity['fields']}" class="col-md-3">
                      <label class="checkbox" th:value="${field.id}">
                        <input th:id="${field.id}" th:name="${entity['card'].cardName}" th:value="${field.id}"
                               th:class="styled" type="checkbox" onclick="selectCheck(this)">
                        <label th:for="${field.id}" th:text="${field.fieldName}"></label>
                      </label>
                    </div>
                  </div>
 //点击多选框事件
    function selectCheck(object) {
        let value = $(object).attr('value');
        if ($('input[value="' + value + '"]').get(0).checked) {
            $('input[value="' + value + '"]').prop("checked", true)//将其他相同值的多选框同时勾选
        } else {
            $('input[value="' + value + '"]').prop("checked", false)//同时不勾选
        }
    }

Para la selección completa y la selección inversa, puede ver mi blog: JQuery implementa la casilla de verificación bootstrap Selección completa de CheckBox y selección inversa

El valor de la casilla marcada enviada al fondo. Tenga en cuenta que el valor puede estar duplicado. En este momento, el valor debe repetirse. Vea mi blog: El código es simple: js elimina los caracteres repetidos en la matriz

Después de la deduplicación, una cadena de identificadores separados por comas se envía al fondo, como
window.location.href = window.rootPath + “/ UserCardExportController / export? CardFieldIds =” + ids;

Se han publicado 68 artículos originales · 128 elogios · 80,000 visitas

Supongo que te gusta

Origin blog.csdn.net/qq_39380155/article/details/104976811
Recomendado
Clasificación