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

2 years ago
package UnitTest.ImportExcel;
2 years ago
import com.aspose.cells.Cells;
import com.aspose.cells.License;
import com.aspose.cells.Worksheet;
2 years ago
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;
2 years ago
import java.io.InputStream;
import static org.example.AsposeUtil.getLicense;
2 years ago
public class TestTitle {
/**
*
*
* @param wb
* @param sheetIndex
* @param r
* @param c
* @param fontSize
* @param colorIdx
* @return
*/
2 years ago
public static void addComment(Workbook wb, int sheetIndex, int r, int c,
int fontSize, short colorIdx, String str) {
2 years ago
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);
}
/**
* EXCELString[]
*
* @param workbook
* @param sheetIdx
* @param firstRow
* @param lastRow
* @param firstCol
* @param lastCol
* @return
*/
2 years ago
public static void addValidation(Workbook workbook, int sheetIdx, String[] options, int firstRow, int lastRow, int firstCol, int lastCol) {
2 years ago
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);
}
2 years ago
//工作目录
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
2 years ago
String filePath = path + "1.xlsx";
2 years ago
String filePath2 = path + "2.xlsx";
//要进行标注的行和列
2 years ago
int r = 5, c = 6;//第6行第7列
2 years ago
//字号
2 years ago
int fontSize = 12;
2 years ago
//标识的颜色,比如黄色、白色
2 years ago
short colorIdx = IndexedColors.YELLOW.getIndex();
2 years ago
2 years ago
// 创建下拉框的选项
String[] options = new String[]{"男", "女", "未知"};
2 years ago
//对文件进行校验,标注
2 years ago
try (FileInputStream fileIn = new FileInputStream(filePath);
Workbook workbook = new XSSFWorkbook(fileIn)) {
//在指定单元格上添加背景黄色+标注提示信息
addComment(workbook, 0, r, c, fontSize, colorIdx, "此单元格应该是非空的!");
//添加下拉框校验
2 years ago
addValidation(workbook, 0, options, 4, 21, c - 1, c - 1);//范围
// 保存
2 years ago
FileOutputStream fileOut = new FileOutputStream(filePath);
workbook.write(fileOut);
} catch (IOException e) {
e.printStackTrace();
}
2 years ago
//生成汇总文件,并增加一列,一般是单位名称
getSummary(filePath,filePath2);
2 years ago
}
}