Skip to content

Commit 832f7db

Browse files
committed
worksheet: add very_hidden() method
Feature request #947
1 parent 47eaf27 commit 832f7db

File tree

6 files changed

+80
-8
lines changed

6 files changed

+80
-8
lines changed

dev/docs/source/worksheet.rst

+14
Original file line numberDiff line numberDiff line change
@@ -2071,6 +2071,20 @@ sheet::
20712071

20722072
See :ref:`ex_hide_sheet` for more details.
20732073

2074+
2075+
worksheet.very_hidden()
2076+
-----------------------
2077+
2078+
.. py:function:: very_hidden()
2079+
2080+
Hide the current worksheet. Can only be unhidden by VBA.
2081+
2082+
The ``very_hidden()`` method can be used to hide a worksheet similar to the
2083+
``hide()`` method. The difference is that the worksheet cannot be unhidden in
2084+
the the Excel user interface. The Excel worksheet "xlSheetVeryHidden" option can
2085+
only be unset programmatically by VBA.
2086+
2087+
20742088
worksheet.set_first_sheet()
20752089
---------------------------
20762090

xlsxwriter/packager.py

+12-7
Original file line numberDiff line numberDiff line change
@@ -306,24 +306,29 @@ def _write_app_file(self):
306306
properties = self.workbook.doc_properties
307307
app = App()
308308

309-
# Add the Worksheet heading pairs.
310-
app._add_heading_pair(["Worksheets", self.worksheet_count])
311-
312-
# Add the Chartsheet heading pairs.
313-
app._add_heading_pair(["Charts", self.chartsheet_count])
314-
315309
# Add the Worksheet parts.
310+
worksheet_count = 0
316311
for worksheet in self.workbook.worksheets():
317312
if worksheet.is_chartsheet:
318313
continue
319-
app._add_part_name(worksheet.name)
314+
315+
# Don't write/count veryHidden sheets.
316+
if worksheet.hidden != 2:
317+
app._add_part_name(worksheet.name)
318+
worksheet_count += 1
319+
320+
# Add the Worksheet heading pairs.
321+
app._add_heading_pair(["Worksheets", worksheet_count])
320322

321323
# Add the Chartsheet parts.
322324
for worksheet in self.workbook.worksheets():
323325
if not worksheet.is_chartsheet:
324326
continue
325327
app._add_part_name(worksheet.name)
326328

329+
# Add the Chartsheet heading pairs.
330+
app._add_heading_pair(["Charts", self.chartsheet_count])
331+
327332
# Add the Named Range heading pairs.
328333
if self.named_ranges:
329334
app._add_heading_pair(["Named Ranges", len(self.named_ranges)])
+35
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
###############################################################################
2+
#
3+
# Tests for XlsxWriter.
4+
#
5+
# SPDX-License-Identifier: BSD-2-Clause
6+
# Copyright (c), 2013-2023, John McNamara, [email protected]
7+
#
8+
9+
from ..excel_comparison_test import ExcelComparisonTest
10+
from ...workbook import Workbook
11+
12+
13+
class TestCompareXLSXFiles(ExcelComparisonTest):
14+
"""
15+
Test file created by XlsxWriter against a file created by Excel.
16+
17+
"""
18+
19+
def setUp(self):
20+
self.set_filename("hide02.xlsx")
21+
22+
def test_create_file(self):
23+
"""Test the creation of a simple XlsxWriter file."""
24+
25+
workbook = Workbook(self.got_filename)
26+
27+
worksheet1 = workbook.add_worksheet()
28+
worksheet2 = workbook.add_worksheet()
29+
worksheet3 = workbook.add_worksheet()
30+
31+
worksheet2.very_hidden()
32+
33+
workbook.close()
34+
35+
self.assertExcelEqual()
Binary file not shown.

xlsxwriter/workbook.py

+3-1
Original file line numberDiff line numberDiff line change
@@ -1933,8 +1933,10 @@ def _write_sheet(self, name, sheet_id, hidden):
19331933
("sheetId", sheet_id),
19341934
]
19351935

1936-
if hidden:
1936+
if hidden == 1:
19371937
attributes.append(("state", "hidden"))
1938+
elif hidden == 2:
1939+
attributes.append(("state", "veryHidden"))
19381940

19391941
attributes.append(("r:id", "rId" + str(sheet_id)))
19401942

xlsxwriter/worksheet.py

+16
Original file line numberDiff line numberDiff line change
@@ -1822,6 +1822,22 @@ def hide(self):
18221822
# A hidden worksheet shouldn't be active or selected.
18231823
self.selected = 0
18241824

1825+
def very_hidden(self):
1826+
"""
1827+
Hide the current worksheet. This can only be unhidden by VBA.
1828+
1829+
Args:
1830+
None.
1831+
1832+
Returns:
1833+
Nothing.
1834+
1835+
"""
1836+
self.hidden = 2
1837+
1838+
# A hidden worksheet shouldn't be active or selected.
1839+
self.selected = 0
1840+
18251841
def set_first_sheet(self):
18261842
"""
18271843
Set current worksheet as the first visible sheet. This is necessary

0 commit comments

Comments
 (0)