Php 我可以修改工作表';在“后”之后的标题;加入“;是否将此工作表转换为电子表格\u excel\u writer中的工作簿?

Php 我可以修改工作表';在“后”之后的标题;加入“;是否将此工作表转换为电子表格\u excel\u writer中的工作簿?,php,excel,utf-8,spreadsheet-excel-writer,Php,Excel,Utf 8,Spreadsheet Excel Writer,问题是我无法将工作表::setInputEncoding设置为未创建的工作表,但我需要将utf=8格式的名称设置为该工作表 所以现在我得到了这个结果: 工作表标题中有一些不可读的符号 有什么建议吗?您可能不太走运,您确定biff格式实际上支持工作表名称中的unicode字符吗。工作表的名称非常严格 我现在已经将大部分excel工作表转换为使用phpexcel,也许这将适合您我(希望是正确的)发现: 工作表名称中的UTF-8只能采用BIFF8格式 电子表格\u Excel\u Writer\u工

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

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


有什么建议吗?

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

我现在已经将大部分excel工作表转换为使用phpexcel,也许这将适合您

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

  • 工作表名称中的UTF-8只能采用BIFF8格式
  • 电子表格\u Excel\u Writer\u工作表
    构造函数硬编码UTF-8作为工作表名称的输入编码
  • 没有用于重命名工作表的内置方法
因此,需要注意这一点:

  • 使用
    \Spreadsheet\u Excel\u Writer\u工作簿::setVersion()
    尽快将BIFF8设置为格式(还有其他好处,如扩展工作表限制):

  • 如果您不使用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
    
    // 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