我正在阅读带有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-&gt;单元格($ row_index,2) - &gt; 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需要解决方案。
答案 0 :(得分:3)
正如@rc所指出的,我们需要在COM构造函数中指定codepage属性以获得正确编码的数据。
$ExlApp = new COM ( "Excel.Application", NULL, CP_UTF8 );
通过更改脚本中的上述行,可以正确显示数据。