package UnitTest.ImportExcel; import com.aspose.cells.Cells; import com.aspose.cells.License; import com.aspose.cells.Worksheet; import org.apache.poi.ss.usermodel.*; import org.apache.poi.ss.util.CellRangeAddressList; import org.apache.poi.xssf.usermodel.XSSFWorkbook; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import static org.example.AsposeUtil.getLicense; public class TestTitle { /** * 功能:修改指定单元格的样式 * * @param wb * @param sheetIndex * @param r * @param c * @param fontSize * @param colorIdx * @return */ public static void addComment(Workbook wb, int sheetIndex, int r, int c, int fontSize, short colorIdx, String str) { Sheet sheet = wb.getSheetAt(sheetIndex); Row row = sheet.getRow(r); Cell cell = row.getCell(c); // 创建单元格样式 CellStyle style = wb.createCellStyle(); style.setAlignment(HorizontalAlignment.CENTER); style.setVerticalAlignment(VerticalAlignment.CENTER); style.setBorderTop(BorderStyle.THIN); style.setBorderBottom(BorderStyle.THIN); style.setBorderLeft(BorderStyle.THIN); style.setBorderRight(BorderStyle.THIN); // 创建字体样式 Font font = wb.createFont(); font.setFontName("宋体");//字体 font.setBold(true);//加粗 font.setFontHeightInPoints((short) fontSize);//字号 style.setFont(font); // 设置背景颜色 style.setFillForegroundColor(colorIdx); style.setFillPattern(FillPatternType.SOLID_FOREGROUND); // 应用样式到单元格 cell.setCellStyle(style); // 判断单元格上是否存在批注 if (cell.getCellComment() != null) { // 如果存在批注,先删除 cell.removeCellComment(); } // 创建批注 Drawing drawing = sheet.createDrawingPatriarch(); CreationHelper factory = wb.getCreationHelper(); ClientAnchor anchor = factory.createClientAnchor(); anchor.setCol1(cell.getColumnIndex()); anchor.setCol2(cell.getColumnIndex() + 1); anchor.setRow1(row.getRowNum()); anchor.setRow2(row.getRowNum() + 3); Comment comment = drawing.createCellComment(anchor); comment.setString(factory.createRichTextString(str)); // 将批注添加到单元格 cell.setCellComment(comment); } /** * 功能:在EXCEL的指定范围内添加上下拉框,内容通过String[]提供 * * @param workbook * @param sheetIdx * @param firstRow * @param lastRow * @param firstCol * @param lastCol * @return */ public static void addValidation(Workbook workbook, int sheetIdx, String[] options, int firstRow, int lastRow, int firstCol, int lastCol) { Sheet sheet = workbook.getSheetAt(sheetIdx); // 创建数据验证对象 DataValidationHelper validationHelper = sheet.getDataValidationHelper(); DataValidationConstraint constraint = validationHelper.createExplicitListConstraint(options); CellRangeAddressList addressList = new CellRangeAddressList(firstRow, lastRow, firstCol, lastCol); // 指定单元格范围 DataValidation validation = validationHelper.createValidation(constraint, addressList); // 应用数据验证到单元格 sheet.addValidationData(validation); } //工作目录 public static String path = "D:\\dsWork\\QingLong\\src\\main\\resource\\Excel\\"; /** * 功能:将多个EXCEL全部导入到数据库后,再保留表头,清空所有数据,然后增加第一列,列名:单位,再从数据库中将数据读取出来,依次填入 * * @param filePath */ public static void getSummary(String filePath,String filePath2) throws Exception { // 测试破解后的 aspose-cells-20.7-crack.jar boolean auth = authrolizeLicense(); if (!auth) { System.out.println("aspose 许可无效!"); return; } System.out.println("aspose 已就绪!"); com.aspose.cells.Workbook wb = new com.aspose.cells.Workbook(filePath); Worksheet sheet = wb.getWorksheets().get(0); Cells cells = sheet.getCells(); cells.insertColumns(0, 1); wb.save(filePath2); } public static boolean authrolizeLicense() { boolean result = false; try { InputStream is = com.aspose.cells.License.class.getResourceAsStream("/com.aspose.cells.lic_2999.xml"); License asposeLicense = new License(); asposeLicense.setLicense(is); is.close(); result = true; } catch (Exception e) { e.printStackTrace(); } return result; } public static void main(String[] args) throws Exception { //学校上传的Excel String filePath = path + "1.xlsx"; String filePath2 = path + "2.xlsx"; //要进行标注的行和列 int r = 5, c = 6;//第6行第7列 //字号 int fontSize = 12; //标识的颜色,比如黄色、白色 short colorIdx = IndexedColors.YELLOW.getIndex(); // 创建下拉框的选项 String[] options = new String[]{"男", "女", "未知"}; //对文件进行校验,标注 try (FileInputStream fileIn = new FileInputStream(filePath); Workbook workbook = new XSSFWorkbook(fileIn)) { //在指定单元格上添加背景黄色+标注提示信息 addComment(workbook, 0, r, c, fontSize, colorIdx, "此单元格应该是非空的!"); //添加下拉框校验 addValidation(workbook, 0, options, 4, 21, c - 1, c - 1);//范围 // 保存 FileOutputStream fileOut = new FileOutputStream(filePath); workbook.write(fileOut); } catch (IOException e) { e.printStackTrace(); } //生成汇总文件,并增加一列,一般是单位名称 getSummary(filePath,filePath2); } }