Автор Тема: Чтение Excel файла  (Прочитано 4935 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн SPEED

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Чтение Excel файла
« : 19 Октября 2004, 15:21:12 »
Ситуация следующая.
На хостинге стоят ограничения по используемой памяти скриптом.
Файл xls весит более чем 1 мб и в нем более 5000 строк данных.
Необходимо перенести данный файл в БД MySQL.

Использую ParseExcel

use Spreadsheet::ParseExcel;
use Spreadsheet::ParseExcel::FmtUnicode;

my $oExcel = new Spreadsheet::ParseExcel;
my $oFmtR = Spreadsheet::ParseExcel::FmtUnicode->new(Unicode_Map => "CP1251");
my $oBook = $oExcel->Parse("$file", $oFmtR);

но последнюю строчку данного кода скрипт не заканчивает по причине нехватки памяти процессу. Проверил у себя локально perl заюзал порядка 40 мб памяти, на хостинге же отведено 32 мегабайта.

Какие будут предложения по поводу реализации перевода данных из экзеля в БД MySQL?

Не предлагать следующие варианты:
1. Сохранить xls в csv - все равно может попасться файл который будет много весить и опять будет та же ошибка
2. Разбить файл на более мелкие

Мне приходит в голову что можно попробовать брать по, например, 100 строчек из файла. Но как это реализовать на parseexel?

Ну вообщем пишите какие будут предложения.
Желательно учитывать следующее:
1. файл может весить до 20мб
2. количество записей может быть до 100000.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Чтение Excel файла
« Ответ #1 : 20 Октября 2004, 01:55:25 »
Цитировать
SPEED:
е предлагать следующие варианты: 1. Сохранить xls в csv - все равно может попасться файл который будет много весить и опять будет та же ошибка

м-дя, а в чем проблема считывать его не весь, а построчно и закидывать в БД?
 в исканиях.

Оффлайн SPEED

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Чтение Excel файла
« Ответ #2 : 20 Октября 2004, 11:53:54 »
Ну такой вариант в принципе я тоже продумал... :)
Но мне не нравится сама суть csv - потому что люди обычно работают в экзеле и потом им надо куда-то сохранять... с определенными разделителями...

А реально как нить из экзелевского файла брать по определенному числу строк?

Оффлайн BonJorno

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 52
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Чтение Excel файла
« Ответ #3 : 21 Октября 2004, 06:49:07 »
Может тебе DBD-Excel попробовать?

Оффлайн SPEED

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 7
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Чтение Excel файла
« Ответ #4 : 21 Октября 2004, 11:03:17 »
Думал над этим вариантом тоже...
Но все равно перед тем как приконнектиться к файлу все равно придется его открывать, а это опять память, которой не хватит.

ПОэтому решил все таки csv, а если точнее то текстовый файл с разделителями табуляции.

Оффлайн plushpooh

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 1
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Чтение Excel файла
« Ответ #5 : 20 Марта 2005, 16:23:30 »
Уважаемые, я столкнулся с такой же точно проблемой, и нашел кое-какие ссылки. Правда на англйском, но все почти все понятно :)

http://perlmonks.thepen.com/379743.html

http://www.hippo2000.info/cgi-bin/KbWikiE/KbWiki.pl?cmd=disp&page=Spreadsheet%3A%3AParseExcel%3A%3ADump

http://www.log2.net/Code/xls2html.pl

В принципе все об одном и том же. К сожалению, для меня не подходит "поячеечный" разбор, т.к. анализирую данные одновременно в разных ячейках. Но может, кому и пригодится..

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28