【问题标题】:Encoding Issue while reading Excel file through PHP COM通过 PHP COM 读取 Excel 文件时出现编码问题
【发布时间】:2014-01-12 23:04:11
【问题描述】:

我正在阅读带有 PHP COM 实用程序的 Excel 电子表格,一切正常,只是 Excel 文件中的某些单元格具有不同的语言数据。当我通过 PHP Com 读取此数据时,它显示为 ???????

$ExlApp = new COM ( "Excel.Application" );
$workbook = $ExlApp->Workbooks->Open ( 'f:\dev\htdocs\excel\testfile.xlsx' );
$worksheet = $workbook->worksheets ( 1 );

$done = false;
$row_index = 1;
while ( $done == false ) {

    $english = $worksheet->cells ( $row_index, 1 )->value;
    $dari = $worksheet->cells ( $row_index, 2 )->value;

    if ($english != '') {
        $row_index ++;
        echo "<div style='float:left;width:420px'>".$english."</div><div>".$dari."</div>";
    } else {
        $done = true;
    }
}

$workbook->close ();

我已检查页面编码并将其设置为 UTF-8。当我打开原始 excel 文件时,它显示正确的文本,但是当我从 PHP COM 读取它时,编码丢失了。有没有人有这个问题的解决方案。

编辑

如何确保 excel $worksheet->cells ( $row_index,2)->value 给出的值编码正确,或者 Excel 中是否有可以设置的属性PHP COM 所以它以 UTF-8 格式返回数据?

我已经通过 PHP 中的 mb_detect_encoding 函数检查了 Excel 单元格返回的值的编码,它给出了 ASCII,因为它必须给出 UTF-16 或 UTF-8。看来 excel 没有给出正确编码的价值。

这是我正在使用此脚本读取的 Excel 文件: http://asimishaq.com/myfiles/testfile.xlsx

请注意,该解决方案仅需要使用 PHP COM-INTEROP。

【问题讨论】:

  • 这本身不是 php 问题。您只需要确保 PHP 输出到的任何介质都已被告知数据所在的字符集。例如如果您要转储到网络浏览器,则需要一个适当的 Content-type 标头/元标记。
  • @marc-b 如何确保从 $worksheet->cells ( $row_index, 1)->value 返回的值编码正确?
  • 要么使用 mb_convert() 及其表亲将来自电子表格的 utf 数据转换为目的地期望的任何字符集,要么告诉目的地“嘿,我正在向你发送 utf-8 "
  • @marc-b 我已经使用 mb_detect_encoding 检查了 Excel 返回值的编码,它是 ASCII。必须是 UTF-8 或 16 表示发件人 ms Excel 编码有问题?
  • 我会尝试在其构造函数中设置 COM 使用的代码页:参见 php.net/manual/en/class.com.php(尝试 CP_UTF8)

标签: php excel encoding utf-8 com-interop


【解决方案1】:

正如@rc 所指出的,我们需要在COM 构造函数中指定codepage 属性来获取正确编码的数据。

$ExlApp = new COM ( "Excel.Application", NULL, CP_UTF8 );

通过更改脚本中的上述行,数据可以正确显示。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    相关资源
    最近更新 更多