Advertisement
Guest User

Untitled

a guest
Jan 28th, 2020
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 3.63 KB | None | 0 0
  1.     public function copyRows( Worksheet $sheet, $srcRange, $dstCell, Worksheet $destSheet = null)
  2.     {
  3.         if (!isset($destSheet)) {
  4.             $destSheet = $sheet;
  5.         }
  6.  
  7.         if (!preg_match('/^([A-Z]+)(\d+):([A-Z]+)(\d+)$/', $srcRange, $srcRangeMatch)) {
  8.             // Invalid src range
  9.             return;
  10.         }
  11.  
  12.         if (!preg_match('/^([A-Z]+)(\d+)$/', $dstCell, $destCellMatch)) {
  13.             // Invalid dest cell
  14.             return;
  15.         }
  16.  
  17.         $srcColumnStart = $srcRangeMatch[1];
  18.         $srcRowStart = $srcRangeMatch[2];
  19.         $srcColumnEnd = $srcRangeMatch[3];
  20.         $srcRowEnd = $srcRangeMatch[4];
  21.  
  22.         $destColumnStart = $destCellMatch[1];
  23.         $destRowStart = $destCellMatch[2];
  24.  
  25.         $srcColumnStart = Coordinate::columnIndexFromString($srcColumnStart);
  26.         $srcColumnEnd = Coordinate::columnIndexFromString($srcColumnEnd);
  27.         $destColumnStart = Coordinate::columnIndexFromString($destColumnStart);
  28.  
  29.         $rowCount = 0;
  30.         for ($row = $srcRowStart; $row <= $srcRowEnd; $row++) {
  31.             $colCount = 0;
  32.             for ($col = $srcColumnStart; $col <= $srcColumnEnd; $col++) {
  33.                 $cell = $sheet->getCellByColumnAndRow($col, $row);
  34.                 $style = $sheet->getStyleByColumnAndRow($col, $row);
  35.                 $dstCell = Coordinate::stringFromColumnIndex($destColumnStart + $colCount) . (string)($destRowStart + $rowCount);
  36.                 $destSheet->setCellValue($dstCell, $cell->getValue());
  37.                 $destSheet->duplicateStyle($style, $dstCell);
  38.  
  39.                 // Set width of column, but only once per column
  40.                 if ($rowCount === 0) {
  41.                     $w = $sheet->getColumnDimensionByColumn($col)->getWidth();
  42.                     $destSheet->getColumnDimensionByColumn ($destColumnStart + $colCount)->setAutoSize(false);
  43.                     $destSheet->getColumnDimensionByColumn ($destColumnStart + $colCount)->setWidth($w);
  44.                 }
  45.  
  46.                 $colCount++;
  47.             }
  48.  
  49.             $h = $sheet->getRowDimension($row)->getRowHeight();
  50.             $destSheet->getRowDimension($destRowStart + $rowCount)->setRowHeight($h);
  51.  
  52.             $rowCount++;
  53.         }
  54.  
  55.         foreach ($sheet->getMergeCells() as $mergeCell) {
  56.             $mc = explode(":", $mergeCell);
  57.             $mergeColSrcStart = Coordinate::columnIndexFromString(preg_replace("/[0-9]*/", "", $mc[0]));
  58.             $mergeColSrcEnd = Coordinate::columnIndexFromString(preg_replace("/[0-9]*/", "", $mc[1]));
  59.             $mergeRowSrcStart = ((int)preg_replace("/[A-Z]*/", "", $mc[0]));
  60.             $mergeRowSrcEnd = ((int)preg_replace("/[A-Z]*/", "", $mc[1]));
  61.  
  62.             $relativeColStart = $mergeColSrcStart - $srcColumnStart;
  63.             $relativeColEnd = $mergeColSrcEnd - $srcColumnStart;
  64.             $relativeRowStart = $mergeRowSrcStart - $srcRowStart;
  65.             $relativeRowEnd = $mergeRowSrcEnd - $srcRowStart;
  66.  
  67.             if (0 <= $mergeRowSrcStart && $mergeRowSrcStart >= $srcRowStart && $mergeRowSrcEnd <= $srcRowEnd) {
  68.                 $targetColStart = Coordinate::stringFromColumnIndex($destColumnStart + $relativeColStart);
  69.                 $targetColEnd = Coordinate::stringFromColumnIndex($destColumnStart + $relativeColEnd);
  70.                 $targetRowStart = $destRowStart + $relativeRowStart;
  71.                 $targetRowEnd = $destRowStart + $relativeRowEnd;
  72.  
  73.                 $merge = (string)$targetColStart . (string)($targetRowStart) . ":" . (string)$targetColEnd . (string)($targetRowEnd);
  74.                 //Merge target cells
  75.                 $destSheet->mergeCells($merge);
  76.             }
  77.         }
  78.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement