【问题标题】:PHPExcel Cells over lapping each other >setRowHeight(-1) auto cell height not workingPHPExcel单元格相互重叠> setRowHeight(-1)自动单元格高度不起作用
【发布时间】:2018-03-12 13:16:54
【问题描述】:

更新

使用 PHPSpreadsheet 测试我在下面有这段代码,我已经尝试过了。如果我在编写文件时使用 xls,它似乎适用于 MSOffice Excel注意不使用 Libre Office 不会自动调整行大小,需要它也可以使用 libre Office。

$spreadsheet->getActiveSheet()->getRowDimension(1)->setRowHeight(-1);

foreach($spreadsheet->getActiveSheet()->getRowDimensions() as $rowID) { 
    $rowID->setRowHeight(-1); 
}

新控制器

<?php

require(APPPATH . 'vendor/autoload.php');

use PhpOffice\PhpSpreadsheet\Spreadsheet;

class Events extends MX_Controller {

    public function test() {
        $spreadsheet = new Spreadsheet();

        $spreadsheet->getDefaultStyle()->getFont()->setName('Arial');
        $spreadsheet->getDefaultStyle()->getFont()->setSize(24);

        foreach(range('A','B') as $columnID) {
            $spreadsheet->getActiveSheet()->getColumnDimension($columnID)->setAutoSize(true);
        }

        $spreadsheet->getActiveSheet()->getRowDimension(1)->setRowHeight(-1);

        foreach($spreadsheet->getActiveSheet()->getRowDimensions() as $rowID) { 
            $rowID->setRowHeight(-1); 
        }

        $spreadsheet->setActiveSheetIndex(0)
                ->setCellValue("A1",'Firstname')
                ->setCellValue("B1",'Lastname');

        $spreadsheet->getActiveSheet()->setTitle('Users Information');

        $spreadsheet->setActiveSheetIndex(0);

        /* Here there will be some code where you create $spreadsheet */

        // redirect output to client browser
        header('Content-Type: application/vnd.ms-excel');
        header('Content-Disposition: attachment;filename="myfile.xls"');
        header('Cache-Control: max-age=0');

        $writer = \PhpOffice\PhpSpreadsheet\IOFactory::createWriter($spreadsheet, 'Xls');
        $writer->save('php://output');
                
        exit;

    }
}

原始问题

我是 phpexcel 新手,当我下载文件时,单元格相互重叠。

正如您在图像中看到的,当字体较大时,它们都会聚集在一起。

问题我如何确保单元格不会相互重叠。我在 libreoffice 和 msoffice excel 中尝试了文件和同样的问题。

我试过了还是没变

foreach(range('A','D') as $columnID) {
   $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
            ->setAutoSize(true);
}
    
foreach (range('A', $objPHPExcel->getActiveSheet()->getHighestDataColumn()) as $col) {
  $objPHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true);
}

foreach(range(1, 4) as $rowID) {
  $objPHPExcel->getActiveSheet()->getRowDimension($rowID)->setRowHeight(-1);
}

控制器

<?php

class Events extends MX_Controller {

    public function generate_excel() {

        $query = $this->db->get('event');
        $excelresults = $query->result_array();

        require (APPPATH . 'third_party/PHPExcel-1.8/Classes/PHPExcel.php');
        require (APPPATH . 'third_party/PHPExcel-1.8/Classes/PHPExcel/Writer/Excel2007.php');

        $objPHPExcel = new PHPExcel();

        $objPHPExcel->getProperties()->setCreator("");
        $objPHPExcel->getProperties()->setLastModifiedBy("");
        $objPHPExcel->getProperties()->setSubject("");
        $objPHPExcel->getProperties()->setCreator("");
        $objPHPExcel->getProperties()->setDescription("");

        $objPHPExcel->setActiveSheetIndex(0);

        $objPHPExcel->getActiveSheet()->SetCellValue("A1", 'Event');
        $objPHPExcel->getActiveSheet()->SetCellValue("B1", 'Event Title');
        $objPHPExcel->getActiveSheet()->SetCellValue("C1", 'Event Date');
        $objPHPExcel->getActiveSheet()->SetCellValue("D1", 'Event Start Time');

        $objPHPExcel->getActiveSheet()->getPageSetup()->setOrientation(PHPExcel_Worksheet_PageSetup::ORIENTATION_LANDSCAPE);
        $objPHPExcel->getActiveSheet()->getPageSetup()->setPaperSize(PHPExcel_Worksheet_PageSetup::PAPERSIZE_A4);

        foreach(range('A','D') as $columnID) {
            $objPHPExcel->getActiveSheet()->getColumnDimension($columnID)
                ->setAutoSize(true);
        }

        $headerstyle = array(
            'font'  => array(
            'size'  => 25,
            'name'  => 'Candara'
            )
        );

        $objPHPExcel->getActiveSheet()->getStyle('A1:D1')->applyFromArray($headerstyle);


        foreach (range('A', $objPHPExcel->getActiveSheet()->getHighestDataColumn()) as $col) {
            $objPHPExcel->getActiveSheet()->getColumnDimension($col)->setAutoSize(true);
        } 

        $excelrow = 2;

        foreach ($excelresults as $excelresult => $excelvalue) {

            $columnstyle = array(
                'font'  => array(
                'size'  =>25,
                'name'  => 'Candara'
                )
            );

            $objPHPExcel->getActiveSheet()->getStyle('A' . $excelrow . ':D' . $excelrow)->applyFromArray($columnstyle);


            $objPHPExcel->getActiveSheet()->SetCellValue("A" . $excelrow, $excelvalue['event']);
            $objPHPExcel->getActiveSheet()->SetCellValue("B" . $excelrow, $excelvalue['event_title']);
            $objPHPExcel->getActiveSheet()->SetCellValue("C" . $excelrow, $excelvalue['event_date']);
            $objPHPExcel->getActiveSheet()->SetCellValue("D" . $excelrow, $excelvalue['event_start_time']);

            $excelrow++;
        }

        ///exit();

        $filename = 'Bowling-Events-For-' . date('Y') . '.xlsx';

        $objPHPExcel->getProperties()->setTitle("Riwaka Bowling Club Events");

        header("Content-Type: application/vnd.ms-excel; charset=utf-8"); # Important 
        header("Content-Type: application/force-download");
        header("Content-Type: application/octet-stream");
        header("Content-Type: application/download");

        header("Content-Disposition: attachment; filename=".$filename."");
        header("Content-Transfer-Encoding: binary");

        header("Pragma: no-cache");
        
        header("Expires: 0");
        
        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header("Cache-Control: private",false);

        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save('php://output');

        exit();
    }
}

【问题讨论】:

  • setAutoSize() 调用 设置所有值之后,即在foreach ($excelresults as $excelresult =&gt; $excelvalue) { 之后foreach。此外,setAutoSize() 用于 width,而不是 height,因此您可能仍然无法获得预期的结果。也可以在行上使用它:$objPHPExcell-&gt;getActiveSheet()-&gt;getRowDimension(1)-&gt;setRowHeight(-1);
  • @ishegg 谢谢你很快就会从主 PC 上尝试你的方式。
  • @ishegg 用你的方法试过了,不行
  • 你试过像this一样吗?
  • 是的,仍然无法正常工作。

标签: php codeigniter phpexcel phpexcel-1.8.0


【解决方案1】:

请检查下面的代码,对我有用:

$excel->getActiveSheet()->getRowDimension(1)->setRowHeight(-1);

要将所有行的高度更改为自动,您可以这样做:

foreach($xls->getActiveSheet()->getRowDimensions() as $rowID) { 
    $rowID->setRowHeight(-1); 
}

【讨论】:

  • 我一直在阅读用户指南,现在我发现了一些东西。如果我在编写代码时使用 xls 在 msoffice 上可以正常工作,我在这里有代码 pastebin.com/raw/9xGW6vNj 但不知道如何为 libre office now 最新版本调整它
  • @Ravi Chauhan 也许你可以帮助我。看看这个:stackoverflow.com/questions/56469303/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-30
  • 2021-09-17
  • 1970-01-01
  • 2018-03-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多