Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spreadsheet_Excel_Writer и кодировка в OpenOffice, как добиться отображения кириллицы ? 
V
    Опции темы
artymen
Дата 18.6.2009, 17:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодер



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Для MS Office я отдельный скрипт написал (после многочасовой долбежки я понял, что универсальный файл невозможно сгенерировать), так что сейчас борюсь персонально с OpenOffice.

Если делаю setVersion(8) и setInputEncoding('CP1251'), то получается следующий результат:  верхняя часть документа отображается нормально, а дальше начинаются косяки (MS Office вообще говорит, что документ поврежден, либо вылетает с предложением отправить отчет об ошибке), похоже на переполнение буфера или что-нить в этом духе. Если размер документа меньше определенной величины, то все нормально, но мне нужно генерить прайс размером порядка 2 тыс. строк. Вывод: writer генерит кривой BIFF8. 

С BIFF5 уже все перепробовал, перегонял текст через iconv() между CP1251, CP1252, UTF-8, UTF-16LE, UTF-16BE в различных комбинациях - бесполезно, каракули лишь разные получаются.

Spreadsheet_Excel_Writer 0.9.1
OLE 1.0.0RC1
PHP 5.2.6
OpenOffice 3.0.1

Тема избитая, весь инет усыпан нерабочими решениями, так что прошу помощи здесь smile
PM MAIL   Вверх
youri
Дата 18.6.2009, 17:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 740
Регистрация: 17.4.2004

Репутация: нет
Всего: 16



PM   Вверх
artymen
  Дата 18.6.2009, 19:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодер



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



Итак, внимание сюда smile
1) Spreadsheet_Excel_Writer генерит кривой BIFF8, так что про setVersion(8) можно забыть, пока не пофиксят в следующих версиях (утверждают, что проект заморожен уже с 2006 года), а вместе с тем и про setInputEncoding() и юникод
2) Решение проблемы с кириллицей (документ будет нормально отображаться и в MS Office и OpenOffice):
Лезем в скрипты Spreadsheet_Excel_Writer, расположенные в "<путь_к_установленному_pear>\Spreadsheet\Excel\Writer\"
В Workbook.php находим 
Код

$this->_codepage         = 0x04E4
 и исправляем на 0x04E3 (кодовая страница Windows-1251)
В Format.php находим 
Код

$this->_font_charset   = 0
 и исправляем на 0xCC (набор символов ANSI Cyrillic).
Теперь безо всяких лишних манипуляций можно писать русский текст в ячейки !

P.S.
(взято отсюда: http://sc.openoffice.org/excelfileformat.pdf)
Код
Кодовые страницы:
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)
Код
Наборы символов:
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


PM MAIL   Вверх
antonML
Дата 1.12.2009, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.12.2009

Репутация: нет
Всего: нет



Все хорошо, а как быть с ограничением в 255 символов ? проблема осталась. Она устраняется при использовании setVersion(8) но это приводит к вышеизложенным проблемам ...
PM MAIL   Вверх
artymen
Дата 1.12.2009, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кодер



Профиль
Группа: Участник
Сообщений: 14
Регистрация: 23.8.2007

Репутация: нет
Всего: нет



А вот не знаю. Я доволен, что хотя бы вышеизложенные проблемы решил smile Возможно, когда-нибудь напишут нормальный модуль для работы с Excel-файлами
PM MAIL   Вверх
antonML
Дата 1.12.2009, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 1.12.2009

Репутация: нет
Всего: нет



При использовании  setVersion(8) и setInputEncoding('CP1251') у меня тоже сбивается кодировка, но проблема решается когда я убираю setVersion(8) без всяких исправлений Workbook.php и Format.php.
Но при этом строки больше 255 символов обрезаются ...
Интересно, а у вас строки обрезаются  ? Может я не до конца разобрался ?
 (и еще, когда я возвращаю setVersion(8) строки не обрезаются)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Extensions | Следующая тема »


 




[ Время генерации скрипта: 0.1183 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.