text: from __future__ import absolute_import
  # Copyright (c) 2010-2016 openpyxl
  
  #standard lib imports
  from copy import copy
  
  #openpyxl imports
  from openpyxl.comments import Comment
  from openpyxl.worksheet import Worksheet
  
  
  class WorksheetCopy(object):
      """
      Copy the values, styles, dimensions and merged cells 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)
  
  
      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
  