diff --git a/Elwig/Helpers/Export/Ods.cs b/Elwig/Helpers/Export/Ods.cs
index fe957dc..0c7560a 100644
--- a/Elwig/Helpers/Export/Ods.cs
+++ b/Elwig/Helpers/Export/Ods.cs
@@ -20,7 +20,7 @@ namespace Elwig.Helpers.Export {
FileName = filename;
File.Delete(filename);
ZipArchive = ZipFile.Open(FileName, ZipArchiveMode.Create);
- _tables = new();
+ _tables = [];
}
public void Dispose() {
@@ -101,7 +101,12 @@ namespace Elwig.Helpers.Export {
-
+
+
+
+
+
+
@@ -198,6 +203,9 @@ namespace Elwig.Helpers.Export {
FormatCell(table.FullName, colSpan: totalSpan, style: "header") +
$" \r\n" +
$" \r\n" +
+ FormatCell(table.Subtitle, colSpan: totalSpan, style: "subheader") +
+ $" \r\n" +
+ $" \r\n" +
$" \r\n" +
$" \r\n" +
$" \r\n");
@@ -251,8 +259,8 @@ namespace Elwig.Helpers.Export {
protected static string FormatCell(object? data, int rowSpan = 1, int colSpan = 1, string? style = "default", bool isCovered = false, string?[]? units = null) {
if (data?.GetType().IsValueType == true && data.GetType().Name.StartsWith("ValueTuple"))
- return string.Join("", data.GetType().GetFields().Zip(units ?? Array.Empty())
- .Select(p => FormatCell(p.First.GetValue(data), rowSpan, colSpan, style, isCovered, new[] { p.Second }))
+ return string.Join("", data.GetType().GetFields().Zip(units ?? [])
+ .Select(p => FormatCell(p.First.GetValue(data), rowSpan, colSpan, style, isCovered, [p.Second]))
);
var add = (style != null ? $" table:style-name=\"{style}\"" : "") + (rowSpan > 1 || colSpan > 1 ? $" table:number-rows-spanned=\"{rowSpan}\" table:number-columns-spanned=\"{colSpan}\"" : "");
diff --git a/Elwig/Models/Dtos/DataTable.cs b/Elwig/Models/Dtos/DataTable.cs
index 9637cfe..62ea339 100644
--- a/Elwig/Models/Dtos/DataTable.cs
+++ b/Elwig/Models/Dtos/DataTable.cs
@@ -8,6 +8,7 @@ namespace Elwig.Models.Dtos {
public string Name { get; set; }
public string FullName { get; set; }
+ public string? Subtitle { get; set; }
public IEnumerable Rows { get; private set; }
public int RowNum => Rows.Count();
public int ColNum => ColumnNames.Count();