10

我正在尝试创建一个简单的设置来加载模板、插入一些数据并保存为新文件。但是,我需要对某些单元格进行一些条件格式设置,当我获取新创建的文件时,条件格式设置丢失。它没有被其他格式覆盖,条件格式菜单中缺少规则。我正在使用 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 类型,Maximum 是 Number=10 类型)。有问题的单元格附加了一个引用另一个工作表的公式(所有数据都已正确保存)。

4

2 回答 2

1

我发现从原始文件中获取“自动过滤器”、“数据验证”和“条件格式”是无法读取、修改和保存 XLS/XLSX 文件的,我找到的最终解决方案是使用PHPExcel 库。

可悲的是,正如另一个答案中所述(https://stackoverflow.com/a/13172890/218418):

PHPExcel 不是用于“编辑”工作簿文件的库:您不是在使用 PHPExcel 来更改文件,而是在更改可以从文件加载并随后可以写入文件的 PHPExcel 对象。

我很高兴使用仅具有数据验证、条件格式和自动过滤器的模板“编辑” Excel 文件是不可能的,但我理解。

于 2014-12-08T08:10:14.237 回答
0

这是一个旧线程,但我最近遇到了同样的问题。似乎 PHPSpreadsheet(PHPExcel 的新化身)支持创建具有条件格式的电子表格,但是当我尝试读取现有电子表格然后将其写入新文件时,条件格式被破坏。

我打算改用xlsx-populate - 它是 nodeJS 而不是 PHP,但它似乎更擅长编写 Excel 文件,同时保持它不理解的电子表格功能(如条件格式)。

就我而言,我需要填充一张大型复杂电子表格。该工作表中的值用于其他工作表的计算和条件格式,我不需要直接修改。

使用 xlsx-populate,我能够打开电子表格、填充并保存它而不会破坏格式。

于 2019-04-10T22:58:44.557 回答