Calc Table Style Proof of Concept

Kohei Yoshida kohei at libreoffice.org
Thu Aug 28 02:26:35 UTC 2025


Hi Markus,

Good to see you again after a long hiatus. :-)

On 8/10/25 16:55, Markus Mohrhard wrote:
> Attached are two screenshots showing a comparison between the MSO 
> Excel rendering of my test document and the current Calc rendering.
I think the rendering looks decent, even without font handling.
>
>   * font formatting is not implemented at all. Font handling is a lot
>     more complicated than background and border handling
>
Indeed.  I just looked through the code in question, and the complexity 
is quite high there. Lots of special case handling...

>   * unit tests are completely missing
>
I don't think that's a big deal especially for rendering features.
>
>   * link between table style and DB goes through the name instead of a
>     reference to the actual table definition
>
I think that's fine as well. If we decide later that there is a better 
way we can switch to that.
>
>   * The autoformat feature should be removed and folded into the table
>     style implementation which would also provide a UI for modifying
>     table styles.
>
Auto format is such an outdated concept that I don't think anyone would 
miss it. Now, a UI for modifying table styles, that can be done in a 
separate step at least initially especially when availability of time 
(your time) is limited.
>
>   * merged cells are not handled at all right now
>
A corner case that can be handled later, if it's really needed.
>
>   * some UNO interfaces to interact with this feature
>
... can definitely wait. :-)
>
> Additionally, I might fix the following database range related issues 
> before merging if I continue with the current design:
No objections from me.
> Now to the part that I'm not happy with and why I think someone else 
> might want to have a second look at the ideas behind this change:
>
>   * Storing the table style information purely on the ScDBData makes
>     some operations quite easy but at the same time makes the code in
>     ScDocument::FillInfo a lot more complicated. At the same time I
>     have not come up with a design that would allow us to avoid the
>     position dependent property lookup during FillInfo. We could store
>     a reference to the table style in the ScPatternAttr but then we
>     need to keep the ScDBData range and the ScPatternAttr in sync. In
>     my mind the table style information is not a cell attribute until
>     the rendering stage.
>
Table style information IMO is definitely not a cell attribute as you 
say.  In terms of how to store the table style information, I don't have 
a strong opinion, but maybe you can try storing it outside of ScDBData 
and use ScDBData's name as a way to reference it.  I would personally 
avoid touching ScPatternAttr for this feature, unless you absolutely 
have to.
>
>   * Adding font handling is going to be painful as the font lookup is
>     delayed until the actual drawing
>       o My current idea would be to store a reference to the table
>         style and a struct storing the style lookup information, e.g.
>         this cell looks at first column stripe, second row stripe and
>         whole table item sets. This way the information only needs to
>         be computed once and the lookup for all the font properties
>         can be done reasonably quickly.
>       o Potentially this could also be done by combining the handling
>         of conditional formatting and table styles. In theory a
>         slightly cleaner approach would be to have a list of
>         SfxItemSet instances that are checked in order until an
>         explicitly set item was found. That way there is no need to
>         encode application layer information into the rendering code.
>
Sounds sensible to me.  Conditional formatting is probably the closest 
feature in terms of applying extra font attributes, so it makes sense to 
keep the new logic close to it.
>
>   * The fix for the border drawing issue mentioned above requires the
>     dynamic generation of new border items that can be passed through
>     ScDocument::FillInfo to the rendering code or a rework of the
>     border rendering.
>
I think FillInfo itself could use some rework. ;-)  It's screaming for 
rework every time I look at it...  Way too much logic is lumped into one 
function body... But honestly I haven't spent that much time struggling 
with this part of the Calc code, so take this with a grain of salt.
> I'd appreciate feedback from some other Calc developers about the 
> design and whether it is worth continuing with this design.

I think it's well worth pursuing, if you are willing.

My 2 cents.

Kohei
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/libreoffice/attachments/20250827/f69c22f5/attachment.htm>


More information about the LibreOffice mailing list