Ods: Add support for DateOnly, TimeOnly and DateTime
This commit is contained in:
@ -127,6 +127,16 @@ namespace Elwig.Helpers.Export {
|
|||||||
<style:style style:name="N5" style:family="table-cell" style:parent-style-name="default" style:data-style-name="NN5"/>
|
<style:style style:name="N5" style:family="table-cell" style:parent-style-name="default" style:data-style-name="NN5"/>
|
||||||
<number:number-style style:name="NN6"><number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1" number:grouping="true"/></number:number-style>
|
<number:number-style style:name="NN6"><number:number number:decimal-places="6" number:min-decimal-places="6" number:min-integer-digits="1" number:grouping="true"/></number:number-style>
|
||||||
<style:style style:name="N6" style:family="table-cell" style:parent-style-name="default" style:data-style-name="NN6"/>
|
<style:style style:name="N6" style:family="table-cell" style:parent-style-name="default" style:data-style-name="NN6"/>
|
||||||
|
<number:date-style style:name="_date"><number:day number:style="long"/><number:text>.</number:text><number:month number:style="long"/><number:text>.</number:text><number:year number:style="long"/></number:date-style>
|
||||||
|
<style:style style:name="date" style:family="table-cell" style:parent-style-name="default" style:data-style-name="_date"/>
|
||||||
|
<number:time-style style:name="_time"><number:hours number:style="long"/><number:text>:</number:text><number:minutes number:style="long"/><number:text>:</number:text><number:seconds number:style="long"/></number:time-style>
|
||||||
|
<style:style style:name="time" style:family="table-cell" style:parent-style-name="default" style:data-style-name="_time"/>
|
||||||
|
<number:date-style style:name="_datetime">
|
||||||
|
<number:day number:style="long"/><number:text>.</number:text><number:month number:style="long"/><number:text>.</number:text><number:year number:style="long"/>
|
||||||
|
<number:text> </number:text>
|
||||||
|
<number:hours number:style="long"/><number:text>:</number:text><number:minutes number:style="long"/><number:text>:</number:text><number:seconds number:style="long"/>
|
||||||
|
</number:date-style>
|
||||||
|
<style:style style:name="datetime" style:family="table-cell" style:parent-style-name="default" style:data-style-name="_datetime"/>
|
||||||
</office:automatic-styles>
|
</office:automatic-styles>
|
||||||
<office:body>
|
<office:body>
|
||||||
<office:spreadsheet>
|
<office:spreadsheet>
|
||||||
@ -166,8 +176,8 @@ namespace Elwig.Helpers.Export {
|
|||||||
await writer.WriteAsync($"""
|
await writer.WriteAsync($"""
|
||||||
<config:config-item-map-entry config:name="{tbl}">
|
<config:config-item-map-entry config:name="{tbl}">
|
||||||
<config:config-item config:name="VerticalSplitMode" config:type="short">2</config:config-item>
|
<config:config-item config:name="VerticalSplitMode" config:type="short">2</config:config-item>
|
||||||
<config:config-item config:name="VerticalSplitPosition" config:type="int">4</config:config-item>
|
<config:config-item config:name="VerticalSplitPosition" config:type="int">5</config:config-item>
|
||||||
<config:config-item config:name="PositionBottom" config:type="int">4</config:config-item>
|
<config:config-item config:name="PositionBottom" config:type="int">5</config:config-item>
|
||||||
</config:config-item-map-entry>
|
</config:config-item-map-entry>
|
||||||
|
|
||||||
""");
|
""");
|
||||||
@ -270,6 +280,15 @@ namespace Elwig.Helpers.Export {
|
|||||||
string c;
|
string c;
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
c = $"<{ct}{add}/>";
|
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}><text:p>{date:dd.MM.yyyy}</text:p></{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}><text:p>{time:HH:mm:ss}</text:p></{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}><text:p>{dt:dd.MM.yyyy HH:mm:ss}</text:p></{ct}>";
|
||||||
} else if (data is decimal || data is float || data is double || data is byte || data is char ||
|
} 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) {
|
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()!
|
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 "°KMW": n = 1; data = $"{v:N1}"; break;
|
||||||
case "°Oe": n = 0; data = $"{v:N0}"; 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}><text:p>{data}</text:p></{ct}>";
|
c = $"<{ct} office:value-type=\"float\" calcext:value-type=\"float\" office:value=\"{v.ToString(CultureInfo.InvariantCulture)}\"{add}><text:p>{data}</text:p></{ct}>";
|
||||||
} else {
|
} else {
|
||||||
|
Reference in New Issue
Block a user