sc/inc/tablestyle.hxx              |    3 +
 sc/source/core/data/tablestyle.cxx |   57 +++++++++++++++++++++++++++++++++++++
 2 files changed, 60 insertions(+)

New commits:
commit 71da66ff8c4acae1cfec0a0057aa65d1394519a2
Author:     Szymon Kłos <[email protected]>
AuthorDate: Tue Feb 24 15:57:45 2026 +0000
Commit:     Szymon Kłos <[email protected]>
CommitDate: Thu Feb 26 15:25:32 2026 +0100

    Table Styles: generate JSON with definitions
    
    Change-Id: I7c422794cac1fc0a097ae59212f918f0349d754f
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/200327
    Reviewed-by: Szymon Kłos <[email protected]>
    Reviewed-by: Balazs Varga <[email protected]>
    Tested-by: Jenkins CollaboraOffice <[email protected]>

diff --git a/sc/inc/tablestyle.hxx b/sc/inc/tablestyle.hxx
index 57fbd8046b14..2397124af9eb 100644
--- a/sc/inc/tablestyle.hxx
+++ b/sc/inc/tablestyle.hxx
@@ -13,6 +13,7 @@
 
 #include <editeng/boxitem.hxx>
 #include <editeng/brushitem.hxx>
+#include <tools/json_writer.hxx>
 #include "document.hxx"
 #include "scdllapi.h"
 #include "dbdata.hxx"
@@ -127,6 +128,8 @@ public:
     void DeleteTableStyle(const OUString& rName);
     const ScTableStyle* GetTableStyle(const OUString& rName) const;
     bool HasTableStyle() const { return maTableStyles.size() > 0; }
+
+    void generateJSON(tools::JsonWriter& rWriter) const;
 };
 
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */
diff --git a/sc/source/core/data/tablestyle.cxx 
b/sc/source/core/data/tablestyle.cxx
index bf4c5ac6f6cf..e6b8643dba96 100644
--- a/sc/source/core/data/tablestyle.cxx
+++ b/sc/source/core/data/tablestyle.cxx
@@ -897,4 +897,61 @@ const ScTableStyle* ScTableStyles::GetTableStyle(const 
OUString& rName) const
     return maTableStyles.find(rName)->second.get();
 }
 
+namespace
+{
+std::string_view tableStyleElementName(ScTableStyleElement eElement)
+{
+    switch (eElement)
+    {
+        case ScTableStyleElement::WholeTable:
+            return "WholeTable";
+        case ScTableStyleElement::FirstColumnStripe:
+            return "FirstColumnStripe";
+        case ScTableStyleElement::SecondColumnStripe:
+            return "SecondColumnStripe";
+        case ScTableStyleElement::FirstRowStripe:
+            return "FirstRowStripe";
+        case ScTableStyleElement::SecondRowStripe:
+            return "SecondRowStripe";
+        case ScTableStyleElement::LastColumn:
+            return "LastColumn";
+        case ScTableStyleElement::FirstColumn:
+            return "FirstColumn";
+        case ScTableStyleElement::HeaderRow:
+            return "HeaderRow";
+        case ScTableStyleElement::TotalRow:
+            return "TotalRow";
+        case ScTableStyleElement::FirstHeaderCell:
+            return "FirstHeaderCell";
+        case ScTableStyleElement::LastHeaderCell:
+            return "LastHeaderCell";
+    }
+    return {};
+}
+}
+
+void ScTableStyles::generateJSON(tools::JsonWriter& rWriter) const
+{
+    auto aStylesArray = rWriter.startArray("TableStyles");
+
+    for (auto const & [ rName, pStyle ] : maTableStyles)
+    {
+        auto aStyleStruct = rWriter.startStruct();
+        rWriter.put("Name", pStyle->GetName().toUtf8());
+        rWriter.put("UIName", pStyle->GetUIName().toUtf8());
+
+        auto aElementsArray = rWriter.startArray("Elements");
+        for (auto const & [ eElement, pPattern ] : pStyle->GetSetPatterns())
+        {
+            const SvxBrushItem* pBrush = 
pPattern->GetItemSet().GetItemIfSet(ATTR_BACKGROUND);
+            if (!pBrush)
+                continue;
+
+            auto aElementStruct = rWriter.startStruct();
+            rWriter.put("Type", tableStyleElementName(eElement));
+            rWriter.put("FillColor", 
pBrush->GetColor().AsRGBHexString().toUtf8());
+        }
+    }
+}
+
 /* vim:set shiftwidth=4 softtabstop=4 expandtab cinoptions=b1,g0,N-s 
cinkeys+=0=break: */

Reply via email to