archiveManager/src/main/java/com/ruoyi/domain/dto/searSigAnn.java
New file @@ -0,0 +1,12 @@ package com.ruoyi.domain.dto; import lombok.Data; @Data public class searSigAnn { private String[] selectedAnnotations; private String[] selectedSignatures; private Long recordId; private Boolean includeQrCode; } archiveManager/src/main/java/com/ruoyi/service/impl/DocumentMaterialsServiceImpl.java
@@ -473,6 +473,8 @@ newRecord.setFileSize(null); newRecord.setFormat(null); newRecord.setUrl(null); newRecord.setVisible(0); // 添加到中间记录列表 middleRecords.add(newRecord); } ruoyi-admin/src/main/java/com/ruoyi/web/controller/archive/ArchiveRecordsController.java
@@ -2,6 +2,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.List; import javax.servlet.http.HttpServletResponse; @@ -16,11 +17,13 @@ import com.ruoyi.common.utils.poi.ExcelUtilManySheetFour; import com.ruoyi.domain.ArchiveRecords; import com.ruoyi.domain.DocumentMaterials; import com.ruoyi.domain.dto.searSigAnn; import com.ruoyi.domain.vo.*; import com.ruoyi.framework.config.ServerConfig; import com.ruoyi.service.IArchiveRecordsService; import com.ruoyi.service.IDocumentMaterialsService; import com.ruoyi.service.impl.BarcodeService; import com.ruoyi.service.impl.pdfGenerateService; import com.sun.xml.internal.messaging.saaj.util.ByteOutputStream; import org.springframework.security.access.prepost.PreAuthorize; import org.springframework.beans.factory.annotation.Autowired; @@ -51,6 +54,9 @@ private IArchiveRecordsService archiveRecordsService; @Autowired private BarcodeService barcodeService; @Autowired private pdfGenerateService pdfGenerateService; @Autowired private IDocumentMaterialsService iDocumentMaterialsService; @@ -225,23 +231,22 @@ return AjaxResult.success( archiveRecordsService.whether(recordId)); } @PostMapping(value={"/recordFileList/{includeQrCode}/{selectedSignatures}/{selectedAnnotations}", "/recordFileList/{includeQrCode}", "/recordFileList/{includeQrCode}/{selectedSignatures}","/recordFileList/{includeQrCode}/{selectedAnnotations}"}) @PostMapping("/recordFileList") //导出excle public void getSpecialArchiveInfo(HttpServletResponse response, @RequestParam("recordId")Long recordId, @PathVariable(name = "includeQrCode",required = false) boolean includeQrCode, @PathVariable(name = "selectedSignatures",required = false) int[] selectedSignatures, @PathVariable(name = "selectedAnnotations",required = false) int[] selectedAnnotations) throws IOException { public void getSpecialArchiveInfo(HttpServletResponse response, @RequestBody searSigAnn searSigAnn) throws IOException { System.out.println("uuuuuuuuuuuuuuuuuuusssss88888888888888"); // System.out.println(selectedSignatures[0]); // System.out.println(selectedAnnotations[0]); System.out.println(includeQrCode); //二维码是否生成 //System.out.println(includeQrCode); //生成二维码 String code = "2024050000029250"; byte [] bt = barcodeService.generateBarcodeImage(code); // System.out.println(Arrays.toString(selectedSignatures)); //签名选择 String [] sig = {"业务科室移交人:","审批科移交人:","档案整理公司:"}; List<String> arrLis = new ArrayList<>(); if(selectedSignatures!=null){ for(int si: selectedSignatures) if(searSigAnn.getSelectedSignatures()!=null){ for(String si: searSigAnn.getSelectedSignatures()) { arrLis.add(sig[si]); arrLis.add(sig[Integer.parseInt(si)]); } } //注选择 @@ -251,15 +256,15 @@ "保管期限:30年或永久", "页号按照正式录入页码为准"}; List<String> arrAn = new ArrayList<>(); if(selectedAnnotations!=null) { for (int ar : selectedAnnotations) { arrAn.add(ann[ar]); if(searSigAnn.getSelectedAnnotations()!=null) { for (String ar : searSigAnn.getSelectedAnnotations()) { arrAn.add(ann[Integer.parseInt(ar)]); } } List<DocumentMaterialsFileList> arsi = new ArrayList<>(); // DocumentMaterials documentMaterials = new DocumentMaterials(); // documentMaterials.setRecordId(recordId); List<DocumentMaterialsFileList> lst = iDocumentMaterialsService.selectDocumentMaterialsFileList(recordId); List<DocumentMaterialsFileList> lst = iDocumentMaterialsService.selectDocumentMaterialsFileList(searSigAnn.getRecordId()); @@ -288,6 +293,9 @@ inquiryNumber = arsi.get(0).getInquiryNumber(); caseTitle = arsi.get(0).getCaseTitle(); } util3.exportExcelManySheet(response, mysheet1, includeQrCode,bt, arrLis, arrAn, inquiryNumber, caseTitle); util3.exportExcelManySheet(response, mysheet1, searSigAnn.getIncludeQrCode(), bt, arrLis, arrAn, inquiryNumber, caseTitle); } } ruoyi-admin/src/main/java/com/ruoyi/web/controller/archive/DocumentMaterialsController.java
@@ -68,6 +68,7 @@ import static com.ruoyi.common.core.page.TableSupport.PAGE_NUM; import static com.ruoyi.common.core.page.TableSupport.PAGE_SIZE; import static com.ruoyi.framework.datasource.DynamicDataSourceContextHolder.log; /** * 【文件材料综合信息】Controller @@ -92,6 +93,11 @@ @Autowired private IArchiveRecordsService iArchiveRecordsService; /** * 文件分隔符 */ private static final String FILE_DELIMETER = ","; /** * 判断PageNumber是否连续 */ @@ -179,41 +185,47 @@ @PostMapping("/exportDir") public void exportDir(HttpServletResponse response, DocumentMaterials documentMaterials, @RequestParam(value = "ids", required = false) Long[] ids) { List<DocumentMaterials> list; System.out.println(ids); // 如果提供了ids参数,则根据ids导出指定记录 if (ids != null && ids.length > 0) { list = documentMaterialsService.selectDocumentMaterialsByIds(ids); } else { list = documentMaterialsService.selectDocumentMaterialsList(documentMaterials); } // 根据visible字段筛选,只保留visible为1的记录 List<DocumentMaterials> filteredList = list.stream() .filter(doc -> doc.getVisible() != null && doc.getVisible() == 1 && !Objects.equals(doc.getFileStyle(), "其他材料")) .collect(Collectors.toList()); List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(documentMaterials.getRecordId().toString()); // 使用AtomicLong实现序号的递增 AtomicLong nm = new AtomicLong(1L); // 将筛选后的DocumentMaterials转换为DocumentMaterialsVo List<DocumentMaterialsVoSmall> list1 = filteredList.stream().map(doc -> { DocumentMaterialsVoSmall vo = new DocumentMaterialsVoSmall(); // 手动映射字段,使用getAndIncrement()方法获取当前值并递增 vo.setNum(nm.getAndIncrement()); List<DocumentMaterialsVoSmall> list2 = dsvs.stream().map(res1 -> new DocumentMaterialsVoSmall(res1.getNum(), res1.getDocumentNumber(),res1.getCreator(), res1.getTitle(), res1.getDate(), res1.getPageNumberFormatted(), res1.getRemarks())).collect(Collectors.toList()); vo.setDocumentNumber(doc.getDocumentNumber()); vo.setCreator(doc.getCreator()); vo.setTitle(doc.getTitle()); vo.setDate(doc.getDate()); vo.setPageNumberFormatted(doc.getPageNumber().toString()); vo.setRemarks(doc.getRemarks()); // vo.setRecordId(doc.getRecordId() != null ? doc.getRecordId().toString() : null); // vo.setPublicity(doc.getPublicity()); return vo; }).collect(Collectors.toList()); // List<DocumentMaterials> list; // System.out.println(ids); // // 如果提供了ids参数,则根据ids导出指定记录 // if (ids != null && ids.length > 0) { // list = documentMaterialsService.selectDocumentMaterialsByIds(ids); // } else { // list = documentMaterialsService.selectDocumentMaterialsList(documentMaterials); // // } // // 根据visible字段筛选,只保留visible为1的记录 // List<DocumentMaterials> filteredList = list.stream() // .filter(doc -> doc.getVisible() != null && doc.getVisible() == 1 && !Objects.equals(doc.getFileStyle(), "其他材料")) // .collect(Collectors.toList()); // // // 使用AtomicLong实现序号的递增 // AtomicLong nm = new AtomicLong(1L); // // 将筛选后的DocumentMaterials转换为DocumentMaterialsVo // List<DocumentMaterialsVoSmall> list1 = filteredList.stream().map(doc -> { // DocumentMaterialsVoSmall vo = new DocumentMaterialsVoSmall(); // // 手动映射字段,使用getAndIncrement()方法获取当前值并递增 // vo.setNum(nm.getAndIncrement()); // // vo.setDocumentNumber(doc.getDocumentNumber()); // vo.setCreator(doc.getCreator()); // vo.setTitle(doc.getTitle()); // vo.setDate(doc.getDate()); // vo.setPageNumberFormatted(doc.getPageNumber().toString()); // vo.setRemarks(doc.getRemarks()); //// vo.setRecordId(doc.getRecordId() != null ? doc.getRecordId().toString() : null); //// vo.setPublicity(doc.getPublicity()); // return vo; // }).collect(Collectors.toList()); ExcelUtil<DocumentMaterialsVoSmall> util = new ExcelUtil<DocumentMaterialsVoSmall>(DocumentMaterialsVoSmall.class); util.exportExcel(response, list1, "卷内目录"); util.exportExcel(response, list2, "卷内目录"); } // List<DocumentMaterialsVo> dsvs = documentMaterialsService.findArchMInfo(id.toString()); @@ -656,4 +668,129 @@ } @PostMapping("/uploads/{recordId}") public AjaxResult uploadFiles(List<MultipartFile> files, @PathVariable Long recordId) throws Exception { try { // 上传文件路径 String filePath = RuoYiConfig.getUploadPath(); List<String> urls = new ArrayList<>(); List<String> fileNames = new ArrayList<>(); List<String> newFileNames = new ArrayList<>(); List<String> originalFilenames = new ArrayList<>(); // 批量处理文件上传 for (MultipartFile file : files) { // 根据文件名称,然后修改对应数据的url String fname = file.getOriginalFilename(); if (StringUtils.isBlank(fname)) { continue; } // 上传并返回新文件名称 String fileName = FileUploadUtils.upload(filePath, file); String url = serverConfig.getUrl() + fileName; // 分割文件名 String[] nams = fname.split("\\."); if (nams.length < 2) { continue; } Long nam = Long.parseLong(nams[0]); // 根据页号拿到案卷的详细信息 DocumentMaterials doc = documentMaterialsService.selectByPageNumber(nam, Math.toIntExact(recordId)); if (doc != null) { if (doc.getSecurityLevel() != null && doc.getSecurityLevel().equals("该页另存")) { // 替换为了准备好的图像 String fp = filePath + "\\glc.jpg"; Path path = Paths.get(fp); // 拿到图像属性 BufferedImage bufferedImage = ImageIO.read(Files.newInputStream(path)); int wid = bufferedImage.getWidth(); int hei = bufferedImage.getHeight(); double sz = Double.parseDouble(String.format("%.2f", Files.size(path) * 1.0 / 1024)); // 拿到图像的dpi信息 ImageInfo info = Imaging.getImageInfo(Files.readAllBytes(path)); int wdpi = info.getPhysicalWidthDpi(); int hdpi = info.getPhysicalHeightDpi(); // 计算fileNumber Long fileNumber = documentMaterialsService.getFiNum(nam, recordId); // 计算sizeType String sizeType = getPageSize(wid * hei); Graphics2D g2d = bufferedImage.createGraphics(); g2d.setFont(new Font("Arial", Font.BOLD, 80)); g2d.setColor(Color.black); String pageNumber = doc.getPageNumber() + ""; int fontHeight = g2d.getFontMetrics().getHeight(); int x = bufferedImage.getWidth() - g2d.getFontMetrics().stringWidth(pageNumber) - 80; int y = bufferedImage.getHeight() - fontHeight / 2 - 100; g2d.drawString(pageNumber, x, y); g2d.dispose(); // 将BufferedImage转换为MultipartFile MultipartFile multipartFile = null; ByteArrayOutputStream os = new ByteArrayOutputStream(); ImageIO.write(bufferedImage, "jpg", os); InputStream input = new ByteArrayInputStream(os.toByteArray()); multipartFile = new MockMultipartFile(pageNumber, pageNumber + ".jpg", "text/plain", input); // 上传并返回新文件名称 String fileName1 = FileUploadUtils.upload(filePath, multipartFile); // 更新数据库 documentMaterialsService.updateByPageNumber(nam, sizeType, fileNumber, wid, hei, wdpi, hdpi, sz, fileName1, "jpg", recordId); urls.add(serverConfig.getUrl() + fileName1); fileNames.add(fileName1); newFileNames.add(FileUtils.getName(fileName1)); originalFilenames.add(pageNumber + ".jpg"); } else { // 文件名称 String pname = nams[1]; // 拿到图像属性 BufferedImage bufferedImage = ImageIO.read(file.getInputStream()); int wid = bufferedImage.getWidth(); int hei = bufferedImage.getHeight(); double sz = Double.parseDouble(String.format("%.2f", file.getSize() * 1.0 / 1024)); // 拿到图像的dpi信息 ImageInfo info = Imaging.getImageInfo(file.getBytes()); int wdpi = info.getPhysicalWidthDpi(); int hdpi = info.getPhysicalHeightDpi(); // 计算fileNumber Long fileNumber = documentMaterialsService.getFiNum(nam, recordId); // 计算sizeType String sizeType = getPageSize(wid * hei); // 更新数据库 documentMaterialsService.updateByPageNumber(nam, sizeType, fileNumber, wid, hei, wdpi, hdpi, sz, fileName, pname, recordId); urls.add(url); fileNames.add(fileName); newFileNames.add(FileUtils.getName(fileName)); originalFilenames.add(fname); } } } AjaxResult ajax = AjaxResult.success(); ajax.put("urls", StringUtils.join(urls, FILE_DELIMETER)); ajax.put("fileNames", StringUtils.join(fileNames, FILE_DELIMETER)); ajax.put("newFileNames", StringUtils.join(newFileNames, FILE_DELIMETER)); ajax.put("originalFilenames", StringUtils.join(originalFilenames, FILE_DELIMETER)); return ajax; } catch (Exception e) { log.error("批量上传文件失败", e); return AjaxResult.error(e.getMessage()); } } } ruoyi-admin/src/main/resources/application-druid.yml
@@ -20,7 +20,7 @@ # 最小连接池数量 minIdle: 10 # 最大连接池数量 maxActive: 20 maxActive: 140 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置连接超时时间 ruoyi-admin/src/main/resources/application.yml
@@ -57,9 +57,9 @@ servlet: multipart: # 单个文件大小 max-file-size: 10MB max-file-size: 200MB # 设置总上传的文件大小 max-request-size: 20MB max-request-size: 1000MB # 服务模块 devtools: restart: @@ -134,3 +134,4 @@ excludes: /system/notice # 匹配链接 urlPatterns: /system/*,/monitor/*,/tool/* ruoyi-common/src/main/java/com/ruoyi/common/utils/poi/ExcelUtilManySheetFour.java
@@ -12,17 +12,16 @@ import com.ruoyi.common.utils.file.FileTypeUtils; import com.ruoyi.common.utils.file.ImageUtils; import com.ruoyi.common.utils.reflect.ReflectUtils; import org.apache.poi.hssf.usermodel.HSSFClientAnchor; import org.apache.poi.hssf.usermodel.HSSFDataValidation; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddress; import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.hssf.usermodel.HSSFClientAnchor; import org.apache.poi.hssf.usermodel.HSSFDataValidation; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.hssf.usermodel.HSSFClientAnchor; import org.apache.poi.hssf.usermodel.HSSFDataValidation; import org.apache.poi.hssf.usermodel.HSSFRichTextString; import org.apache.poi.xssf.usermodel.XSSFClientAnchor; import org.apache.poi.xssf.usermodel.XSSFDataValidation; import org.apache.poi.xssf.usermodel.XSSFRichTextString; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -260,8 +259,11 @@ * @throws IOException */ public void exportExcel(HttpServletResponse response, List<T> list, String sheetName) throws IOException { response.setContentType("application/vnd.ms-excel"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); // 设置文件名 String fileName = UUID.randomUUID() + "_" + ".xlsx"; response.setHeader("Content-Disposition", "attachment; filename=" + fileName); this.init(list, sheetName, Excel.Type.EXPORT); exportExcel(response.getOutputStream()); } @@ -274,10 +276,21 @@ * @return 结果 * @throws IOException */ /** * 对list数据源将其里面的数据导入到excel表单 * * @param response 返回数据 * @param list 导出数据集合 * @return 结果 * @throws IOException */ public void exportExcelManySheet(HttpServletResponse response, List<ExcelExp> list, boolean includeQrCode, byte[] bt, List<String> sigArr, List<String> arrAn, String inquiryNumber, String caseTitle) throws IOException { // response.setContentType("application/vnd.ms-excel"); // response.setCharacterEncoding("utf-8"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); // 设置文件名 String fileName = UUID.randomUUID() + "_" + ".xlsx"; response.setHeader("Content-Disposition", "attachment; filename=" + fileName); try { createWorkbook(); @@ -296,18 +309,33 @@ // 合并第一行的前5个单元格 sheet.addMergedRegion(new CellRangeAddress(0, 0, 0, 8)); // 必须先设置为true // 页面布局设置 sheet.setAutobreaks(true); sheet.setFitToPage(true); // 获取打印设置 PrintSetup printSetup = sheet.getPrintSetup(); // 设置为1页宽度 printSetup.setFitWidth((short) 1); // 宽度调整为1页 printSetup.setFitHeight((short) 0); // 高度不限制 // 其他打印设置 printSetup.setPaperSize(PrintSetup.A4_PAPERSIZE); // A4纸 printSetup.setLandscape(false); // 纵向打印 // 创建行并设置高度 row = sheet.createRow(firow); row.setHeight((short)(40 * 40)); //生成二维码 if(includeQrCode) { Cell cell = row.createCell(6); row.setHeight((short)(40 * 40)); Cell cell = row.createCell(6); // 设置图片大小和位置 ClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) (cell.getColumnIndex()+1), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() +2), ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) (cell.getColumnIndex()+1), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() +2), cell.getRow().getRowNum() + 1); // 计算居中位置 // int col1 = 0; // 中间列 @@ -318,20 +346,23 @@ // anchor.setDy1(0); // anchor.setDx2(255); // 宽度 // anchor.setDy2(255); // 高度 anchor.setRow1(1); anchor.setAnchorType(ClientAnchor.AnchorType.MOVE_AND_RESIZE); // 计算居中位置 int col1 = 3; // 中间列 int col2 = col1 + 3; anchor.setCol1(col1); anchor.setCol2(col2); anchor.setRow1(0); anchor.setRow2(1); byte[] data = bt; anchor.setDx1(2400000); anchor.setDy1(-10); anchor.setDy2(-800000); // 获取图片原始尺寸 BufferedImage image = ImageIO.read(new ByteArrayInputStream(data)); double widthInEMU = image.getWidth() * 9525 * 0.2; double heightInEMU = image.getHeight() * 9525; // 设置图片原始尺寸 anchor.setDx2(-100000); // 原始宽度 // anchor.setDx2(-100000); // 原始宽度 // anchor.setDy2((int)heightInEMU); // 原始高度 //anchor.setCol1(5); // 从第6列开始显示 //anchor.setCol2(10); // 到第11列结束 @@ -345,6 +376,9 @@ firow = firow + 1; row = sheet.createRow(firow); } else row.setHeight((short)(20 * 20)); // sheet.addMergedRegion(new CellRangeAddress(1, 1, 0, 7)); if(firow==1) { @@ -364,16 +398,67 @@ titleCell.setCellStyle(style); firow = firow + 1; row = sheet.createRow(firow); // 将固定行高改为自动行高,以便内容能完整显示在合并区域 row.setHeight((short)(50*20)); // row.createCell(0).setCellValue("发文号:"); sheet.addMergedRegion(new CellRangeAddress(firow, firow, 1, 3)); row.createCell(1).setCellValue(inquiryNumber); row.createCell(4).setCellValue("案卷题名:"); sheet.addMergedRegion(new CellRangeAddress(firow, firow, 5, 9)); CellStyle style1 = wb.createCellStyle(); style1.setAlignment(HorizontalAlignment.LEFT); Cell cell2 = row.createCell(0); cell2.setCellValue("发文号:"); cell2.setCellStyle(style1); // row.createCell(4).setCellValue("档号:"); //拿到档号 row.createCell(5).setCellValue(caseTitle); // 合并第1-3列 int startCol1 = 1; int endCol1 = 3; sheet.addMergedRegion(new CellRangeAddress(firow, firow, startCol1, endCol1)); // 设置所有合并单元格的样式 for (int col = startCol1; col <= endCol1; col++) { Cell mergedCell = row.createCell(col); mergedCell.setCellStyle(style1); } // 只在起始单元格设置数据 Cell inquiryCell = row.getCell(startCol1); inquiryCell.setCellValue(inquiryNumber); Cell cell1 = row.createCell(4); cell1.setCellValue("案卷题名:"); cell1.setCellStyle(style1); // 创建一个新的样式用于案卷题名合并单元格 CellStyle mergedCellStyle = wb.createCellStyle(); mergedCellStyle.cloneStyleFrom(style1); // 继承原有样式 mergedCellStyle.setAlignment(HorizontalAlignment.LEFT); // 改为左对齐 mergedCellStyle.setWrapText(true); // 启用自动换行 //mergedCellStyle.setVerticalAlignment(VerticalAlignment.CENTER); // 垂直居中 // 合并第5-8列 int startCol = 5; int endCol = 8; // 先创建所有需要的单元格并设置样式 for (int col = startCol; col <= endCol; col++) { Cell mergedCell = row.createCell(col); mergedCell.setCellStyle(mergedCellStyle); } // 然后执行合并操作 sheet.addMergedRegion(new CellRangeAddress(firow, firow, startCol, endCol)); // 只在起始单元格设置数据 Cell getCas = row.getCell(startCol); getCas.setCellStyle(mergedCellStyle); getCas.setCellValue(caseTitle); // 只在起始单元格设置数据 //ces.setCellValue(caseTitle); // 设置自动换行 // row = sheet.createRow(2); // row.createCell(0).setCellValue("案卷题名:"); // 设置自动换行 // row = sheet.createRow(2); // row.createCell(0).setCellValue("案卷题名:"); firow = firow + 1; @@ -447,8 +532,11 @@ * @return 结果 */ public void importTemplateExcel(HttpServletResponse response, String sheetName) throws IOException { response.setContentType("application/vnd.ms-excel"); response.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"); response.setCharacterEncoding("utf-8"); // 设置文件名 String fileName = UUID.randomUUID() + "_" + ".xlsx"; response.setHeader("Content-Disposition", "attachment; filename=" ); this.init(null, sheetName, Excel.Type.IMPORT); exportExcel(response.getOutputStream()); } @@ -647,7 +735,7 @@ } else if (Excel.ColumnType.NUMERIC == attr.cellType()) { cell.setCellValue(StringUtils.contains(Convert.toStr(value), ".") ? Convert.toDouble(value) : Convert.toInt(value)); } else if (Excel.ColumnType.IMAGE == attr.cellType()) { ClientAnchor anchor = new HSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), ClientAnchor anchor = new XSSFClientAnchor(0, 0, 0, 0, (short) cell.getColumnIndex(), cell.getRow().getRowNum(), (short) (cell.getColumnIndex() + 1), cell.getRow().getRowNum() + 1); String imagePath = Convert.toStr(value); if (StringUtils.isNotEmpty(imagePath)) { @@ -694,12 +782,12 @@ // 如果设置了提示信息则鼠标放上去提示. if (StringUtils.isNotEmpty(attr.prompt())) { // 这里默认设了2-101列提示. setHSSFPrompt(sheet, "", attr.prompt(), 1, 100, column, column); setCellPrompt(sheet, "", attr.prompt(), 1, 100, column, column); } // 如果设置了combo属性则本列只能选择不能输入 if (attr.combo().length > 0) { // 这里默认设了2-101列只能选择不能输入. setHSSFValidation(sheet, attr.combo(), 1, 100, column, column); setCellValidation(sheet, attr.combo(), 1, 100, column, column); } } @@ -751,7 +839,7 @@ } /** * 设置 POI HSSFSheet 单元格提示 * 设置单元格提示 * * @param sheet 表单 * @param promptTitle 提示标题 @@ -761,7 +849,7 @@ * @param firstCol 开始列 * @param endCol 结束列 */ public void setHSSFPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, public void setCellPrompt(Sheet sheet, String promptTitle, String promptContent, int firstRow, int endRow, int firstCol, int endCol) { DataValidationHelper helper = sheet.getDataValidationHelper(); DataValidationConstraint constraint = helper.createCustomConstraint("DD1"); @@ -783,7 +871,7 @@ * @param endCol 结束列 * @return 设置好的sheet. */ public void setHSSFValidation(Sheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol) { public void setCellValidation(Sheet sheet, String[] textlist, int firstRow, int endRow, int firstCol, int endCol) { DataValidationHelper helper = sheet.getDataValidationHelper(); // 加载下拉列表内容 DataValidationConstraint constraint = helper.createExplicitListConstraint(textlist); @@ -792,7 +880,7 @@ // 数据有效性对象 DataValidation dataValidation = helper.createValidation(constraint, regions); // 处理Excel兼容性问题 if (dataValidation instanceof HSSFDataValidation) { if (dataValidation instanceof XSSFDataValidation) { dataValidation.setSuppressDropDownArrow(false); dataValidation.setShowErrorBox(true); } @@ -991,7 +1079,7 @@ * 创建一个工作簿 */ public void createWorkbook() { this.wb = new HSSFWorkbook(); this.wb = new XSSFWorkbook(); } /** @@ -1061,3 +1149,17 @@ return val; } }