PHPExcel - 列的复制范围

标签 php phpexcel

我有 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 调用有效,确切地说,它下载了具有更新编辑的文件,但复制行的部分不起作用..

最佳答案

查看 PhpExcel - How insert the same row after row 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);

关于PHPExcel - 列的复制范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54255995/

相关文章:

PHP 计算从今天起的 Google 调查选择加入代码的天数

php - Action Script 3 使用 Base64 解码从 mysql 加载图像,图像加载损坏

php - OneupUploaderBundle(blueimp),- 不允许使用方法

php - 您请求了一个不存在的服务 "phpexcel"

PHPExcel 无法打开文件

php - 效率: PhpExcel look up vs mysql server query

php - Laravel 请求没有参数

php - 从mysql读取列时尝试获取非对象的属性

zend-framework - 在 Zend Autoloader 中找不到 PHPExcel 类

PHPExcel - 如何使用 phpexcel 库更改图表的颜色、边框和背景?