Я в данный момент именно эти действия произвожу с помощью 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
Subject: импорт файлов 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
Номер письма: 21683; Возраст листа: 789; Участников: 1421
Адрес сайта рассылки: http://www.linuxrsp.ru
Адрес этого письма в архиве: http://subscribe.ru/archive/comp.soft.linux.discuss/msg/441254