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:
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;