From 8e9c369a3db3358252440008e22e8277f9a846a2 Mon Sep 17 00:00:00 2001
From: Nicholas van Oudtshoorn <vanoudt@gmail.com>
Date: Fri, 30 Jun 2023 03:40:40 +0000
Subject: [PATCH] Add new number formats to spreadsheets: 0%, 0.0%, 0.00%,
 [h]:mm:ss

---
 lib/excellib.class.php |  4 ++++
 lib/odslib.class.php   | 23 +++++++++++++++++++++++
 2 files changed, 27 insertions(+)

diff --git a/lib/excellib.class.php b/lib/excellib.class.php
index 62bda64..f7b9305 100644
--- a/lib/excellib.class.php
+++ b/lib/excellib.class.php
@@ -881,7 +881,11 @@ class MoodleExcelFormat {
         $numbers[16] = 'd-mmm';
         $numbers[17] = 'mmm-yy';
         $numbers[22] = 'm/d/yy h:mm';
+        $numbers[46] = '[h]:mm:ss';
         $numbers[49] = '@';
+        $numbers[97] = '0%';
+        $numbers[98] = '0.0%';
+        $numbers[99] = '0.00%';
 
         if ($numformat !== 0 and in_array($numformat, $numbers)) {
             $this->format['numberFormat']['formatCode'] = $numformat;
diff --git a/lib/odslib.class.php b/lib/odslib.class.php
index 3f49756..5ebf373 100644
--- a/lib/odslib.class.php
+++ b/lib/odslib.class.php
@@ -729,7 +729,11 @@ class MoodleODSFormat {
         $numbers[16] = 'd-mmm';
         $numbers[17] = 'mmm-yy';
         $numbers[22] = 'm/d/yy h:mm';
+        $numbers[46] = '[h]:mm:ss';
         $numbers[49] = '@';
+        $numbers[97] = '0%';
+        $numbers[98] = '0.0%';
+        $numbers[99] = '0.00%';
 
         if ($num_format !== 0 and in_array($num_format, $numbers)) {
             $flipped = array_flip($numbers);
@@ -1483,9 +1487,28 @@ class MoodleODSWriter {
             <number:text></number:text>
             <number:am-pm/>
         </number:date-style>
+        <number:time-style style:name="N46" number:truncate-on-overflow="false">
+            <number:hours/>
+            <number:text>:</number:text>
+            <number:minutes number:style="long" />
+            <number:text>:</number:text>
+            <number:seconds number:style="long" / >
+        </number:time-style>
         <number:text-style style:name="NUM49">
             <number:text-content/>
         </number:text-style>
+        <number:percentage-style style:name="NUM97">
+            <number:number number:decimal-places="0" number:min-decimal-places="0" number:min-integer-digits="1"/>
+            <number:text>%</number:text>
+        </number:percentage-style>
+        <number:percentage-style style:name="NUM98">
+            <number:number number:decimal-places="1" number:min-decimal-places="1" number:min-integer-digits="1" />
+            <number:text>%</number:text>
+        </number:percentage-style>
+        <number:percentage-style style:name="NUM99">
+            <number:number number:decimal-places="2" number:min-decimal-places="2" number:min-integer-digits="1"/>
+            <number:text>%</number:text>
+        </number:percentage-style>
 ';
     }
 }
-- 
1.8.3.1

