среда, 27 ноября 2013 г.

SUSE 11 perl WriteExcel кириллица

установка модулей
Скачиваем с http://search.cpan.org/ модули
OLE-Storage_Lite-0.19
Spreadsheet-WriteExcel-2.40
DBD-Oracle-1.68

Для каждого выполняем от рута
perl Makefile.pl
make
make install

Для записи кириллицы с файла:

#!/usr/bin/perl
use Spreadsheet::WriteExcel;
use Encode 'encode';
use Encode 'decode';
my $workbook  = Spreadsheet::WriteExcel->new('test.xls');
my $worksheet = $workbook->add_worksheet();

#Добавляем шрифт с поддержкой юникода в свойства ячейки
my $uni_font  = $workbook->addformat(font => 'Arial Unicode MS');

my $uniString ="Текст с кирилицей ФЫВА ъЪЇї TeSt";

#переводим с UTF-8 в Latin-1
my $uniString1 = decode('UTF-8',$uniString);

#здесь должно быть уже читаемо.

$worksheet->write(1, 0, $uniString1, $uni_font );

#переводим с Latin-1 в UTF-16
$uniString2 = encode('UTF-16',$uniString1);

#А вот это будет читаемо вообще везде.
$worksheet->write_utf16be_string(3, 0,  $uniString2, $uni_font );


Теперь для оракла - перекодируем в UTF16:

my $sth = $dbh->prepare("select convert(Column_name,'AL16UTF16') from dual") or die $dbh->errstr;

Ну и пишем используя то же, что и выше:

my $rowcnt =0;
while (@CurrRow = $sth->fetchrow) {
$worksheet->write_utf16be_string($rowcnt, 0,  $CurrRow[0], $uni_font );
}