Coverage for /var/srv/projects/api.amasfac.comuna18.com/tmp/venv/lib/python3.9/site-packages/openpyxl/worksheet/copier.py: 16%

41 statements  

« prev     ^ index     » next       coverage.py v6.4.4, created at 2023-07-17 14:22 -0600

1# Copyright (c) 2010-2022 openpyxl 

2 

3#standard lib imports 

4from copy import copy 

5 

6from .worksheet import Worksheet 

7 

8 

9class WorksheetCopy(object): 

10 """ 

11 Copy the values, styles, dimensions, merged cells, margins, and 

12 print/page setup from one worksheet to another within the same 

13 workbook. 

14 """ 

15 

16 def __init__(self, source_worksheet, target_worksheet): 

17 self.source = source_worksheet 

18 self.target = target_worksheet 

19 self._verify_resources() 

20 

21 

22 def _verify_resources(self): 

23 

24 if (not isinstance(self.source, Worksheet) 

25 and not isinstance(self.target, Worksheet)): 

26 raise TypeError("Can only copy worksheets") 

27 

28 if self.source is self.target: 

29 raise ValueError("Cannot copy a worksheet to itself") 

30 

31 if self.source.parent != self.target.parent: 

32 raise ValueError('Cannot copy between worksheets from different workbooks') 

33 

34 

35 def copy_worksheet(self): 

36 self._copy_cells() 

37 self._copy_dimensions() 

38 

39 self.target.sheet_format = copy(self.source.sheet_format) 

40 self.target.sheet_properties = copy(self.source.sheet_properties) 

41 self.target.merged_cells = copy(self.source.merged_cells) 

42 self.target.page_margins = copy(self.source.page_margins) 

43 self.target.page_setup = copy(self.source.page_setup) 

44 self.target.print_options = copy(self.source.print_options) 

45 

46 

47 def _copy_cells(self): 

48 for (row, col), source_cell in self.source._cells.items(): 

49 target_cell = self.target.cell(column=col, row=row) 

50 

51 target_cell._value = source_cell._value 

52 target_cell.data_type = source_cell.data_type 

53 

54 if source_cell.has_style: 

55 target_cell._style = copy(source_cell._style) 

56 

57 if source_cell.hyperlink: 

58 target_cell._hyperlink = copy(source_cell.hyperlink) 

59 

60 if source_cell.comment: 

61 target_cell.comment = copy(source_cell.comment) 

62 

63 

64 def _copy_dimensions(self): 

65 for attr in ('row_dimensions', 'column_dimensions'): 

66 src = getattr(self.source, attr) 

67 target = getattr(self.target, attr) 

68 for key, dim in src.items(): 

69 target[key] = copy(dim) 

70 target[key].worksheet = self.target