我尝试创建一个简单的设置来加载模板,插入一些数据并保存为新文件。但是我需要在某些单元格上进行一些条件格式化,当我得到新创建的文件时,缺少条件格式。它没有被其他格式覆盖,条件格式菜单中缺少规则。我使用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");
我试图保留Graded 2色标(格式化基于单元格值,Minimum是类型Number = 1,Maximum是类型Number = 10)。有问题的单元格附有一个引用另一张表格的公式(所有数据都已正确保存)。
答案 0 :(得分:1)
我发现读取,修改和保存XLS / XLSX文件无法获得&#34;自动过滤器&#34;,&#34;数据验证&#34;和&#34;条件格式&#34;从原始文件中,我找到的最终解决方案是使用PHPExcel库制作模板。
可悲的是,正如另一个答案(https://stackoverflow.com/a/13172890/218418)所述:
PHPExcel不是&#34;编辑&#34;的库。工作簿文件:您没有使用PHPExcel更改文件,您正在更改可以从文件加载的PHPExcel对象,随后可以将其写入文件。
我很开心,像#34;编辑&#34;使用模板的Excel文件只有数据验证,条件格式化和自动过滤是不可能的,但我理解。
答案 1 :(得分:0)
这是一个旧线程,但是我最近遇到了同样的问题。似乎PHPSpreadsheet(PHPExcel的新版本)支持creating spreadsheets with conditional formatting,但是当我尝试读取现有电子表格,然后将其写到新文件中时,条件格式被破坏了。
我打算使用xlsx-populate代替-它是nodeJS而不是PHP,但在编写Excel文件的同时维护电子表格的功能(如条件格式)似乎不那么好,这似乎更好。
就我而言,我需要填充一张大型,复杂的电子表格。该工作表中的值可用于其他工作表的计算和条件格式设置中,而无需直接修改。
使用xlsx-populate,我可以打开电子表格,填充它并保存它而不会破坏格式。