я могу изменить заголовок листа после «добавления» этого листа в книгу в spreadsheet_excel_writer? - PullRequest
1 голос
/ 18 октября 2011

проблема в том, что я не могу установить Worksheet :: setInputEncoding на лист, который не был создан, но мне нужно установить имя в формате utf = 8 для этого листа.

, поэтому на данный момент я получил такой результат:некоторые нечитаемые символы в заголовке листа.

есть предложения?

Ответы [ 2 ]

0 голосов
/ 13 сентября 2017

Мои (надеюсь правильные) выводы:

  • 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
0 голосов
/ 18 октября 2011

вам может не повезти, вы уверены, что формат biff на самом деле поддерживает символы Юникода в имени листа. названия листов довольно ограничительны

Я переключил большую часть своего поколения листов Excel на использование phpexcel, возможно, это подойдет вам

...