我试图使用PHPExcel来生成如下所示的内容:
Label:
This is the value
其中"标签"是深红色,"这是价值"在一个新的线上,在同一个单元格中。
我一直在使用以下代码:
$text = new PHPExcel_RichText();
$label = $text->createTextRun("This is the label: ");
$label->getFont()->setBold(true);
$label->getFont()->setItalic(true);
$label->getFont()->setColor(new PHPExcel_Style_Color(PHPExcel_Style_Color::COLOR_DARKRED));
$text->createText(PHP_EOL . "This is the value");
$workbook->getActiveSheet()->getCell('A1')->setValue($text);
$workbook->getActiveSheet()->getStyle('A1')->getAlignment()->setWrapText(true);
但由于某种原因,这似乎并没有起作用。我试过了#34; \ r"和" \ n"代替PHP_EOL(小心使用双引号而不是单引号)。
我也尝试将PHP_EOL移动到标签文本。
如果我拨打setValue($text . PHP_EOL)
,我会丢失格式,但换行符会有效。
我在Mac上使用Excel 2016,如果这有任何区别的话。不幸的是,我无法在不同版本的Excel上进行测试。有人能告诉我如何解决这个问题吗?
答案 0 :(得分:1)
我刚刚在我的Mac上尝试过你的代码并且工作正常,但我已经修补了phpExcel软件包的几个文件。
我解压缩了用phpExcel生成的Excel文件,并将xml文件与常规Excel文件中的文件进行了比较,发现了一些差异。 其中之一是sharedStrings.xml文件中指定的粗体。 在phpExcel生成的文件中你有:
<b val="1"/>
并在常规Excel文件中
<b/>
所以在StringTable.php中,在writeRichText中,我已经改变了
// Bold 1
if($element->getFont()->getBold())
{
$objWriter->startElement($prefix.'b');
$objWriter->writeAttribute('val', ($element->getFont()->getBold() ? 'true' : 'false'));
$objWriter->endElement();
}
到
// Bold 1
if($element->getFont()->getBold())
{
$objWriter->startElement($prefix.'b');
$objWriter->endElement();
}
我对其他真/假属性做了同样的事。
仅仅解决我自己在RichTextObjects中消失的换行问题是不够的,但我已经在PHPExcel toRichTextObject only showing newlines after saving file again manually中完成了其他补丁。
因此,当我使用您的代码时,新行正确设置并可见。 希望它能解决你的问题!
答案 1 :(得分:0)
在最新的OS X上使用Excel for Mac 2011.尝试添加PHP_EOL
和/或"\n"
。
$cellValue->createText(PHP_EOL);
$cellValue->createText("\n");
使用PHPExcel_RichText
时都没有创建新行。