Forum Webscript.Ru

Программирование => Perl => Тема начата: green_forest от 29 Октября 2004, 02:36:14

Название: Помогите с Spreadsheet::Writeexcel плиз
Отправлено: green_forest от 29 Октября 2004, 02:36:14
Использую весию модуля 2.11, пробовал также 0.43
Perl 5.8.4, Linux, KOI8-R

Создаю файл, пишу по-ангийски - все ок.
По-русски - козябрики.

Где рыть? Очень надо однако...
Название: Помогите с Spreadsheet::Writeexcel плиз
Отправлено: Wyclef от 29 Октября 2004, 03:43:50
В дистрибутиве есть примеры:
ParseExcel: sample/dmpExU.pl
WriteExcel: examples/unicode_cp1251.pl
Название: Помогите с Spreadsheet::Writeexcel плиз
Отправлено: green_forest от 29 Октября 2004, 11:17:08
Спасибо за ответ.

Из доки:
...
unicode_cp1251.pl       Russian:  CP1251      to utf8 in perl 5.8.
...

Как я понял, пример про преобразование CP1251->UTF8
Или нет?

А по-другому никак? Только преобразовав строку в UTF8?
У меня пока нет полной поддержки UTF8.
Название: Помогите с Spreadsheet::Writeexcel плиз
Отправлено: NeoNox от 29 Октября 2004, 12:14:14
Цитировать
green_forest:
У меня пока нет полной поддержки UTF8.

У тебя и не нужно, достаточно того что у Perl есть.
perldoc encoding
Название: Помогите с Spreadsheet::Writeexcel плиз
Отправлено: Phoinix от 29 Октября 2004, 12:46:05
green_forest

Вообще я бы рекомендовал вернуться на версию 0.43, в ней с кириллицей работать гораздо проще...

А так в версиях 2.х - одна вещь, из-за которой до сих пор пользуюсь 0.43 - невозможность создания листов с русскими названиями...
Название: Помогите с Spreadsheet::Writeexcel плиз
Отправлено: green_forest от 29 Октября 2004, 14:41:02
Сори, объясните, а то туплю...
--Делаю
use encoding "koi8-u";

my $workbook = Spreadsheet::WriteExcel->new("test.xls");
my $worksheet = $workbook->add_worksheet("My list");
$worksheet->write(\'A1\', "Пользователь");

$workbook->close;

--В ответ
Wide character in print at /usr/lib/perl5/vendor_perl/5.8.4/Spreadsheet/WriteExcel/Workbook.pm line 205.
Название: Помогите с Spreadsheet::Writeexcel плиз
Отправлено: NeoNox от 29 Октября 2004, 15:01:14
Дай мне строку 205 из /usr/lib/perl5/vendor_perl/5.8.4/Spreadsheet/WriteExcel/Workbook.pm
Название: Помогите с Spreadsheet::Writeexcel плиз
Отправлено: Phoinix от 29 Октября 2004, 15:01:26
green_forest
Объясняю:
Читаем мануал модуля 2.11, по сравнению с 0.43 много изменений методов:

http://search.cpan.org/~jmcnamara/Spreadsheet-WriteExcel-2.11/lib/Spreadsheet/WriteExcel.pm
в части write_unicode
Название: Помогите с Spreadsheet::Writeexcel плиз
Отправлено: green_forest от 29 Октября 2004, 15:07:48
Workbook.pm
...
        print {$self->{_filehandle}} $data;
...
Название: Помогите с Spreadsheet::Writeexcel плиз
Отправлено: green_forest от 29 Октября 2004, 15:37:33
Спасибо, ребята, что натолкнули меня на правильное решение!

$worksheet->write_unicode(\'A1\', $map->to_unicode(koitowin("Пользователь")));

koitowin - koi8->cp1251
Нашел только карту к CP1251, посему двойная перекодировка.