【问题标题】:PHPSpreadsheet - writing htmlentities / convert into correspoding charsPHPSpreadsheet - 编写html实体/转换成相应的字符
【发布时间】:2019-06-16 10:55:51
【问题描述】:

我正在使用 PHPSPreadsheet 1.6.0 将数据从 Neo4J 导出到 Excel 文件。

写代码是

$spreadsheet->getActiveSheet()
            ->setCellValue('A1',$string);

只要我没有 HTML 实体,它就可以很好地工作。由于 Neo4J 的原因,我将一些文本存储在 HTML 实体中,例如

8" ID x 12"

为人类阅读

8" ID x 12"

(引号是字符串的一部分,对读者很重要,因为它是度量单位(英寸),不能跳过。

我尝试使用

html_entity_decode($string,ENT_QUOTES, "utf-8");

在 Excel 工作表的单元格中生成干净的输出。在 php 文件中打印时,屏幕上的输出正常

8" ID x 12"

在 Excel 文件中我总是得到

8" ID x 12" 

无论我如何格式化字符串或更改编码(也尝试过没有任何更改)。任何人都有提示如何获取原始字符而不是 html 实体?

进一步调查:

当我输入文本而不是像

这样的变量时
$spreadsheet->getActiveSheet()->setCellValue( 'A1',
            html_entity_decode('8" ID x 2"',ENT_QUOTES,'UTF-8') ); 

这就像一个魅力,尝试使用像 $string where as 这样的变量

$string = '8" ID x 2"'

$spreadsheet->getActiveSheet()->setCellValue('A1', 
            html_entity_decode($string,ENT_QUOTES,'UTF-8')
            );

再次生成输出

8" ID x 12" 

在 Excel 单元格内。由于某种原因,我无法弄清楚此函数不适用于字符串?

* 已添加 *

如果我在电子表格操作之外组合字符串也没关系,比如

$itemShort = html_entity_decode($string,ENT_QUOTES, "utf-8"); 

然后使用然后

                $spreadsheet->getActiveSheet()
                        ->setCellValue('C'.$i,$itemShort)
                        ;

不管怎样,一个文本常量很好用,一个变量不行。

【问题讨论】:

  • 即使使用变量 $string,您的代码也能正常工作。您可以重新检查或发布一些额外的代码吗?
  • 抱歉这么晚才回来,其他事情......我重新检查了所有内容,文本仍然可以正常工作,当我用变量替换字符串常量时,它给了我相同的行为。之后我现在使用 str_replace ,但这只是一种解决方法。我不知道为什么使用变量会失败。我还尝试将额外的字符串组合起来,然后将该字符串插入到电子表格操作中,得到相同的错误。这对我使用的所有 PC 都有效,因此我敢于排除本地问题。

标签: phpspreadsheet


【解决方案1】:

在我的情况下,使用

常量字符串
html_entity_decode('8" ID x 2"',ENT_QUOTES,'UTF-8'))

或

变量
$string = '8" ID x 2"'
html_entity_decode($string,ENT_QUOTES,'UTF-8')

他们都没有工作。

最后我只是用
$sheet->setCellValue('A1', 'replace_this_string');设置单元格值
然后在使用
$html = $this->load->view('folder/view', $data, TRUE);
加载 html 之后,然后在使用 dompdf 渲染 pdf 之前,我将字符串替换为
$new_html = str_replace('replace_this_string','"', $html);

【讨论】:

    【解决方案2】:

    我以这种方式成功使用了 HTML 实体:

    $yAxisLabel = new Title(html_entity_decode('Temp (°C)',ENT_QUOTES,'UTF-8'));
    

    【讨论】:

    • 感谢您的回答。我仍然不确定如何使用这个类“标题” - 你有解释的链接吗?使用该代码会为我抛出一个未知的类错误。我需要包含一些东西还是在某处定义了“标题”?谢谢。
    • 我唯一可以添加的是手册:link
    • 谢谢,这总是有帮助的。我来看看。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-06
    • 2010-09-28
    相关资源
    最近更新 更多