我正在我们的项目规格说明中,但对于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');
}
但是,我还没有看到导出的结果是否保留格式,特别是边框线。目前,我无法自己写这篇文章。
答案 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
结果的粗略比较显示:
保留字体大小,字体颜色,粗体/斜体,边框,居中,单元格背景/阴影/颜色,带有值的下拉列表
按钮丢失
形状(例如线条,箭头,文本框)丢失了
图表丢失