Отправляет email-рассылки с помощью сервиса Sendsay

импорт файлов excel под сабжем

Здравствуйте comp.soft.linux.discuss-list@subscribe.ru !

Уважаемые!
А никто не пытался импортировать файлы M$ Excel под линухом?
Задача - нужно конвертнуть екселевский файл во что-то читабельное,
например файл с разделителями, а потом засунуть в БД.
Пытаюсь импортировать перловым Spreadsheet::ParseExcel или
Spreadsheet::BasicRead, английский текст читается хорошо, и числа и
т.п., а русский никак. Пробовал ковертировать с помощью iconv,
попробовал все известные ей кодировки, успеха не добился. Пробовал
по всякому, вручную перебирал все кодировки кириллицы, потом решил
перебрать их в цикле:
(на UCS и некоторых ISO кодировках останавливается - какие-то
управляющие символы лезут, ждет какого-то ввода...)

for i in `iconv --list|grep //|grep -v UCS|grep -v ISO-10646`; do
enc=`echo $i|sed -e 's/\///g'`;
echo Doing encoding $enc;
echo Encoding is $enc >> test.out;
./xl1.pl ./test.xls $enc >> test.out
done

xl1.pl - скрипт из примера с cpan, делает следующее:

#!/usr/bin/perl
use strict;
use Text::Iconv;
my $encoding = $ARGV[1];
my $file = $ARGV[0];
my $converter = Text::Iconv->new($encoding, "UTF-8");
#локаль у меня UTF-8

use Spreadsheet::ParseExcel;
my $oBook = Spreadsheet::ParseExcel::Workbook->Parse($file);
my($iR, $iC, $oWkS, $oWkC);
foreach my $oWkS (@{$oBook->{Worksheet}}) {
print "SHEET:", $oWkS->{Name}, "\n";
for(my $iR = $oWkS->{MinRow} ;
defined $oWkS->{MaxRow} && $iR <= $oWkS->{MaxRow} ; $iR++) {
for(my $iC = $oWkS->{MinCol} ;
defined $oWkS->{MaxCol} && $iC <= $oWkS->{MaxCol} ; $iC++) {
$oWkC = $oWkS->{Cells}[$iR][$iC];
print "( $iR , $iC ) =>", $converter->convert($oWkC->Value), "\n" if($oWkC);
}
}
}

все, как в примере, только кодировка передается параметром, чтоб из
скрипта подсунуть.
Пришло мне в голову, что может, там не кодировка, а как-нибудь хитро
закодировано, с этими товарищами все может быть.

Может кто победил, ткните пальцем... Очень надо.
ЗЫ - видел еще штуку на питоне, которая через OLE лезет на виндовую
машину, на которой установлен офис... - не подходит, нет такой
виндовой машины, да и слишком сложно для меня.

С уважением,
Степанов Е.Н.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 21667; Возраст листа: 788; Участников: 1422
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/440724

Ответить   Evgeny Stepanov Tue, 20 Sep 2005 21:31:46 +0400 (#440724)

 

Ответы:

Hello, Evgeny!
on Tue, 20 Sep 2005 21:31:46 +0400 you wrote:

А xls2csv вам не подойдет? Вроде никаких проблем с кодировками. У меня, правда,
кои8.

--
Best regards,
Denis

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 21669; Возраст листа: 788; Участников: 1422
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/440787

Ответить   Tue, 20 Sep 2005 23:21:04 +0400 (#440787)

 

Здравствуйте Denis,

Tuesday, September 20, 2005, 11:21:04 PM, вы написали:

да, вроде русский текст читается, правда, Spreadsheet в этом плане
лучше тем, что можно не все вытаскивать, а только отдельные ячейки.
Но все равно, это уже лучше, чем ничего. Спасибо огромное.

С уважением,
Степанов Е.Н.

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 21675; Возраст листа: 789; Участников: 1421
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/440914

Ответить   Evgeny Stepanov Wed, 21 Sep 2005 08:58:01 +0400 (#440914)

 

On Tue, 20 Sep 2005 21:31:46 +0400
Evgeny Stepanov <en***@r*****.ru> wrote:

iconv для таких случаев не годится - капризная штука. Советую вместо
него попробовать asrecod. Тот не повисает на "непонятных" символах.

Что же до кодировки, то, смею предположить, в Excel скорее всего
окажется UTF-16

Я в данный момент именно эти действия произвожу с помощью Java - проект
POIFS-HSSF http://jakarta.apache.org/poi/hssf/
Java читает информацию из ячеек Excell в Unicode, а потом при выводе на
консоль или в базу данных можно конвертировать во что угодно.
Например -

Writer out = new BufferedWriter( new OutputStreamWriter( System.Out,
"KOI8-R" ));
out.write( my_string );
out.flush();
Напечатает my_string в кодировке KOI8-R

Original Message From: "Evgeny Stepanov" <en***@r*****.ru>
To: "comp.soft.linux.discuss (654055)" <lesha***@m*****.ru>
Sent: Wednesday, September 21, 2005 12:31 AM

if($oWkC);

-*Название листа "Linux: разрешение вопросов, перспективы и общение";
Написать в лист: mailto:comp.soft.linux.discuss-list@subscribe.ru
Адрес правил листа http://subscribe.ru/catalog/comp.soft.linux.discuss/rules
Номер письма: 21683; Возраст листа: 789; Участников: 1421
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/441254

Ответить   Wed, 21 Sep 2005 17:20:09 +0700 (#441254)