条件格式在保存时丢失

问题描述 投票:10回答:2

我正在尝试创建一个简单的设置来加载模板,插入一些数据并保存为新文件。但是我需要在某些单元格上进行一些条件格式化,当我得到新创建的文件时,缺少条件格式。它没有被其他格式覆盖,条件格式菜单中缺少规则。我使用的是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)。有问题的单元格附有一个参考另一张表格的公式(所有数据都已正确保存)。

phpexcel
2个回答
1
投票

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

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

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

我很开心,像使用模板“编辑”Excel文件那样只需要数据验证,条件格式化和自动过滤是不可能的,但我明白了。


0
投票

这是一个老线程,但我最近遇到了同样的问题。似乎PHPSpreadsheet(PHPExcel的新版本)支持creating spreadsheets with conditional formatting,但是当我尝试读取现有的电子表格然后将其写入新文件时,条件格式被破坏了。

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.