Здравствуйте! Столкнулся с такой проблемой. Для генерации Excel файла использую модуль Spreadsheet_Excel_Writer. По умолчанию он не позволяет писать строчки динной более 255 символов. Но при использовании команды PHP: $xls->setVersion( 8 ); строчки можно писать произвольной длины. Однако в таком случае портится кодировка всего файла. Если принудительно ставить кодировку PHP: $sheet->setInputEncoding('CP1251'); то при получении файла пишется что файл сильно поврежден и невозможно открыть. Пробовал так же подставлять другие кодировки. При использовании скажем UTF-8 русские буквы просто пропадают как класс. Кроме того пытался привести кодировку с помощью функции iconv к одной и той же. Результат тот же самый либо кривая кодировка, либо поврежденный файл либо отсутствуют русские буквы. Зависит от вариаций устанавливаемых кодировок. Кроме того эксперименты проводил как на локальной машине (самостоятельно собранная конфигураци WinXP + Apache v.2.2.4+php v.5.2.1) так и на сервере на FreeBSD (там уже настраивал не я а профессиональный хостер). Помогите пожалуйста как решить данную проблему. Заранее благодарен. P.S. Кодировка которая получается по умолчанию более всего напоминает Западноевропейскую.
Только что столкнулся с такой же проблемой и решил ее ! Обнаружив такой же вопрос на этом форуме, я даже специально зарегился, чтобы поделиться решением: 1) Spreadsheet_Excel_Writer генерит кривой BIFF8 (документы большого размера MS Office интерпретирует как поврежденные, а OpenOffice отображает со страшными косяками), так что про setVersion(8) можно забыть, пока не пофиксят в следующих версиях (утверждают, что проект заморожен уже с 2006 года), а вместе с тем и про setInputEncoding() и юникод 2) Решение проблемы с кириллицей (документ будет нормально отображаться и в MS Office и OpenOffice): Лезем в скрипты Spreadsheet_Excel_Writer, расположенные в "<путь_к_установленному_pear>\Spreadsheet\Excel\Writer\" В Workbook.php находим Код (Text): $this->_codepage = 0x04E4 и исправляем на 0x04E3 (кодовая страница Windows-1251) В Format.php находим Код (Text): $this->_font_charset = 0 и исправляем на 0xCC (набор символов ANSI Cyrillic). Теперь безо всяких лишних манипуляций можно писать русский текст в ячейки ! P.S. (взято отсюда: http://sc.openoffice.org/excelfileformat.pdf) Код (Text): Кодовые страницы: 0x016F = ASCII 0x01B5 = IBM PC CP-437 (US) 0x02D0 = IBM PC CP-720 (OEM Arabic) 0x02E1 = IBM PC CP-737 (Greek) 0x0307 = IBM PC CP-775 (Baltic) 0x0352 = IBM PC CP-850 (Latin I) 0x0354 = IBM PC CP-852 (Latin II (Central European)) 0x0357 = IBM PC CP-855 (Cyrillic) 0x0359 = IBM PC CP-857 (Turkish) 0x035A = IBM PC CP-858 (Multilingual Latin I with Euro) 0x035C = IBM PC CP-860 (Portuguese) 0x035D = IBM PC CP-861 (Icelandic) 0x035E = IBM PC CP-862 (Hebrew) 0x035F = IBM PC CP-863 (Canadian (French)) 0x0360 = IBM PC CP-864 (Arabic) 0x0361 = IBM PC CP-865 (Nordic) 0x0362 = IBM PC CP-866 (Cyrillic (Russian)) 0x0365 = IBM PC CP-869 (Greek (Modern)) 0x036A = Windows CP-874 (Thai) 0x03A4 = Windows CP-932 (Japanese Shift-JIS) 0x03A8 = Windows CP-936 (Chinese Simplified GBK) 0x03B5 = Windows CP-949 (Korean (Wansung)) 0x03B6 = Windows CP-950 (Chinese Traditional BIG5) 0x04B0 = UTF-16 (BIFF8) 0x04E2 = Windows CP-1250 (Latin II) (Central European) 0x04E3 = Windows CP-1251 (Cyrillic) 0x04E4 = Windows CP-1252 (Latin I) (BIFF4-BIFF5) 0x04E5 = Windows CP-1253 (Greek) 0x04E6 = Windows CP-1254 (Turkish) 0x04E7 = Windows CP-1255 (Hebrew) 0x04E8 = Windows CP-1256 (Arabic) 0x04E9 = Windows CP-1257 (Baltic) 0x04EA = Windows CP-1258 (Vietnamese) 0x0551 = Windows CP-1361 (Korean (Johab)) 0x2710 = Apple Roman 0x8000 = Apple Roman 0x8001 = Windows CP-1252 (Latin I) (BIFF2-BIFF3) Код (Text): Наборы символов: 0x00 = ANSI Latin 0x01 = System default 0x02 = Symbol 0x4D = Apple Roman 0x80 = ANSI Japanese Shift-JIS 0x81 = ANSI Korean (Hangul) 0x82 = ANSI Korean (Johab) 0x86 = ANSI Chinese Simplified GBK 0x88 = ANSI Chinese Traditional BIG5 0xA1 = ANSI Greek 0xA2 = ANSI Turkish 0xA3 = ANSI Vietnamese 0xB1 = ANSI Hebrew 0xB2 = ANSI Arabic 0xBA = ANSI Baltic 0xCC = ANSI Cyrillic 0xDE = ANSI Thai 0xEE = ANSI Latin II (Central European) 0xFF = OEM Latin I