php - 如果在 PHPSpreadSheet 中为空,则用文本填充单元格

标签 php excel excel-formula phpspreadsheet phpoffice-phpspreadsheet

我想为一个空单元格做一个占位符之类的东西,所以我决定使用 conditional formatting , 这里的例子是关于 OPERATOR_LESSTHAN ,但其他条件没什么。我想用彩色文本填充单元格,上面写着“在此处输入文本”。如果用户输入文本,则单元格必须将其颜色更改为默认值。我尝试了以下方法,但它不起作用,单元格保持为空:

<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();

$conditional1 = new \PhpOffice\PhpSpreadsheet\Style\Conditional();
$conditional1->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_CELLIS);
$conditional1->setOperatorType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_EQUAL);
$conditional1->addCondition('');
$conditional1->setText("Enter text here");
$conditional1->getStyle()->getFont()->getColor()->setARGB(\PhpOffice\PhpSpreadsheet\Style\Color::COLOR_RED);

$conditionalStyles = $spreadsheet->getActiveSheet()->getStyle('C3')->getConditionalStyles();
$conditionalStyles[] = $conditional1;
$spreadsheet->getActiveSheet()->getStyle('C3')->setConditionalStyles($conditionalStyles);

$writer = new Xlsx($spreadsheet);
$writer->save('hello world.xlsx');
UPD:以下代码使单元格变灰,我可以通过 $spreadsheet->getActiveSheet()->getCell("C3")->setValue("text"); 设置单元格的内容,但如果用户向单元格输入内容,它不会改变颜色。
<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();

$conditional1 = new \PhpOffice\PhpSpreadsheet\Style\Conditional();
$conditional1->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::CONDITION_NOTCONTAINSTEXT);
$conditional1->getStyle()->getFont()->getColor()->setARGB('969696');

$conditionalStyles = $spreadsheet->getActiveSheet()->getStyle('C3')->getConditionalStyles();
$conditionalStyles[] = $conditional1;
$spreadsheet->getActiveSheet()->getStyle('C3')->setConditionalStyles($conditionalStyles);

$writer = new Xlsx($spreadsheet);
$writer->save('hello world.xlsx');

最佳答案

最后我想出了如何做到这一点。这是代码:

<?php

require 'vendor/autoload.php';

use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Writer\Xlsx;

$spreadsheet = new Spreadsheet();

$cellToUse = 'C3';

$conditional1 = new \PhpOffice\PhpSpreadsheet\Style\Conditional();
$conditional1->setConditionType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_CONTAINSTEXT);
$conditional1->setOperatorType(\PhpOffice\PhpSpreadsheet\Style\Conditional::OPERATOR_CONTAINSTEXT);
$conditional1->setText('Add text here...');
$conditional1->getStyle()->getFont()->getColor()->setARGB('969696');

if ($spreadsheet->getActiveSheet()->getCell($cellToUse)->getValue() === null) {
    $spreadsheet->getActiveSheet()->getCell($cellToUse)->setValue('Add text here...');
}

$conditionalStyles = $spreadsheet->getActiveSheet()->getStyle($cellToUse)->getConditionalStyles();
$conditionalStyles[] = $conditional1;
$spreadsheet->getActiveSheet()->getStyle($cellToUse)->setConditionalStyles($conditionalStyles);


$writer = new Xlsx($spreadsheet);
$writer->save('hello world.xlsx');

如果包含占位符文本,此代码将 C3 文本颜色设置为灰色,否则颜色保持默认

关于php - 如果在 PHPSpreadSheet 中为空,则用文本填充单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69030061/

相关文章:

php - Symfony2 - 过载注册表导致 CSRF 错误(添加了 github repo)

PHP:不区分大小写的参数

VBA - 从 Excel 创建 Word 文档并编辑某些行以包含粗体文本

excel - 如何在excel电子表格列中查找连续数字的特定数据

php - Jenkins 在部署时创建文件而不是符号链接(symbolic link)

excel - 在 Excel 中使用 UDF 更新工作表

excel - 如何使用表格符号按行号或水平标题引用 Excel 表格单元格?

excel - 如何使excel停止将列视为日期

Excel 和在两个下拉列表之间更改值

php - 如何进行部分页面刷新并每次获取新数据或值