PHPExcel,如果使用PHPExcel_RichText,为什么不显示换行符?

时间:2016-06-12 10:20:35

标签: php phpexcel

我试图使用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上进行测试。有人能告诉我如何解决这个问题吗?

2 个答案:

答案 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时都没有创建新行。