diff --git a/Elwig/Helpers/Export/Ods.cs b/Elwig/Helpers/Export/Ods.cs
index 0c7560a..7513f42 100644
--- a/Elwig/Helpers/Export/Ods.cs
+++ b/Elwig/Helpers/Export/Ods.cs
@@ -127,6 +127,16 @@ namespace Elwig.Helpers.Export {
+ ..
+
+ ::
+
+
+ ..
+
+ ::
+
+
@@ -166,8 +176,8 @@ namespace Elwig.Helpers.Export {
await writer.WriteAsync($"""
2
- 4
- 4
+ 5
+ 5
""");
@@ -270,6 +280,15 @@ namespace Elwig.Helpers.Export {
string c;
if (data == null) {
c = $"<{ct}{add}/>";
+ } else if (data is DateOnly date) {
+ add = string.Join(' ', add.Split(' ').Select(p => p.StartsWith("table:style-name=") ? $"table:style-name=\"date\"" : p));
+ c = $"<{ct} office:value-type=\"date\" calcext:value-type=\"date\" office:date-value=\"{date:yyyy-MM-dd}\"{add}>{date:dd.MM.yyyy}{ct}>";
+ } else if (data is TimeOnly time) {
+ add = string.Join(' ', add.Split(' ').Select(p => p.StartsWith("table:style-name=") ? $"table:style-name=\"time\"" : p));
+ c = $"<{ct} office:value-type=\"time\" calcext:value-type=\"time\" office:time-value=\"{time:\\P\\THH\\Hmm\\Mss\\S}\"{add}>{time:HH:mm:ss}{ct}>";
+ } else if (data is DateTime dt) {
+ add = string.Join(' ', add.Split(' ').Select(p => p.StartsWith("table:style-name=") ? $"table:style-name=\"datetime\"" : p));
+ c = $"<{ct} office:value-type=\"date\" calcext:value-type=\"date\" office:date-value=\"{dt:yyyy-MM-dd\\THH:mm:ss}\"{add}>{dt:dd.MM.yyyy HH:mm:ss}{ct}>";
} else if (data is decimal || data is float || data is double || data is byte || data is char ||
data is short || data is ushort || data is int || data is uint || data is long || data is ulong) {
double v = double.Parse(data?.ToString() ?? "0"); // use default culture for ToString and Parse()!
@@ -281,7 +300,7 @@ namespace Elwig.Helpers.Export {
case "°KMW": n = 1; data = $"{v:N1}"; break;
case "°Oe": n = 0; data = $"{v:N0}"; break;
}
- if (n >= 0) add = string.Join(" ", add.Split(" ").Select(p => p.StartsWith("table:style-name=") ? $"table:style-name=\"N{n}\"" : p));
+ if (n >= 0) add = string.Join(' ', add.Split(' ').Select(p => p.StartsWith("table:style-name=") ? $"table:style-name=\"N{n}\"" : p));
}
c = $"<{ct} office:value-type=\"float\" calcext:value-type=\"float\" office:value=\"{v.ToString(CultureInfo.InvariantCulture)}\"{add}>{data}{ct}>";
} else {