diff --git a/Elwig/Helpers/Export/Ods.cs b/Elwig/Helpers/Export/Ods.cs index 81024e5..c1f1fa2 100644 --- a/Elwig/Helpers/Export/Ods.cs +++ b/Elwig/Helpers/Export/Ods.cs @@ -179,7 +179,7 @@ namespace Elwig.Helpers.Export { } } - public async Task AddTable(DataTable table) { + public async Task AddTable(DataTable 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(" \r\n"); foreach (var row in table.GetData()) { - await FormatRow(row, table.ColumnUnits); + await FormatRow(row, table.ColumnUnits, mergeSubRowCells); } await Content.WriteAsync(" \r\n"); } - protected async Task FormatRow(IEnumerable row, IEnumerable colUnits) { + protected async Task FormatRow(IEnumerable row, IEnumerable colUnits, bool mergeSubRowCells) { if (Content == null) throw new InvalidOperationException(); var arrays = row.Where(c => c is Array).Cast().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) : $" \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)); }