numbers-parser 4.10.5__tar.gz → 4.11.2__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/PKG-INFO +3 -3
  2. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/README.md +2 -2
  3. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/pyproject.toml +3 -2
  4. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/cell.py +52 -30
  5. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/constants.py +1 -0
  6. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/document.py +48 -13
  7. numbers_parser-4.11.2/src/numbers_parser/generated/TNArchives_pb2.py +119 -0
  8. numbers_parser-4.11.2/src/numbers_parser/generated/TNCommandArchives_pb2.py +118 -0
  9. numbers_parser-4.11.2/src/numbers_parser/generated/TSAArchives_pb2.py +124 -0
  10. numbers_parser-4.11.2/src/numbers_parser/generated/TSCHArchives_pb2.py +149 -0
  11. numbers_parser-4.11.2/src/numbers_parser/generated/TSCKArchives_pb2.py +162 -0
  12. numbers_parser-4.11.2/src/numbers_parser/generated/TSCKArchives_sos_pb2.py +31 -0
  13. numbers_parser-4.11.2/src/numbers_parser/generated/TSDCommandArchives_pb2.py +161 -0
  14. numbers_parser-4.11.2/src/numbers_parser/generated/TSKArchives_pb2.py +146 -0
  15. numbers_parser-4.11.2/src/numbers_parser/generated/TSSArchives_pb2.py +64 -0
  16. numbers_parser-4.11.2/src/numbers_parser/generated/TSTArchives_pb2.py +441 -0
  17. numbers_parser-4.11.2/src/numbers_parser/generated/TSWPArchives_pb2.py +289 -0
  18. numbers_parser-4.11.2/src/numbers_parser/generated/TSWPCommandArchives_pb2.py +133 -0
  19. {numbers_parser-4.10.5/src/numbers_parser → numbers_parser-4.11.2/src/numbers_parser/generated}/mapping.py +63 -61
  20. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/iwafile.py +2 -2
  21. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/iwork.py +2 -2
  22. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/model.py +69 -59
  23. numbers_parser-4.10.5/src/numbers_parser/generated/TNArchives_pb2.py +0 -118
  24. numbers_parser-4.10.5/src/numbers_parser/generated/TNCommandArchives_pb2.py +0 -117
  25. numbers_parser-4.10.5/src/numbers_parser/generated/TSAArchives_pb2.py +0 -123
  26. numbers_parser-4.10.5/src/numbers_parser/generated/TSCHArchives_pb2.py +0 -148
  27. numbers_parser-4.10.5/src/numbers_parser/generated/TSDCommandArchives_pb2.py +0 -160
  28. numbers_parser-4.10.5/src/numbers_parser/generated/TSKArchives_pb2.py +0 -283
  29. numbers_parser-4.10.5/src/numbers_parser/generated/TSKArchives_sos_pb2.py +0 -31
  30. numbers_parser-4.10.5/src/numbers_parser/generated/TSSArchives_pb2.py +0 -64
  31. numbers_parser-4.10.5/src/numbers_parser/generated/TSTArchives_pb2.py +0 -440
  32. numbers_parser-4.10.5/src/numbers_parser/generated/TSWPArchives_pb2.py +0 -288
  33. numbers_parser-4.10.5/src/numbers_parser/generated/TSWPCommandArchives_pb2.py +0 -132
  34. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/LICENSE.rst +0 -0
  35. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/__init__.py +0 -0
  36. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/_cat_numbers.py +0 -0
  37. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/_unpack_numbers.py +0 -0
  38. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/bullets.py +0 -0
  39. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/containers.py +0 -0
  40. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/currencies.py +0 -0
  41. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/data/empty.numbers +0 -0
  42. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/exceptions.py +0 -0
  43. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/experimental.py +0 -0
  44. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/formula.py +0 -0
  45. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TNArchives_sos_pb2.py +0 -0
  46. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TNCommandArchives_sos_pb2.py +0 -0
  47. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSAArchives_sos_pb2.py +0 -0
  48. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSACommandArchives_sos_pb2.py +0 -0
  49. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSCEArchives_pb2.py +0 -0
  50. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSCH3DArchives_pb2.py +0 -0
  51. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSCHArchives_Common_pb2.py +0 -0
  52. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSCHArchives_GEN_pb2.py +0 -0
  53. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSCHArchives_sos_pb2.py +0 -0
  54. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSCHCommandArchives_pb2.py +0 -0
  55. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSCHPreUFFArchives_pb2.py +0 -0
  56. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSDArchives_pb2.py +0 -0
  57. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSDArchives_sos_pb2.py +0 -0
  58. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSPArchiveMessages_pb2.py +0 -0
  59. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSPDatabaseMessages_pb2.py +0 -0
  60. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSPMessages_pb2.py +0 -0
  61. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSSArchives_sos_pb2.py +0 -0
  62. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSTArchives_sos_pb2.py +0 -0
  63. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSTCommandArchives_pb2.py +0 -0
  64. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSTStylePropertyArchiving_pb2.py +0 -0
  65. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/TSWPArchives_sos_pb2.py +0 -0
  66. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/__init__.py +0 -0
  67. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/fontmap.py +0 -0
  68. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/generated/functionmap.py +0 -0
  69. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/numbers_cache.py +0 -0
  70. {numbers_parser-4.10.5 → numbers_parser-4.11.2}/src/numbers_parser/numbers_uuid.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: numbers-parser
3
- Version: 4.10.5
3
+ Version: 4.11.2
4
4
  Summary: Read and write Apple Numbers spreadsheets
5
5
  Home-page: https://github.com/masaccio/numbers-parser
6
6
  License: MIT
@@ -34,8 +34,8 @@ Description-Content-Type: text/markdown
34
34
  [![Test Status](https://github.com/masaccio/numbers-parser/actions/workflows/run-all-tests.yml/badge.svg)](https://github.com/masaccio/numbers-parser/actions/workflows/run-all-tests.yml)[![Security Checks](https://github.com/masaccio/numbers-parser/actions/workflows/codeql.yml/badge.svg)](https://github.com/masaccio/numbers-parser/actions/workflows/codeql.yml)[![Code Coverage](https://codecov.io/gh/masaccio/numbers-parser/branch/main/graph/badge.svg?token=EKIUFGT05E)](https://codecov.io/gh/masaccio/numbers-parser)[![PyPI Version](https://badge.fury.io/py/numbers-parser.svg)](https://badge.fury.io/py/numbers-parser)
35
35
 
36
36
  `numbers-parser` is a Python module for parsing [Apple Numbers](https://www.apple.com/numbers/)`.numbers` files. It supports Numbers files
37
- generated by Numbers version 10.3, and up with the latest tested version being 13.2
38
- (current as of September 2023).
37
+ generated by Numbers version 10.3, and up with the latest tested version being 14.1
38
+ (current as of June 2024).
39
39
 
40
40
  It supports and is tested against Python versions from 3.9 onwards. It is not compatible
41
41
  with earlier versions of Python.
@@ -3,8 +3,8 @@
3
3
  [![Test Status](https://github.com/masaccio/numbers-parser/actions/workflows/run-all-tests.yml/badge.svg)](https://github.com/masaccio/numbers-parser/actions/workflows/run-all-tests.yml)[![Security Checks](https://github.com/masaccio/numbers-parser/actions/workflows/codeql.yml/badge.svg)](https://github.com/masaccio/numbers-parser/actions/workflows/codeql.yml)[![Code Coverage](https://codecov.io/gh/masaccio/numbers-parser/branch/main/graph/badge.svg?token=EKIUFGT05E)](https://codecov.io/gh/masaccio/numbers-parser)[![PyPI Version](https://badge.fury.io/py/numbers-parser.svg)](https://badge.fury.io/py/numbers-parser)
4
4
 
5
5
  `numbers-parser` is a Python module for parsing [Apple Numbers](https://www.apple.com/numbers/)`.numbers` files. It supports Numbers files
6
- generated by Numbers version 10.3, and up with the latest tested version being 13.2
7
- (current as of September 2023).
6
+ generated by Numbers version 10.3, and up with the latest tested version being 14.1
7
+ (current as of June 2024).
8
8
 
9
9
  It supports and is tested against Python versions from 3.9 onwards. It is not compatible
10
10
  with earlier versions of Python.
@@ -12,7 +12,7 @@ name = "numbers-parser"
12
12
  packages = [{include = "numbers_parser", from = "src"}]
13
13
  readme = "README.md"
14
14
  repository = "https://github.com/masaccio/numbers-parser"
15
- version = "4.10.5"
15
+ version = "4.11.2"
16
16
 
17
17
  [tool.poetry.scripts]
18
18
  cat-numbers = "numbers_parser._cat_numbers:main"
@@ -108,10 +108,11 @@ profile = "black"
108
108
  exclude = [
109
109
  # Machine-generated files
110
110
  ".bootstrap/*",
111
+ ".tox/*",
112
+ ".vscode/*",
111
113
  "src/numbers_parser/generated/*",
112
114
  # Third-party files not to lint
113
115
  "src/debug/lldbutil.py", # Tox
114
- ".tox/*",
115
116
  ]
116
117
  fix = true
117
118
  ignore = [
@@ -399,9 +399,9 @@ class Border:
399
399
 
400
400
  .. code-block:: python
401
401
 
402
- border_style = Border(8.0, RGB(29, 177, 0)
403
- table.set_cell_border("B6", "left", border_style, "solid"), 3)
404
- table.set_cell_border(6, 1, "right", border_style, "dashes"))
402
+ border_style = Border(8.0, RGB(29, 177, 0), "solid")
403
+ table.set_cell_border("B6", "left", border_style, 3)
404
+ table.set_cell_border(6, 1, "right", border_style)
405
405
 
406
406
  Parameters
407
407
  ----------
@@ -587,8 +587,9 @@ class CellStorageFlags:
587
587
 
588
588
  class Cell(CellStorageFlags, Cacheable):
589
589
  """.. NOTE::
590
- Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
591
- """
590
+
591
+ Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
592
+ """ # fmt: skip
592
593
 
593
594
  def __init__(self, row: int, col: int, value) -> None:
594
595
  self._value = value
@@ -679,7 +680,7 @@ class Cell(CellStorageFlags, Cacheable):
679
680
  bullet or numbering character. Newlines are not included in the
680
681
  bullet list.
681
682
 
682
- Example:
683
+ Example
683
684
  -------
684
685
  .. code-block:: python
685
686
 
@@ -741,7 +742,7 @@ class Cell(CellStorageFlags, Cacheable):
741
742
  def style(self) -> Union[Style, None]:
742
743
  """Style | None: The :class:`Style` associated with the cell or ``None``.
743
744
 
744
- Warns:
745
+ Warns
745
746
  -----
746
747
  UnsupportedWarning: On assignment; use
747
748
  :py:meth:`numbers_parser.Table.set_cell_style` instead.
@@ -762,7 +763,7 @@ class Cell(CellStorageFlags, Cacheable):
762
763
  def border(self) -> Union[CellBorder, None]:
763
764
  """CellBorder| None: The :class:`CellBorder` associated with the cell or ``None``.
764
765
 
765
- Warns:
766
+ Warns
766
767
  -----
767
768
  UnsupportedWarning: On assignment; use
768
769
  :py:meth:`numbers_parser.Table.set_cell_border` instead.
@@ -820,7 +821,12 @@ class Cell(CellStorageFlags, Cacheable):
820
821
 
821
822
  @classmethod
822
823
  def _from_storage( # noqa: PLR0913, PLR0912
823
- cls, table_id: int, row: int, col: int, buffer: bytearray, model: object,
824
+ cls,
825
+ table_id: int,
826
+ row: int,
827
+ col: int,
828
+ buffer: bytearray,
829
+ model: object,
824
830
  ) -> None:
825
831
  d128 = None
826
832
  double = None
@@ -1029,7 +1035,7 @@ class Cell(CellStorageFlags, Cacheable):
1029
1035
  flags = 2
1030
1036
  length += 8
1031
1037
  cell_type = TSTArchives.durationCellType
1032
- value = value = pack("<d", float(self.value.total_seconds()))
1038
+ value = pack("<d", float(self.value.total_seconds()))
1033
1039
  elif isinstance(self, EmptyCell):
1034
1040
  flags = 0
1035
1041
  cell_type = TSTArchives.emptyCellValueType
@@ -1139,8 +1145,12 @@ class Cell(CellStorageFlags, Cacheable):
1139
1145
 
1140
1146
  image_id = style.cell_properties.cell_fill.image.imagedata.identifier
1141
1147
  datas = self._model.objects[PACKAGE_ID].datas
1142
- stored_filename = next(x.file_name for x in datas if x.identifier == image_id)
1143
- preferred_filename = next(x.preferred_file_name for x in datas if x.identifier == image_id)
1148
+ stored_filename = next(
1149
+ x.file_name for x in datas if x.identifier == image_id
1150
+ ) # pragma: nocover (issue-1333)
1151
+ preferred_filename = next(
1152
+ x.preferred_file_name for x in datas if x.identifier == image_id
1153
+ ) # pragma: nocover (issue-1333)
1144
1154
  all_paths = self._model.objects.file_store.keys()
1145
1155
  image_pathnames = [x for x in all_paths if x == f"Data/{stored_filename}"]
1146
1156
 
@@ -1186,7 +1196,9 @@ class Cell(CellStorageFlags, Cacheable):
1186
1196
  )
1187
1197
  else:
1188
1198
  formatted_value = _decode_number_format(
1189
- custom_format, self._d128, format_map[format_uuid].name,
1199
+ custom_format,
1200
+ self._d128,
1201
+ format_map[format_uuid].name,
1190
1202
  )
1191
1203
  elif format.format_type == FormatType.DECIMAL:
1192
1204
  return _format_decimal(self._d128, format)
@@ -1344,8 +1356,9 @@ class Cell(CellStorageFlags, Cacheable):
1344
1356
 
1345
1357
  class NumberCell(Cell):
1346
1358
  """.. NOTE::
1347
- Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1348
- """
1359
+
1360
+ Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1361
+ """ # fmt: skip
1349
1362
 
1350
1363
  def __init__(self, row: int, col: int, value: float, cell_type=CellType.NUMBER) -> None:
1351
1364
  self._type = cell_type
@@ -1368,8 +1381,9 @@ class TextCell(Cell):
1368
1381
 
1369
1382
  class RichTextCell(Cell):
1370
1383
  """.. NOTE::
1371
- Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1372
- """
1384
+
1385
+ Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1386
+ """ # fmt: skip
1373
1387
 
1374
1388
  def __init__(self, row: int, col: int, value) -> None:
1375
1389
  super().__init__(row, col, value["text"])
@@ -1411,7 +1425,7 @@ class RichTextCell(Cell):
1411
1425
  of cells where :py:attr:`numbers_parser.Cell.is_bulleted` is ``True`` is a
1412
1426
  list of text and URL tuples.
1413
1427
 
1414
- Example:
1428
+ Example
1415
1429
  -------
1416
1430
  .. code-block:: python
1417
1431
 
@@ -1428,8 +1442,9 @@ class BulletedTextCell(RichTextCell):
1428
1442
 
1429
1443
  class EmptyCell(Cell):
1430
1444
  """.. NOTE::
1431
- Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1432
- """
1445
+
1446
+ Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1447
+ """ # fmt: skip
1433
1448
 
1434
1449
  def __init__(self, row: int, col: int) -> None:
1435
1450
  super().__init__(row, col, None)
@@ -1446,8 +1461,9 @@ class EmptyCell(Cell):
1446
1461
 
1447
1462
  class BoolCell(Cell):
1448
1463
  """.. NOTE::
1449
- Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1450
- """
1464
+
1465
+ Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1466
+ """ # fmt: skip
1451
1467
 
1452
1468
  def __init__(self, row: int, col: int, value: bool) -> None:
1453
1469
  super().__init__(row, col, value)
@@ -1461,8 +1477,9 @@ class BoolCell(Cell):
1461
1477
 
1462
1478
  class DateCell(Cell):
1463
1479
  """.. NOTE::
1464
- Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1465
- """
1480
+
1481
+ Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1482
+ """ # fmt: skip
1466
1483
 
1467
1484
  def __init__(self, row: int, col: int, value: DateTime) -> None:
1468
1485
  super().__init__(row, col, value)
@@ -1485,8 +1502,9 @@ class DurationCell(Cell):
1485
1502
 
1486
1503
  class ErrorCell(Cell):
1487
1504
  """.. NOTE::
1488
- Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1489
- """
1505
+
1506
+ Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1507
+ """ # fmt: skip
1490
1508
 
1491
1509
  def __init__(self, row: int, col: int) -> None:
1492
1510
  super().__init__(row, col, None)
@@ -1499,8 +1517,9 @@ class ErrorCell(Cell):
1499
1517
 
1500
1518
  class MergedCell(Cell):
1501
1519
  """.. NOTE::
1502
- Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1503
- """
1520
+
1521
+ Do not instantiate directly. Cells are created by :py:class:`~numbers_parser.Document`.
1522
+ """ # fmt: skip
1504
1523
 
1505
1524
  def __init__(self, row: int, col: int) -> None:
1506
1525
  super().__init__(row, col, None)
@@ -1643,7 +1662,8 @@ def _decode_number_format(format, value, name): # noqa: PLR0912
1643
1662
  if format.currency_code != "":
1644
1663
  # Replace currency code with symbol and no-break space
1645
1664
  custom_format_string = custom_format_string.replace(
1646
- "\u00a4", format.currency_code + "\u00a0",
1665
+ "\u00a4",
1666
+ format.currency_code + "\u00a0",
1647
1667
  )
1648
1668
 
1649
1669
  if (match := re.search(r"([#0.,]+(E[+]\d+)?)", custom_format_string)) is None:
@@ -1794,7 +1814,9 @@ def _format_decimal(value: float, format, percent: bool = False) -> str:
1794
1814
  else:
1795
1815
  formatted_value = sigfig.round(value, MAX_SIGNIFICANT_DIGITS, type=str, warn=False)
1796
1816
  formatted_value = sigfig.round(
1797
- formatted_value, decimals=format.decimal_places, type=str,
1817
+ formatted_value,
1818
+ decimals=format.decimal_places,
1819
+ type=str,
1798
1820
  )
1799
1821
  if format.show_thousands_separator:
1800
1822
  formatted_value = sigfig.round(formatted_value, spacer=",", spacing=3, type=str)
@@ -87,6 +87,7 @@ SUPPORTED_NUMBERS_VERSIONS = [
87
87
  "13.1",
88
88
  "13.2",
89
89
  "14.0",
90
+ "14.1",
90
91
  ]
91
92
 
92
93
 
@@ -199,7 +199,13 @@ class Document:
199
199
  Table(
200
200
  self._model,
201
201
  self._model.add_table(
202
- new_sheet_id, table_name, prev_table_id, 0, 0, num_rows, num_cols,
202
+ new_sheet_id,
203
+ table_name,
204
+ prev_table_id,
205
+ 0,
206
+ 0,
207
+ num_rows,
208
+ num_cols,
203
209
  ),
204
210
  ),
205
211
  )
@@ -402,7 +408,13 @@ class Sheet:
402
408
  return self._add_table(table_name, from_table_id, x, y, num_rows, num_cols)
403
409
 
404
410
  def _add_table( # noqa: PLR0913
405
- self, table_name, from_table_id, x, y, num_rows, num_cols,
411
+ self,
412
+ table_name,
413
+ from_table_id,
414
+ x,
415
+ y,
416
+ num_rows,
417
+ num_cols,
406
418
  ) -> object:
407
419
  if table_name is not None:
408
420
  if table_name in self._tables:
@@ -415,7 +427,13 @@ class Sheet:
415
427
  table_name = f"Table {table_num}"
416
428
 
417
429
  new_table_id = self._model.add_table(
418
- self._sheet_id, table_name, from_table_id, x, y, num_rows, num_cols,
430
+ self._sheet_id,
431
+ table_name,
432
+ from_table_id,
433
+ x,
434
+ y,
435
+ num_rows,
436
+ num_cols,
419
437
  )
420
438
  self._tables.append(Table(self._model, new_table_id))
421
439
  return self._tables[-1]
@@ -465,18 +483,36 @@ class Table(Cacheable):
465
483
  def table_name_enabled(self, enabled: bool):
466
484
  self._model.table_name_enabled(self._table_id, enabled)
467
485
 
486
+ @property
487
+ def caption_enabled(self) -> int:
488
+ """bool: ``True`` if the table caption is visible, ``False`` otherwise."""
489
+ return self._model.caption_enabled(self._table_id)
490
+
491
+ @caption_enabled.setter
492
+ def caption_enabled(self, enabled: bool) -> None:
493
+ self._model.caption_enabled(self._table_id, enabled)
494
+
495
+ @property
496
+ def caption(self) -> str:
497
+ """str: The table's caption text."""
498
+ return self._model.caption_text(self._table_id)
499
+
500
+ @caption.setter
501
+ def caption(self, caption: str) -> None:
502
+ self._model.caption_text(self._table_id, caption)
503
+
468
504
  @property
469
505
  def num_header_rows(self) -> int:
470
506
  """int: The number of header rows.
471
507
 
472
- Example:
508
+ Example
473
509
  -------
474
510
  .. code-block:: python
475
511
 
476
512
  # Add an extra header row
477
513
  table.num_header_rows += 1
478
514
 
479
- Raises:
515
+ Raises
480
516
  ------
481
517
  ValueError:
482
518
  If the number of headers is negative, exceeds the number of rows in the
@@ -501,14 +537,14 @@ class Table(Cacheable):
501
537
  def num_header_cols(self) -> int:
502
538
  """int: The number of header columns.
503
539
 
504
- Example:
540
+ Example
505
541
  -------
506
542
  .. code-block:: python
507
543
 
508
544
  # Add an extra header column
509
545
  table.num_header_cols += 1
510
546
 
511
- Raises:
547
+ Raises
512
548
  ------
513
549
  ValueError:
514
550
  If the number of headers is negative, exceeds the number of rows in the
@@ -605,7 +641,7 @@ class Table(Cacheable):
605
641
  def merge_ranges(self) -> List[str]:
606
642
  """List[str]: The merge ranges of cells in A1 notation.
607
643
 
608
- Example:
644
+ Example
609
645
  -------
610
646
  .. code-block:: python
611
647
 
@@ -1160,13 +1196,13 @@ class Table(Cacheable):
1160
1196
  * **param3** (:py:class:`Border`): The border to add.
1161
1197
  * **param4** (*int*, *optional*, default: 1): The length of the stroke to add.
1162
1198
 
1163
- Raises:
1199
+ Raises
1164
1200
  ------
1165
1201
  TypeError:
1166
1202
  If an invalid number of arguments is passed or if the types of the arguments
1167
1203
  are invalid.
1168
1204
 
1169
- Warns:
1205
+ Warns
1170
1206
  -----
1171
1207
  RuntimeWarning:
1172
1208
  If any of the sides to which the border is applied have been merged.
@@ -1438,6 +1474,7 @@ class Table(Cacheable):
1438
1474
  def _set_cell_data_format(self, row: int, col: int, format_type_name: str, **kwargs) -> None:
1439
1475
  try:
1440
1476
  format_type = FormattingType[format_type_name.upper()]
1477
+ _ = FORMATTING_ALLOWED_CELLS[format_type_name]
1441
1478
  except (KeyError, AttributeError):
1442
1479
  msg = f"unsuported cell format type '{format_type_name}'"
1443
1480
  raise TypeError(msg) from None
@@ -1462,9 +1499,7 @@ class Table(Cacheable):
1462
1499
  try:
1463
1500
  control_format = kwargs["control_format"].name
1464
1501
  number_format_type = FormattingType[control_format]
1465
- is_currency = (
1466
- kwargs["control_format"] == ControlFormattingType.CURRENCY
1467
- )
1502
+ is_currency = kwargs["control_format"] == ControlFormattingType.CURRENCY
1468
1503
  except (KeyError, AttributeError):
1469
1504
  control_format = kwargs["control_format"]
1470
1505
  msg = f"unsupported number format '{control_format}' for {format_type_name}"
@@ -0,0 +1,119 @@
1
+ # -*- coding: utf-8 -*-
2
+ # Generated by the protocol buffer compiler. DO NOT EDIT!
3
+ # source: TNArchives.proto
4
+ """Generated protocol buffer code."""
5
+ from google.protobuf.internal import builder as _builder
6
+ from google.protobuf import descriptor as _descriptor
7
+ from google.protobuf import descriptor_pool as _descriptor_pool
8
+ from google.protobuf import symbol_database as _symbol_database
9
+ # @@protoc_insertion_point(imports)
10
+
11
+ _sym_db = _symbol_database.Default()
12
+
13
+
14
+ import numbers_parser.generated.TSPMessages_pb2 as TSPMessages__pb2
15
+ import numbers_parser.generated.TSKArchives_pb2 as TSKArchives__pb2
16
+ import numbers_parser.generated.TSCKArchives_pb2 as TSCKArchives__pb2
17
+ import numbers_parser.generated.TSCHArchives_pb2 as TSCHArchives__pb2
18
+ import numbers_parser.generated.TSCEArchives_pb2 as TSCEArchives__pb2
19
+ import numbers_parser.generated.TSSArchives_pb2 as TSSArchives__pb2
20
+ import numbers_parser.generated.TSDArchives_pb2 as TSDArchives__pb2
21
+ import numbers_parser.generated.TSWPArchives_pb2 as TSWPArchives__pb2
22
+ import numbers_parser.generated.TSAArchives_pb2 as TSAArchives__pb2
23
+ import numbers_parser.generated.TSTArchives_pb2 as TSTArchives__pb2
24
+
25
+
26
+ DESCRIPTOR = _descriptor_pool.Default().AddSerializedFile(b'\n\x10TNArchives.proto\x12\x02TN\x1a\x11TSPMessages.proto\x1a\x11TSKArchives.proto\x1a\x12TSCKArchives.proto\x1a\x12TSCHArchives.proto\x1a\x12TSCEArchives.proto\x1a\x11TSSArchives.proto\x1a\x11TSDArchives.proto\x1a\x12TSWPArchives.proto\x1a\x11TSAArchives.proto\x1a\x11TSTArchives.proto\"\xcd\x03\n\x13SheetUIStateArchive\x12\x12\n\nview_scale\x18\x01 \x02(\x02\x12#\n\x0fscroll_position\x18\x02 \x02(\x0b\x32\n.TSP.Point\x12\x1b\n\x13previous_view_scale\x18\x03 \x01(\x02\x12#\n\x1bscroll_position_is_unscaled\x18\x04 \x01(\x08\x12,\n\x18previous_scroll_position\x18\x05 \x01(\x0b\x32\n.TSP.Point\x12\x1d\n\x15scroll_position_valid\x18\x06 \x01(\x08\x12&\n\x1eprevious_scroll_position_valid\x18\x07 \x01(\x08\x12\x1f\n\x0cvisible_size\x18\x08 \x01(\x0b\x32\t.TSP.Size\x12(\n\x15previous_visible_size\x18\t \x01(\x0b\x32\t.TSP.Size\x12\x14\n\x0c\x64\x65vice_idiom\x18\n \x01(\r\x12\x31\n\x0eselection_path\x18\x0b \x01(\x0b\x32\x19.TSK.SelectionPathArchive\x12\x32\n\x1aselection_path_transformer\x18\x0c \x01(\x0b\x32\x0e.TSP.Reference\"s\n\"SheetUIStateDictionaryEntryArchive\x12\x1d\n\x05sheet\x18\x01 \x02(\x0b\x32\x0e.TSP.Reference\x12.\n\rsheet_uistate\x18\x02 \x02(\x0b\x32\x17.TN.SheetUIStateArchive\"r\n!UUIDSheetUIStateDictionaryArchive\x12\x1d\n\nsheet_uuid\x18\x01 \x02(\x0b\x32\t.TSP.UUID\x12.\n\rsheet_uistate\x18\x02 \x02(\x0b\x32\x17.TN.SheetUIStateArchive\"\x86\x0c\n\x0eUIStateArchive\x12\x1e\n\x12\x61\x63tive_sheet_index\x18\x01 \x02(\rB\x02\x18\x01\x12)\n\rselected_info\x18\x02 \x03(\x0b\x32\x0e.TSP.ReferenceB\x02\x18\x01\x12R\n\x1esheet_uistate_dictionary_entry\x18\x03 \x03(\x0b\x32&.TN.SheetUIStateDictionaryEntryArchiveB\x02\x18\x01\x12\x32\n\x0ftable_selection\x18\x04 \x01(\x0b\x32\x15.TST.SelectionArchiveB\x02\x18\x01\x12\x1f\n\x13\x65\x64iting_sheet_index\x18\x05 \x01(\rB\x02\x18\x01\x12\x15\n\rdocument_mode\x18\x06 \x01(\x05\x12\\\n(edit_mode_sheet_uistate_dictionary_entry\x18\x07 \x03(\x0b\x32&.TN.SheetUIStateDictionaryEntryArchiveB\x02\x18\x01\x12\x1e\n\x12table_editing_mode\x18\x08 \x01(\x05\x42\x02\x18\x01\x12%\n\x19\x66orm_focused_record_index\x18\t \x01(\rB\x02\x18\x01\x12$\n\x18\x66orm_focused_field_index\x18\n \x01(\rB\x02\x18\x01\x12\x15\n\rin_chart_mode\x18\x0b \x01(\x08\x12\x36\n\x0f\x63hart_selection\x18\x0c \x01(\x0b\x32\x19.TN.ChartSelectionArchiveB\x02\x18\x01\x12+\n\x0fsheet_selection\x18\r \x01(\x0b\x32\x0e.TSP.ReferenceB\x02\x18\x01\x12$\n\x16inspector_pane_visible\x18\x0e \x01(\x08:\x04true\x12h\n\x18inspector_pane_view_mode\x18\x0f \x01(\x0e\x32(.TN.UIStateArchive.InspectorPaneViewMode:\x1ckInspectorPaneViewModeFormat\x12%\n\x1dselected_quick_calc_functions\x18\x10 \x03(\r\x12(\n removed_all_quick_calc_functions\x18\x11 \x01(\x08\x12\x1a\n\x12show_canvas_guides\x18\x12 \x01(\x08\x12\x16\n\x0eshows_comments\x18\x13 \x01(\x08\x12)\n\x15\x64\x65sktop_window_origin\x18\x14 \x01(\x0b\x32\n.TSP.Point\x12&\n\x13\x64\x65sktop_window_size\x18\x15 \x01(\x0b\x32\t.TSP.Size\x12&\n\x13\x64\x65sktop_screen_size\x18\x16 \x01(\x0b\x32\t.TSP.Size\x12*\n\x0e\x63hart_ui_state\x18\x17 \x03(\x0b\x32\x12.TSCH.ChartUIState\x12\x31\n\x0eselection_path\x18\x18 \x01(\x0b\x32\x19.TSK.SelectionPathArchive\x12!\n\x19inspector_pane_autohidden\x18\x19 \x01(\x08\x12\x19\n\rshows_sidebar\x18\x1a \x01(\x08\x42\x02\x18\x01\x12\x14\n\x0cshows_rulers\x18\x1b \x01(\x08\x12L\n\x1duuid_sheet_uistate_dictionary\x18\x1c \x03(\x0b\x32%.TN.UUIDSheetUIStateDictionaryArchive\x12\x36\n\x1e\x66reehand_drawing_toolkit_state\x18\x1d \x01(\x0b\x32\x0e.TSP.Reference\x12\x32\n\x1aselection_path_transformer\x18\x1e \x01(\x0b\x32\x0e.TSP.Reference\x12\x18\n\x10\x65\x64iting_disabled\x18\x1f \x01(\x08\x12\x17\n\x0fsidebar_visible\x18 \x01(\x08\x12\x15\n\rsidebar_width\x18! \x01(\x02\"[\n\x15InspectorPaneViewMode\x12 \n\x1ckInspectorPaneViewModeFormat\x10\x00\x12 \n\x1ckInspectorPaneViewModeFilter\x10\x01\"I\n\x15SheetSelectionArchive\x12\x1d\n\x05sheet\x18\x01 \x01(\x0b\x32\x0e.TSP.Reference\x12\x11\n\tpaginated\x18\x02 \x01(\x08\"A\n\x14\x46ormSelectionArchive\x12\x14\n\x0crecord_index\x18\x01 \x02(\r\x12\x13\n\x0b\x66ield_index\x18\x02 \x02(\r\";\n\x1b\x46ormBuilderSelectionArchive\x12\x1c\n\x14viewing_record_index\x18\x01 \x01(\r\"\"\n FormTableChooserSelectionArchive\"<\n\x14UndoRedoStateArchive\x12$\n\x08ui_state\x18\x01 \x02(\x0b\x32\x12.TN.UIStateArchive\"\x89\x03\n\x0f\x44ocumentArchive\x12\x1e\n\x06sheets\x18\x01 \x03(\x0b\x32\x0e.TSP.Reference\x12#\n\x05super\x18\x08 \x02(\x0b\x32\x14.TSA.DocumentArchive\x12.\n\x12\x63\x61lculation_engine\x18\x03 \x01(\x0b\x32\x0e.TSP.ReferenceB\x02\x18\x01\x12\"\n\nstylesheet\x18\x04 \x02(\x0b\x32\x0e.TSP.Reference\x12%\n\rsidebar_order\x18\x05 \x02(\x0b\x32\x0e.TSP.Reference\x12\x1d\n\x05theme\x18\x06 \x02(\x0b\x32\x0e.TSP.Reference\x12#\n\x07uistate\x18\x07 \x01(\x0b\x32\x12.TN.UIStateArchive\x12*\n\x12\x63ustom_format_list\x18\t \x01(\x0b\x32\x0e.TSP.Reference\x12\x16\n\nprinter_id\x18\n \x01(\tB\x02\x18\x01\x12\x10\n\x08paper_id\x18\x0b \x01(\t\x12\x1c\n\tpage_size\x18\x0c \x01(\x0b\x32\t.TSP.Size\";\n\x12PlaceholderArchive\x12%\n\x05super\x18\x01 \x02(\x0b\x32\x16.TSWP.ShapeInfoArchive\"\xb5\x06\n\x0cSheetArchive\x12\x0c\n\x04name\x18\x01 \x02(\t\x12&\n\x0e\x64rawable_infos\x18\x02 \x03(\x0b\x32\x0e.TSP.Reference\x12$\n\x1cin_portrait_page_orientation\x18\x03 \x01(\x08\x12\"\n\x16show_repeating_headers\x18\x04 \x01(\x08\x42\x02\x18\x01\x12\x19\n\x11show_page_numbers\x18\x05 \x01(\x08\x12\x15\n\ris_autofit_on\x18\x06 \x01(\x08\x12\x15\n\rcontent_scale\x18\x07 \x01(\x02\x12!\n\npage_order\x18\x08 \x01(\x0e\x32\r.TN.PageOrder\x12-\n\rprint_margins\x18\n \x01(\x0b\x32\x16.TSD.EdgeInsetsArchive\x12\x1f\n\x17using_start_page_number\x18\x0b \x01(\x08\x12\x19\n\x11start_page_number\x18\x0c \x01(\x05\x12\x19\n\x11page_header_inset\x18\r \x01(\x02\x12\x19\n\x11page_footer_inset\x18\x0e \x01(\x02\x12*\n\x0eheader_storage\x18\x0f \x01(\x0b\x32\x0e.TSP.ReferenceB\x02\x18\x01\x12*\n\x0e\x66ooter_storage\x18\x10 \x01(\x0b\x32\x0e.TSP.ReferenceB\x02\x18\x01\x12/\n\x17userDefinedGuideStorage\x18\x11 \x01(\x0b\x32\x0e.TSP.Reference\x12\x1f\n\x07headers\x18\x12 \x03(\x0b\x32\x0e.TSP.Reference\x12\x1f\n\x07\x66ooters\x18\x13 \x03(\x0b\x32\x0e.TSP.Reference\x12!\n\x19uses_single_header_footer\x18\x14 \x01(\x08\x12Q\n\x10layout_direction\x18\x15 \x01(\x0e\x32\x17.TN.PageLayoutDirection:\x1ePageLayoutDirectionLeftToRight\x12\x1d\n\x05style\x18\x16 \x01(\x0b\x32\x0e.TSP.Reference\x12\x19\n\x11print_backgrounds\x18\x17 \x01(\x08\x12\x1d\n\x15should_print_comments\x18\x18 \x01(\x08\"=\n\x1bSheetStylePropertiesArchive\x12\x1e\n\x04\x66ill\x18\x01 \x01(\x0b\x32\x10.TSD.FillArchive\"\x88\x01\n\x11SheetStyleArchive\x12 \n\x05super\x18\x01 \x02(\x0b\x32\x11.TSS.StyleArchive\x12\x16\n\x0eoverride_count\x18\x02 \x01(\r\x12\x39\n\x10sheet_properties\x18\x03 \x01(\x0b\x32\x1f.TN.SheetStylePropertiesArchive\"^\n\x15\x46ormBasedSheetArchive\x12\x1f\n\x05super\x18\x01 \x02(\x0b\x32\x10.TN.SheetArchive\x12$\n\x08table_id\x18\x02 \x01(\x0b\x32\x12.TSP.CFUUIDArchive\"T\n\x0cThemeArchive\x12 \n\x05super\x18\x01 \x02(\x0b\x32\x11.TSS.ThemeArchive\x12\"\n\nprototypes\x18\x02 \x03(\x0b\x32\x0e.TSP.Reference\"j\n\x1ePasteboardNativeStorageArchive\x12\x1d\n\x05sheet\x18\x01 \x01(\x0b\x32\x0e.TSP.Reference\x12)\n\x08ui_state\x18\x02 \x01(\x0b\x32\x17.TN.SheetUIStateArchive\"\xc7\x03\n\x1b\x43hartMediatorFormulaStorage\x12+\n\rdata_formulae\x18\x01 \x03(\x0b\x32\x14.TSCE.FormulaArchive\x12\x30\n\x12row_label_formulae\x18\x03 \x03(\x0b\x32\x14.TSCE.FormulaArchive\x12\x30\n\x12\x63ol_label_formulae\x18\x04 \x03(\x0b\x32\x14.TSCE.FormulaArchive\x12\x11\n\tdirection\x18\x05 \x01(\x05\x12\x37\n\x19\x65rror_custom_pos_formulae\x18\x06 \x03(\x0b\x32\x14.TSCE.FormulaArchive\x12\x37\n\x19\x65rror_custom_neg_formulae\x18\x07 \x03(\x0b\x32\x14.TSCE.FormulaArchive\x12@\n\"error_custom_pos_scatterX_formulae\x18\x08 \x03(\x0b\x32\x14.TSCE.FormulaArchive\x12@\n\"error_custom_neg_scatterX_formulae\x18\t \x03(\x0b\x32\x14.TSCE.FormulaArchive\x12\x0e\n\x06scheme\x18\n \x01(\x05\"\xcf\x01\n\x14\x43hartMediatorArchive\x12)\n\x05super\x18\x01 \x02(\x0b\x32\x1a.TSCH.ChartMediatorArchive\x12\x11\n\tentity_id\x18\x02 \x02(\t\x12\x31\n\x08\x66ormulas\x18\x03 \x01(\x0b\x32\x1f.TN.ChartMediatorFormulaStorage\x12\x1a\n\x12\x63olumns_are_series\x18\x04 \x01(\x08\x12*\n\x1eis_registered_with_calc_engine\x18\x05 \x01(\x08\x42\x02\x18\x01\"\xcf\x01\n\x15\x43hartSelectionArchive\x12.\n\treference\x18\x01 \x01(\x0b\x32\x1b.TSCE.RangeReferenceArchive\x12\x39\n\x10\x64\x65precated_super\x18\x02 \x01(\x0b\x32\x1b.TSCH.ChartSelectionArchiveB\x02\x18\x01\x12\x1d\n\x05\x63hart\x18\x03 \x01(\x0b\x32\x0e.TSP.Reference\x12,\n\x05super\x18\x04 \x01(\x0b\x32\x1d.TSD.DrawableSelectionArchive\"Y\n\"FormCommandActivityBehaviorArchive\x12\x33\n\x05super\x18\x01 \x02(\x0b\x32$.TSCK.CommandActivityBehaviorArchive*?\n\tPageOrder\x12\x18\n\x14PageOrderTopToBottom\x10\x00\x12\x18\n\x14PageOrderLeftToRight\x10\x01*]\n\x13PageLayoutDirection\x12\"\n\x1ePageLayoutDirectionLeftToRight\x10\x00\x12\"\n\x1ePageLayoutDirectionRightToLeft\x10\x01')
27
+
28
+ _builder.BuildMessageAndEnumDescriptors(DESCRIPTOR, globals())
29
+ _builder.BuildTopDescriptorsAndMessages(DESCRIPTOR, 'TNArchives_pb2', globals())
30
+ if _descriptor._USE_C_DESCRIPTORS == False:
31
+
32
+ DESCRIPTOR._options = None
33
+ _UISTATEARCHIVE.fields_by_name['active_sheet_index']._options = None
34
+ _UISTATEARCHIVE.fields_by_name['active_sheet_index']._serialized_options = b'\030\001'
35
+ _UISTATEARCHIVE.fields_by_name['selected_info']._options = None
36
+ _UISTATEARCHIVE.fields_by_name['selected_info']._serialized_options = b'\030\001'
37
+ _UISTATEARCHIVE.fields_by_name['sheet_uistate_dictionary_entry']._options = None
38
+ _UISTATEARCHIVE.fields_by_name['sheet_uistate_dictionary_entry']._serialized_options = b'\030\001'
39
+ _UISTATEARCHIVE.fields_by_name['table_selection']._options = None
40
+ _UISTATEARCHIVE.fields_by_name['table_selection']._serialized_options = b'\030\001'
41
+ _UISTATEARCHIVE.fields_by_name['editing_sheet_index']._options = None
42
+ _UISTATEARCHIVE.fields_by_name['editing_sheet_index']._serialized_options = b'\030\001'
43
+ _UISTATEARCHIVE.fields_by_name['edit_mode_sheet_uistate_dictionary_entry']._options = None
44
+ _UISTATEARCHIVE.fields_by_name['edit_mode_sheet_uistate_dictionary_entry']._serialized_options = b'\030\001'
45
+ _UISTATEARCHIVE.fields_by_name['table_editing_mode']._options = None
46
+ _UISTATEARCHIVE.fields_by_name['table_editing_mode']._serialized_options = b'\030\001'
47
+ _UISTATEARCHIVE.fields_by_name['form_focused_record_index']._options = None
48
+ _UISTATEARCHIVE.fields_by_name['form_focused_record_index']._serialized_options = b'\030\001'
49
+ _UISTATEARCHIVE.fields_by_name['form_focused_field_index']._options = None
50
+ _UISTATEARCHIVE.fields_by_name['form_focused_field_index']._serialized_options = b'\030\001'
51
+ _UISTATEARCHIVE.fields_by_name['chart_selection']._options = None
52
+ _UISTATEARCHIVE.fields_by_name['chart_selection']._serialized_options = b'\030\001'
53
+ _UISTATEARCHIVE.fields_by_name['sheet_selection']._options = None
54
+ _UISTATEARCHIVE.fields_by_name['sheet_selection']._serialized_options = b'\030\001'
55
+ _UISTATEARCHIVE.fields_by_name['shows_sidebar']._options = None
56
+ _UISTATEARCHIVE.fields_by_name['shows_sidebar']._serialized_options = b'\030\001'
57
+ _DOCUMENTARCHIVE.fields_by_name['calculation_engine']._options = None
58
+ _DOCUMENTARCHIVE.fields_by_name['calculation_engine']._serialized_options = b'\030\001'
59
+ _DOCUMENTARCHIVE.fields_by_name['printer_id']._options = None
60
+ _DOCUMENTARCHIVE.fields_by_name['printer_id']._serialized_options = b'\030\001'
61
+ _SHEETARCHIVE.fields_by_name['show_repeating_headers']._options = None
62
+ _SHEETARCHIVE.fields_by_name['show_repeating_headers']._serialized_options = b'\030\001'
63
+ _SHEETARCHIVE.fields_by_name['header_storage']._options = None
64
+ _SHEETARCHIVE.fields_by_name['header_storage']._serialized_options = b'\030\001'
65
+ _SHEETARCHIVE.fields_by_name['footer_storage']._options = None
66
+ _SHEETARCHIVE.fields_by_name['footer_storage']._serialized_options = b'\030\001'
67
+ _CHARTMEDIATORARCHIVE.fields_by_name['is_registered_with_calc_engine']._options = None
68
+ _CHARTMEDIATORARCHIVE.fields_by_name['is_registered_with_calc_engine']._serialized_options = b'\030\001'
69
+ _CHARTSELECTIONARCHIVE.fields_by_name['deprecated_super']._options = None
70
+ _CHARTSELECTIONARCHIVE.fields_by_name['deprecated_super']._serialized_options = b'\030\001'
71
+ _PAGEORDER._serialized_start=5503
72
+ _PAGEORDER._serialized_end=5566
73
+ _PAGELAYOUTDIRECTION._serialized_start=5568
74
+ _PAGELAYOUTDIRECTION._serialized_end=5661
75
+ _SHEETUISTATEARCHIVE._serialized_start=219
76
+ _SHEETUISTATEARCHIVE._serialized_end=680
77
+ _SHEETUISTATEDICTIONARYENTRYARCHIVE._serialized_start=682
78
+ _SHEETUISTATEDICTIONARYENTRYARCHIVE._serialized_end=797
79
+ _UUIDSHEETUISTATEDICTIONARYARCHIVE._serialized_start=799
80
+ _UUIDSHEETUISTATEDICTIONARYARCHIVE._serialized_end=913
81
+ _UISTATEARCHIVE._serialized_start=916
82
+ _UISTATEARCHIVE._serialized_end=2458
83
+ _UISTATEARCHIVE_INSPECTORPANEVIEWMODE._serialized_start=2367
84
+ _UISTATEARCHIVE_INSPECTORPANEVIEWMODE._serialized_end=2458
85
+ _SHEETSELECTIONARCHIVE._serialized_start=2460
86
+ _SHEETSELECTIONARCHIVE._serialized_end=2533
87
+ _FORMSELECTIONARCHIVE._serialized_start=2535
88
+ _FORMSELECTIONARCHIVE._serialized_end=2600
89
+ _FORMBUILDERSELECTIONARCHIVE._serialized_start=2602
90
+ _FORMBUILDERSELECTIONARCHIVE._serialized_end=2661
91
+ _FORMTABLECHOOSERSELECTIONARCHIVE._serialized_start=2663
92
+ _FORMTABLECHOOSERSELECTIONARCHIVE._serialized_end=2697
93
+ _UNDOREDOSTATEARCHIVE._serialized_start=2699
94
+ _UNDOREDOSTATEARCHIVE._serialized_end=2759
95
+ _DOCUMENTARCHIVE._serialized_start=2762
96
+ _DOCUMENTARCHIVE._serialized_end=3155
97
+ _PLACEHOLDERARCHIVE._serialized_start=3157
98
+ _PLACEHOLDERARCHIVE._serialized_end=3216
99
+ _SHEETARCHIVE._serialized_start=3219
100
+ _SHEETARCHIVE._serialized_end=4040
101
+ _SHEETSTYLEPROPERTIESARCHIVE._serialized_start=4042
102
+ _SHEETSTYLEPROPERTIESARCHIVE._serialized_end=4103
103
+ _SHEETSTYLEARCHIVE._serialized_start=4106
104
+ _SHEETSTYLEARCHIVE._serialized_end=4242
105
+ _FORMBASEDSHEETARCHIVE._serialized_start=4244
106
+ _FORMBASEDSHEETARCHIVE._serialized_end=4338
107
+ _THEMEARCHIVE._serialized_start=4340
108
+ _THEMEARCHIVE._serialized_end=4424
109
+ _PASTEBOARDNATIVESTORAGEARCHIVE._serialized_start=4426
110
+ _PASTEBOARDNATIVESTORAGEARCHIVE._serialized_end=4532
111
+ _CHARTMEDIATORFORMULASTORAGE._serialized_start=4535
112
+ _CHARTMEDIATORFORMULASTORAGE._serialized_end=4990
113
+ _CHARTMEDIATORARCHIVE._serialized_start=4993
114
+ _CHARTMEDIATORARCHIVE._serialized_end=5200
115
+ _CHARTSELECTIONARCHIVE._serialized_start=5203
116
+ _CHARTSELECTIONARCHIVE._serialized_end=5410
117
+ _FORMCOMMANDACTIVITYBEHAVIORARCHIVE._serialized_start=5412
118
+ _FORMCOMMANDACTIVITYBEHAVIORARCHIVE._serialized_end=5501
119
+ # @@protoc_insertion_point(module_scope)