PHPSpreadsheet会将xls转换为xlsx并保留格式吗?

时间:2018-12-14 22:22:02

标签: phpspreadsheet

我正在我们的项目规格说明中,但对于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');
}

但是,我还没有看到导出的结果是否保留格式,特别是边框线。目前,我无法自己写这篇文章。

1 个答案:

答案 0 :(得分:0)

我尚未测试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. 图表丢失