code: private function rangeToPackedRange($range)
      {
          preg_match('/(\$)?(\d+)\:(\$)?(\d+)/', $range, $match);
          // return absolute rows if there is a $ in the ref
          $row1_rel = empty($match[1]) ? 1 : 0;
          $row1 = $match[2];
          $row2_rel = empty($match[3]) ? 1 : 0;
          $row2 = $match[4];
          // Convert 1-index to zero-index
          --$row1;
          --$row2;
          // Trick poor inocent Excel
          $col1 = 0;
          $col2 = 65535; // FIXME: maximum possible value for Excel 5 (change this!!!)
  
          // FIXME: this changes for BIFF8
          if (($row1 >= 65536) or ($row2 >= 65536)) {
              throw new WriterException("Row in: $range greater than 65536 ");
          }
  
          // Set the high bits to indicate if rows are relative.
          $col1 |= $row1_rel << 15;
          $col2 |= $row2_rel << 15;
          $col1 = pack('v', $col1);
          $col2 = pack('v', $col2);
  
          $row1 = pack('v', $row1);
          $row2 = pack('v', $row2);
  
          return [$row1, $col1, $row2, $col2];
      }
docs: pack() row range into the required 3 or 4 byte format.
  Just using maximum col/rows, which is probably not the correct solution.
  
  @param string $range The Excel range to be packed
  
  @return array Array containing (row1,col1,row2,col2) in packed() format