将此工作表“添加”到spreadsheet_excel_writer中的工作簿后,可以修改工作表的标题吗?

时间:2011-10-18 03:46:44

标签: php excel utf-8 spreadsheet-excel-writer

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

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

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

我的(希望是正确的)调查结果:

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

因此需要注意:

  1. 使用\Spreadsheet_Excel_Writer_Workbook::setVersion()尽快将BIFF8设置为格式(扩展工作表限制等附加好处):

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

    $name = iconv('Windows-1252', 'UTF-18', $name);
    $worksheet = $workbook->addWorksheet($name);
    
  3. 如果您需要重命名工作表,则需要编写自己的方法:

    // 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