You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

165 lines
6.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

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);
}
}