:fix: rowSpan can't work when column index out of range

This commit is contained in:
wangfengming
2020-07-08 10:55:15 +08:00
parent 057f41e355
commit 80bab95f6c
3 changed files with 10 additions and 10 deletions

View File

@ -287,6 +287,7 @@ const table7 = new Table({
}), }),
new TableCell({ new TableCell({
children: [new Paragraph("0,3")], children: [new Paragraph("0,3")],
rowSpan: 3,
}), }),
], ],
}), }),
@ -296,9 +297,6 @@ const table7 = new Table({
children: [new Paragraph("1,0")], children: [new Paragraph("1,0")],
columnSpan: 2, columnSpan: 2,
}), }),
new TableCell({
children: [new Paragraph("1,3")],
}),
], ],
}), }),
new TableRow({ new TableRow({
@ -311,9 +309,6 @@ const table7 = new Table({
children: [new Paragraph("2,2")], children: [new Paragraph("2,2")],
rowSpan: 2, rowSpan: 2,
}), }),
new TableCell({
children: [new Paragraph("2,3")],
}),
], ],
}), }),
new TableRow({ new TableRow({

View File

@ -271,7 +271,8 @@ describe("TableRow", () => {
}); });
expect(tableRow.columnIndexToRootIndex(8, true)).to.equal(5); expect(tableRow.columnIndexToRootIndex(8, true)).to.equal(5);
expect(() => tableRow.columnIndexToRootIndex(9, true)).to.throw(`cell 'columnIndex' should not great than 8`); // for column 10, just place the new cell at the end of cell
expect(tableRow.columnIndexToRootIndex(10, true)).to.equal(5);
}); });
}); });
}); });

View File

@ -83,10 +83,14 @@ export class TableRow extends XmlComponent {
let colIdx = 0; let colIdx = 0;
// Offset because properties is also in root. // Offset because properties is also in root.
let rootIdx = 1; let rootIdx = 1;
const endRootIndex = allowEndNewCell ? this.root.length : this.root.length - 1;
while (colIdx <= columnIndex) { while (colIdx <= columnIndex) {
if (rootIdx > endRootIndex) { if (rootIdx >= this.root.length) {
throw new Error(`cell 'columnIndex' should not great than ${colIdx - 1}`); if (allowEndNewCell) {
// for insert verticalMerge CONTINUE at row end
return this.root.length;
} else {
throw new Error(`cell 'columnIndex' should not great than ${colIdx - 1}`);
}
} }
const cell = this.root[rootIdx] as TableCell; const cell = this.root[rootIdx] as TableCell;
rootIdx += 1; rootIdx += 1;