From 077e03ab2fbbf0b1f8567b1ecdd4a5daab4167e2 Mon Sep 17 00:00:00 2001 From: Lorenz Stechauner Date: Thu, 16 Nov 2023 10:06:55 +0100 Subject: [PATCH] Ods: add mergeSubRowCells to AddTable() --- Elwig/Helpers/Export/Ods.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) 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)); }