1

问题是我无法将 Worksheet::setInputEncoding 设置为未创建的工作表,但我需要为此工作表设置 utf=8 格式的名称。

所以现在我得到了这个结果:工作表标题中有一些不可读的符号。

有什么建议么?

4

2 回答 2

0

您可能在那里不走运,您确定 biff 格式实际上支持工作表名称中的 unicode 字符。工作表名称非常严格

我现在已经将我的大部分 excel 表生成切换为使用 phpexcel,也许这会适合你

于 2011-10-18T04:02:06.910 回答
0

我的(希望是正确的)发现:

  • 工作表名称中的 UTF-8 只能采用 BIFF8 格式。
  • Spreadsheet_Excel_Writer_Worksheet构造函数将 UTF-8 硬编码为工作表名称的输入编码。
  • 没有用于重命名工作表的内置方法。

因此需要注意这一点:

  1. 尽快将 BIFF8 设置为格式\Spreadsheet_Excel_Writer_Workbook::setVersion()(还有其他好处,例如扩展工作表限制):

    $workbook->setVersion(8);
    
  2. 如果您不使用 UTF-8(例如,因为它是一个遗留项目),请在创建工作表时转换工作表名称:

    $name = iconv('Windows-1252', 'UTF-18', $name);
    $worksheet = $workbook->addWorksheet($name);
    

如果需要重命名工作表,则需要编写自己的方法:

// Disclaimer: not fully tested code; shared for illustration purposes

/* @var $workbook Spreadsheet_Excel_Writer_Workbook */
/* @var $worksheet Spreadsheet_Excel_Writer_Worksheet */

$name = iconv($input_encoding, 'UTF-16LE', $name);

foreach($workbook->_worksheets as $c => $v){
    if($v->getName()===$name){
        throw new LogicException("New name is already in use: $name");
    }
}

$worksheet->name = $name;
$workbook->_sheetnames[$worksheet->index] = $name;          // Store EXTERNSHEET names
$workbook->_parser->setExtSheet($name, $worksheet->index);  // Register worksheet name with parser
于 2017-09-13T07:48:27.723 回答