PHPExcel - копировать диапазон столбцов - PullRequest
0 голосов
/ 18 января 2019

У меня есть файл Excel, в котором мне нужно израсходовать пространство, дублируя диапазон столбца excat.

enter image description here

Я загружаю часть этого файла, которую можно увидеть на картинке. Мне нужно скопировать строку из A16 в H16 и установить ее прямо под (от A17 до H17), чтобы она автоматически переместила другие столбцы ниже.

Это один из примеров, которые я попробовал. Никто из них не работает.

   $appPath = $this->container->getParameter('kernel.root_dir');
        $webPath = realpath($appPath . '/../web/uploads/statements/the-file.xlsx');
    $phpExcelObject = $this->get('phpexcel')->createPHPExcelObject($webPath);

        $phpExcelObject->getActiveSheet()->insertNewRowBefore(16,16);
        $phpExcelObject->getActiveSheet()->duplicateStyle($phpExcelObject->getActiveSheet()->getStyle('A16'), 'A16:H16');

    $writer = $this->get('phpexcel')->createWriter($phpExcelObject, 'Excel2007');
    $response = $this->get('phpexcel')->createStreamedResponse($writer);
    $dispositionHeader = $response->headers->makeDisposition(
        ResponseHeaderBag::DISPOSITION_ATTACHMENT,
        'the-file.xlsx'
    );
    $response->headers->set('Content-Type', 'text/vnd.ms-excel; charset=utf-8');
    $response->headers->set('Cache-Control', 'maxage=1');
    $response->headers->set('Content-Disposition', $dispositionHeader);

    return $response;

Вызов Api работает, если быть точным, он загружает этот файл с обновленными правками, но часть с копированием строк не работает ..

1 Ответ

0 голосов
/ 18 января 2019

Глядя на параметры и пример на PhpExcel - Как вставить ту же строку после строки N? Я бы предположил, что ваши параметры неверны, я думаю, что insertNewRowBefore() имеет параметры вставки точки и количества строк, так что это должно быть 16 и 1 в вашем случае. Кроме того, вызов duplicateStyle() должен выполняться со строками, которые вы хотите обновить, а не с диапазоном ячеек - я поставил «A15», но, возможно, его нужно настроить.

    $phpExcelObject->getActiveSheet()->insertNewRowBefore(16,1);
    $phpExcelObject->getActiveSheet()->duplicateStyle($phpExcelObject->getActiveSheet()->getStyle('A16'), 'A15');

Обновление:

Если вы также хотите скопировать данные, я переписал их, чтобы сократить количество повторяющихся битов, но начнем со строки, которую вы хотите скопировать. Затем он вставляет строку перед этим, а затем создает диапазон, который охватывает всю строку, используя getHighestColumn(), чтобы получить конец строки. Затем он копирует этот диапазон для вас.

$copyFrom= "4";
$activeSheet = $objPHPExcel->getActiveSheet();
$activeSheet->insertNewRowBefore($copyFrom,1);
$activeSheet->duplicateStyle($activeSheet->getStyle('A'.($copyFrom+1)), 'A'.$copyFrom);
$lastColumn = $objPHPExcel->getActiveSheet()->getHighestColumn();
$rangeFrom = 'A'.($copyFrom+1).':'.$lastColumn.($copyFrom+1);
$activeSheet->fromArray($activeSheet->rangeToArray($rangeFrom), null, 'A'.$copyFrom);
...