phpexcelutf-8spreadsheet-excel-writer

can I modify worksheet's title after "adding" this worksheet to workbook in spreadsheet_excel_writer?


the problem is that I cant set Worksheet::setInputEncoding to a worksheet that isnt created, but I need to set name in utf=8 format to this worksheet.

so for now I got this result: some unreadable symbols in worksheet title.

any suggestions?


Solution

  • My (hopefully correct) findings:

    Thus need to be careful about this:

    1. Set BIFF8 as format as soon as possible with \Spreadsheet_Excel_Writer_Workbook::setVersion() (there're added benefits like extended worksheet limits):

      $workbook->setVersion(8);
      
    2. If you aren't using UTF-8 (e.g. because it's a legacy project), convert worksheet name upon worksheet creation:

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

    If you need to rename a sheet, you need to compose your own method:

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