diff options
Diffstat (limited to '.venv/lib/python3.12/site-packages/openpyxl/worksheet/copier.py')
-rw-r--r-- | .venv/lib/python3.12/site-packages/openpyxl/worksheet/copier.py | 70 |
1 files changed, 70 insertions, 0 deletions
diff --git a/.venv/lib/python3.12/site-packages/openpyxl/worksheet/copier.py b/.venv/lib/python3.12/site-packages/openpyxl/worksheet/copier.py new file mode 100644 index 00000000..f6601540 --- /dev/null +++ b/.venv/lib/python3.12/site-packages/openpyxl/worksheet/copier.py @@ -0,0 +1,70 @@ +# Copyright (c) 2010-2024 openpyxl + +#standard lib imports +from copy import copy + +from .worksheet import Worksheet + + +class WorksheetCopy: + """ + Copy the values, styles, dimensions, merged cells, margins, and + print/page setup from one worksheet to another within the same + workbook. + """ + + def __init__(self, source_worksheet, target_worksheet): + self.source = source_worksheet + self.target = target_worksheet + self._verify_resources() + + + def _verify_resources(self): + + if (not isinstance(self.source, Worksheet) + and not isinstance(self.target, Worksheet)): + raise TypeError("Can only copy worksheets") + + if self.source is self.target: + raise ValueError("Cannot copy a worksheet to itself") + + if self.source.parent != self.target.parent: + raise ValueError('Cannot copy between worksheets from different workbooks') + + + def copy_worksheet(self): + self._copy_cells() + self._copy_dimensions() + + self.target.sheet_format = copy(self.source.sheet_format) + self.target.sheet_properties = copy(self.source.sheet_properties) + self.target.merged_cells = copy(self.source.merged_cells) + self.target.page_margins = copy(self.source.page_margins) + self.target.page_setup = copy(self.source.page_setup) + self.target.print_options = copy(self.source.print_options) + + + def _copy_cells(self): + for (row, col), source_cell in self.source._cells.items(): + target_cell = self.target.cell(column=col, row=row) + + target_cell._value = source_cell._value + target_cell.data_type = source_cell.data_type + + if source_cell.has_style: + target_cell._style = copy(source_cell._style) + + if source_cell.hyperlink: + target_cell._hyperlink = copy(source_cell.hyperlink) + + if source_cell.comment: + target_cell.comment = copy(source_cell.comment) + + + def _copy_dimensions(self): + for attr in ('row_dimensions', 'column_dimensions'): + src = getattr(self.source, attr) + target = getattr(self.target, attr) + for key, dim in src.items(): + target[key] = copy(dim) + target[key].worksheet = self.target |