我想阅读一个包含一个合并列的Excel工作表,我需要处理该列以确定分组的行。这样我就可以将该组视为一组。同样,每个合并的行都被视为set1,set2,set3等等。然后我将分别处理每一组的行。
更新 正如@fireandfuel所要求的那样,我包括了我已到达的程序。
CTMergeCells mergeCells = workSheet.getMergeCells();
SheetData sheetData = workSheet.getSheetData();
List<ArrayList<Row>> rowGroups = new ArrayList<ArrayList<Row>>();
List<CTMergeCell> cTMergeCells = mergeCells.getMergeCell();
for(CTMergeCell mcells : cTMergeCells){
String range = mcells.getRef();
Integer rowStart = Integer.parseInt(range.substring(1, 2));
Integer rowEnd = Integer.parseInt(range.substring(4, 5));
ArrayList<Row> rowss = (ArrayList<Row>) sheetData.getRow().stream().filter(row -> {
return row.getR() >= rowStart.longValue() && row.getR() <= rowEnd.longValue();
}).collect(Collectors.toList());
rowGroups.add((ArrayList<Row>) rowss);
}
答案 0 :(得分:0)
使用docx4j访问SpreadsheetML
中合并单元格的定义非常容易。
Office Open XML
个文件(docx,xlsx和pptx)只是包含XML文件的ZIP存档。您可以使用大多数归档程序打开它,并查看其文件结构和文件。
以下是使用docx4j访问合并单元格定义的一些源代码:
// load yourFile.xlsx file
SpreadsheetMLPackage spreadsheetMLPackage = SpreadsheetMLPackage.load(new File("yourFile.xlsx"));
// get worksheet from /xl/worksheets/yourSheet.xml file from yourFile.xlsx
WorksheetPart worksheetPart = (WorksheetPart) spreadsheetMLPackage.getParts().get(new PartName("/xl/worksheets/yourSheet.xml"));
Worksheet worksheet = worksheetPart.getJaxbElement();
// get the merged cells
CTMergeCells ctMergedCells = worksheet.getMergeCells();
if(ctMergedCells != null){
List<CTMergeCell> mergedCellList = ctMergedCells.getMergeCell();
// do something with the merged cells
}
课程org.xlsx4j.sml.CTMergeCell
有一个函数getRef
,可以为您提供合并为String
的单元格的引用,编码为begin:end
,如A1:B2
(合并了从A1
到B2
的小区:A1
,A2
,B1
和B2
)。