Ods: add mergeSubRowCells to AddTable()
This commit is contained in:
@ -179,7 +179,7 @@ namespace Elwig.Helpers.Export {
|
||||
}
|
||||
}
|
||||
|
||||
public async Task AddTable<T>(DataTable<T> table) {
|
||||
public async Task AddTable<T>(DataTable<T> table, bool mergeSubRowCells = true) {
|
||||
if (Content == null) await AddHeader();
|
||||
if (Content == null) return;
|
||||
var totalSpan = table.ColumnSpans.Sum();
|
||||
@ -217,13 +217,13 @@ namespace Elwig.Helpers.Export {
|
||||
await Content.WriteAsync(" </table:table-row>\r\n");
|
||||
|
||||
foreach (var row in table.GetData()) {
|
||||
await FormatRow(row, table.ColumnUnits);
|
||||
await FormatRow(row, table.ColumnUnits, mergeSubRowCells);
|
||||
}
|
||||
|
||||
await Content.WriteAsync(" </table:table>\r\n");
|
||||
}
|
||||
|
||||
protected async Task FormatRow(IEnumerable<object?> row, IEnumerable<string?[]?> colUnits) {
|
||||
protected async Task FormatRow(IEnumerable<object?> row, IEnumerable<string?[]?> colUnits, bool mergeSubRowCells) {
|
||||
if (Content == null) throw new InvalidOperationException();
|
||||
var arrays = row.Where(c => c is Array).Cast<Array>().Select(c => c.Length).ToArray();
|
||||
int rowNum = Math.Max(1, arrays.Length > 0 ? arrays.Max() : 0);
|
||||
@ -232,6 +232,8 @@ namespace Elwig.Helpers.Export {
|
||||
foreach (var (data, units) in row.Zip(colUnits)) {
|
||||
if (data is Array a) {
|
||||
await Content.WriteAsync(i < a.Length ? FormatCell(a.GetValue(i), units: units) : $" <table:table-cell table:number-columns-repeated=\"{GetSubCols(a.GetType().GetElementType())}\"/>\r\n");
|
||||
} else if (!mergeSubRowCells) {
|
||||
await Content.WriteAsync(FormatCell(data, units: units));
|
||||
} else {
|
||||
await Content.WriteAsync(FormatCell(data, rowSpan: i == 0 ? rowNum : 1, isCovered: i > 0, units: units));
|
||||
}
|
||||
|
Reference in New Issue
Block a user