【问题标题】:Will PHPSpreadsheet convert xls to xlsx and preserve formatting?PHPSpreadsheet 会将 xls 转换为 xlsx 并保留格式吗?
【发布时间】:2018-12-14 22:22:02
【问题描述】:

我在我们项目规范的事实调查部分,并没有找到关于 PHPSpreadsheet 是否可以将 .xls 转换为 .xlsx 并保留格式(例如表格边框)的明确答案。

From this question,我看到对于读/写和文件格式类型有单独的导入。此示例演示了如何使用不同的模块来读取/写入文件格式:

<?php 

require 'vendor\autoload.php';

use \PhpOffice\PhpSpreadsheet\Reader\Xls;
use \PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$xls_file = "Example.xls";

$reader = new Xls();
$spreadsheet = $reader->load($xls_file);

$loadedSheetNames = $spreadsheet->getSheetNames();

$writer = new Xlsx($spreadsheet);

foreach($loadedSheetNames as $sheetIndex => $loadedSheetName) {
    $writer->setSheetIndex($sheetIndex);
    $writer->save($loadedSheetName.'.xlsx');
}

但是,我没有看到生成的导出是否保留了格式,特别是边框线。目前,我无法自己编写此内容。

【问题讨论】:

    标签: phpspreadsheet


    【解决方案1】:

    我没有测试过 PhpSpreadsheet (由于 Composer 的要求), 但是 FWIW PhpExcel (PhpSpreadsheet 的前身) 可以轻松完成这项工作 并且是的,它确实保留了大多数格式。

    这是一个使用 PhpExcel 的示例转换脚本:

    <?php
    
        $xls_to_convert = 'test.xls';
    
        error_reporting(E_ALL);
        ini_set('display_errors', TRUE);
        ini_set('display_startup_errors', TRUE);
    
        define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
    
        date_default_timezone_set('America/Vancouver');
    
        require_once dirname(__FILE__) . '/PHPExcel/Classes/PHPExcel/IOFactory.php';
    
        $objPHPExcel = PHPExcel_IOFactory::load(dirname(__FILE__) . '/' . $xls_to_convert);
    
        $objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel2007');
        $objWriter->save(str_replace('.xls', '.xlsx', $xls_to_convert));
    

    我的测试xls 电子表格与xlsx 结果的粗略比较显示:

    1. 保留字体大小、字体颜色、粗体/斜体、边框、居中、单元格背景/阴影/颜色、带值的下拉菜单

    2. 按钮丢失

    3. 形状(例如线条、箭头、文本框)丢失

    4. 图表丢失

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-09-06
      • 2012-03-15
      • 2013-01-25
      • 2015-01-20
      • 1970-01-01
      • 2016-03-25
      • 1970-01-01
      相关资源
      最近更新 更多