【发布时间】:2019-04-11 06:58:44
【问题描述】:
我正在尝试创建一个简单的设置来加载模板、插入一些数据并保存为新文件。但是,我需要对某些单元格进行一些条件格式设置,并且当我获取新创建的文件时,条件格式设置丢失。它没有被其他格式覆盖,条件格式菜单中缺少规则。我正在使用 PHP 5.2、PHPExcel 1.7.8 和 Excel 2010。
<?php
class template {
static $objPHPExcel;
function __construct() {
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
require_once '../Classes/PHPExcel/IOFactory.php';
if (!file_exists("template.xlsx")) {
exit("template missing." . EOL);
}
echo date('H:i:s') , " Load from Excel2007 file" , EOL;
$objReader = PHPExcel_IOFactory::createReader('Excel2007');
$objReader->setReadDataOnly(false);
self::$objPHPExcel = $objReader->load("template.xlsx");
}
function insertdata($dataArray){ /* unused */ }
function save($name){
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');
require_once '../Classes/PHPExcel/IOFactory.php';
echo date('H:i:s') , " Write to Excel2007 format" , EOL;
$objWriter = PHPExcel_IOFactory::createWriter(self::$objPHPExcel, 'Excel2007');
$objWriter->save($name);
echo date('H:i:s') , " File written to: ".$name , EOL;
}
$temp=new template();
$temp->save("savethis.xlsx");
我正在尝试保留分级 2 色标(基于单元格值的格式,最小值为 Number=1 类型,最大值为 Number=10 类型)。有问题的单元格附加了一个公式,该公式引用了另一张表(所有数据均已正确保存)。
【问题讨论】:
-
除了
define('EOL',(PHP_SAPI == 'cli') ? PHP_EOL : '<br />');在构造函数和 save() 方法中导致“已定义”错误的事实,以及您不需要多个 PHPExcel 库的事实次(尽管 require_once 可以防止这是一个问题,但它仍然是不必要的开销),没有明显的理由说明从模板读取的条件样式在保存时应该丢失。$objReader->setReadDataOnly(false);也是多余的,因为这是默认设置 -
不过,我可能会建议更新您的 PHPExcel 版本,因为自 1.7.8 版以来已经对条件样式进行了一些修复
-
我将在接下来的几天内进行一些测试,看看是否可以复制您的问题
-
我无法从输入文件到输出文件中获取“setAutoFilter”和“getDataValidation”,“条件样式”也丢失了,所以在几乎失去头发后我创建了我的文档(模板)从零开始单独使用 PHPExcel 类。
标签: phpexcel