From 1ac96cfab4264c5e6ff21ee13e6b4a060a373bbf Mon Sep 17 00:00:00 2001 From: luke Date: Wed, 29 Apr 2026 18:32:02 -0500 Subject: [PATCH] Fix: skip hidded table rows during HTML export --- pydocx/export/base.py | 2 ++ pydocx/openxml/wordprocessing/__init__.py | 1 + pydocx/openxml/wordprocessing/table_row.py | 15 +++++++++++---- .../wordprocessing/table_row_properties.py | 17 +++++++++++++++++ 4 files changed, 31 insertions(+), 4 deletions(-) create mode 100644 pydocx/openxml/wordprocessing/table_row_properties.py diff --git a/pydocx/export/base.py b/pydocx/export/base.py index 67b002bc..4fd1778b 100644 --- a/pydocx/export/base.py +++ b/pydocx/export/base.py @@ -427,6 +427,8 @@ def export_table(self, table): return self.yield_nested(table.rows, self.export_node) def export_table_row(self, table_row): + if table_row.is_hidden: + return # skip — row is marked hidden in the docx return self.yield_nested(table_row.cells, self.export_node) def export_table_cell(self, table_cell): diff --git a/pydocx/openxml/wordprocessing/__init__.py b/pydocx/openxml/wordprocessing/__init__.py index 4fce72a2..236e17cc 100644 --- a/pydocx/openxml/wordprocessing/__init__.py +++ b/pydocx/openxml/wordprocessing/__init__.py @@ -44,6 +44,7 @@ from pydocx.openxml.wordprocessing.table_row import TableRow from pydocx.openxml.wordprocessing.text import Text from pydocx.openxml.wordprocessing.textbox_content import TxBxContent +from pydocx.openxml.wordprocessing.table_row_properties import TableRowProperties # noqa __all__ = [ 'AbstractNum', diff --git a/pydocx/openxml/wordprocessing/table_row.py b/pydocx/openxml/wordprocessing/table_row.py index c9f15744..4ff31cd3 100644 --- a/pydocx/openxml/wordprocessing/table_row.py +++ b/pydocx/openxml/wordprocessing/table_row.py @@ -5,13 +5,20 @@ unicode_literals, ) -from pydocx.models import XmlModel, XmlCollection +from pydocx.models import XmlModel, XmlChild, XmlCollection from pydocx.openxml.wordprocessing.table_cell import TableCell +from pydocx.openxml.wordprocessing.table_row_properties import TableRowProperties # NEW class TableRow(XmlModel): XML_TAG = 'tr' - cells = XmlCollection( - TableCell, - ) + # NEW: wire in the trPr properties element + properties = XmlChild(type=TableRowProperties) + + cells = XmlCollection(TableCell) + + @property + def is_hidden(self): + """Return True if this row has .""" + return self.properties is not None and self.properties.hidden is not None \ No newline at end of file diff --git a/pydocx/openxml/wordprocessing/table_row_properties.py b/pydocx/openxml/wordprocessing/table_row_properties.py new file mode 100644 index 00000000..1201b4c7 --- /dev/null +++ b/pydocx/openxml/wordprocessing/table_row_properties.py @@ -0,0 +1,17 @@ +# coding: utf-8 +from __future__ import ( + absolute_import, + print_function, + unicode_literals, +) + +from pydocx.models import XmlModel, XmlChild + + +class TableRowProperties(XmlModel): + XML_TAG = 'trPr' + + # The presence of means the row is hidden. + # XmlChild without attrname returns the raw element if found, + # or None (default) if absent — so bool(hidden) works directly. + hidden = XmlChild(name='hidden') \ No newline at end of file