【问题标题】:Merging cells in Excel by rows and columns together using PHPExcel使用PHPExcel按行和列将Excel中的单元格合并在一起
【发布时间】:2012-06-06 07:05:23
【问题描述】:

我需要使用 PHPExcel 按行和按列合并 Excel (xlsx) 中的单元格。我尝试了以下方法。

$sheet->mergeCells("G".($row_count+1).":G".($row_count+4));             
$sheet->mergeCells("H".($row_count+1).":H".($row_count+4));             
$sheet->mergeCells("I".($row_count+1).":I".($row_count+4));     

变量$row_count 有一些不可预知的动态值,如 25、50、75 等(无规则模式)。

它合并单元格,如前面的 snap shot 所示,可以在 Note 单元格的正下方看到。按行合并这些单元格后,我尝试按列合并它们,如下所示。

$sheet->mergeCells("G".($row_count+1).":I".($row_count+1));             

但它不起作用。当我尝试打开 excel 文件时,它要求确认(带有确认框)

Excel 在“report.xlsx”中发现了不可读的内容。你想要_____吗 恢复此工作簿的内容?如果你相信这个消息的来源 工作簿,单击是。

那么如何在Excel中按行列合并单元格呢?

【问题讨论】:

    标签: php excel-2007 phpexcel


    【解决方案1】:

    合并只需要一个有效的单元格范围,如 A1:B2,所以你的

    $sheet->mergeCells("G".($row_count+1).":I".($row_count+1));
    

    应该没有任何问题。

    您能否尝试一个简单的测试用例来证明这是导致您出现问题的原因,而不是脚本中的其他问题

    编辑

    重读您的问题后: 您的问题可能是您尝试合并已经属于合并范围的单元格,而不是合并每一行,然后尝试按列合并,尝试一次合并整个范围。

    $sheet->mergeCells("G".($row_count+1).":I".($row_count+4));              
    

    【讨论】:

    • @markBaker,我已经使用过 PHPExcel,我只有 cumpliments 来讲述这个库。现在我正在使用 Aspose 开发一个 java 项目,并且这个库有一个限制,它似乎 PHPExcel 也有。我们不能将已经合并的单元格与新的单元格合并。你知道为什么吗?
    • 主要是因为在代码中处理起来很痛苦,并且为每次合并增加了开销,测试它是否是任何现有合并的一部分,如果是,则合并两者......并且无法提供这样做时的任何反馈
    【解决方案2】:

    单元格合并还有一种方法

        /**
     * Set merge on a cell range by using numeric cell coordinates
     *
     * @param   int $pColumn1   Numeric column coordinate of the first cell
     * @param   int $pRow1      Numeric row coordinate of the first cell
     * @param   int $pColumn2   Numeric column coordinate of the last cell
     * @param   int $pRow2      Numeric row coordinate of the last cell
     * @throws  Exception
     * @return PHPExcel_Worksheet
     */
         public function mergeCellsByColumnAndRow($pColumn1 = 0, $pRow1 = 1, $pColumn2 = 0, $pRow2 = 1)
    

    【讨论】:

      【解决方案3】:
      function cellsToMergeByColsRow($start = -1, $end = -1, $row = -1){
          $merge = 'A1:A1';
          if($start>=0 && $end>=0 && $row>=0){
              $start = PHPExcel_Cell::stringFromColumnIndex($start);
              $end = PHPExcel_Cell::stringFromColumnIndex($end);
              $merge = "$start{$row}:$end{$row}";
          }
          return $merge;
      }
      

      案例补充:

      $objPHPExcel->getActiveSheet()->mergeCells(cellsToMergeByColsRow(0,2,3))
      

      【讨论】:

        【解决方案4】:

        我做了一个简单的函数来计算单元格以按列和行合并。

        function cellsToMergeByColsRow($start = NULL, $end = NULL, $row = NULL){
            $merge = 'A1:A1';
            if($start && $end && $row){
                $start = PHPExcel_Cell::stringFromColumnIndex($start);
                $end = PHPExcel_Cell::stringFromColumnIndex($end);
                $merge = "$start{$row}:$end{$row}";
        
            }
        
            return $merge;
        }
        

        然后调用

        $sheet->mergeCells(cellsToMergeByColsRow($col, $col+5, $row));
        

        谢谢@马克贝克

        【讨论】:

        • 您可能希望使用内置的辅助函数 PHPExcel_Cell::columnIndexFromString() 和 PHPExcel_Cell::stringFromColumnIndex() 而不是您自己的 chr/floor/etc,因为它们已经内置
        • 感谢提及这些帮助者
        【解决方案5】:

        我也在寻找这个问题的解决方案。我想合并单元格并将内容(值)放在上面。经过几次搜索,我得到了一些解决方案。但没有检查,因为我使用 Maatawebsite 获取 Excel 文件。

        但是任何人都可以尝试。解决方案是基于 PHPExcel 确定,它可以在 Maatawebsite 上运行。

        Source Link

        从A列第1行合并到E列第1行

        $objPHPExcel->getActiveSheet()->mergeCells('A1:E1');
        
        // add some text
        $objPHPExcel->getActiveSheet()->setCellValue('A1','The quick brown fox.'); 
        

        从A列第1行合并到E列第3行

        $objPHPExcel->getActiveSheet()->mergeCells('A1:E3');
        
        // add some text
        $objPHPExcel->getActiveSheet()->setCellValue('A1','The quick brown fox.');
        

        我检查了 maatawebsite 文档,他们有相同的方法 mergeCells。所以我想我会工作。

        Maatawebste 的这个解决方案。

        $sheet->cells('A1:C1', function($cells) {
            $cells->setBorder('thin', 'thin', 'thin', 'thin');
        });
        $sheet->mergeCells('A1:C1');
        

        解决方案二

        $sheet->setMergeColumn(array(
        'columns' => array('A','B','C','D'),
        'rows' => array(
        array(2,3),
        array(5,11),
        )
        ));
        

        【讨论】:

          【解决方案6】:
          $sheet -> mergeCellsByColumnAndRow($col1, $row1, col2, row2);
          

          是函数。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2017-04-19
            • 2011-10-12
            • 2012-02-11
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2015-10-02
            相关资源
            最近更新 更多