LINUX.ORG.RU

парсер на перл для файлов MS Office для переноса в БД


0

1

есть такая задача, наверное кто то сталкивался.есть файл с данными xlsx (excel 2007). данные из этого файла надо перенести в базу данных. знаю perl. подскажите как и чем лучше парсить этот файл? в какой лучше его формат певенести, как это лучше делать?

Ответ на: комментарий от pkurg

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

Evgen25
() автор топика

Скрипт на M$ васике, пробегающий ячейки + запись в базу не отходя от кассы: 5 строк.

Экспорт в csv и загрузка в БД (часто бывают штатные средства)

ziemin ★★
()

Если нужно каким-то образом учесть форматирование, то можно попробовать конвертнуть в fods. Будет опенофисный документ, но без сжатия, а голым xml'ем.

static_lab ★★★★★
()
Ответ на: комментарий от static_lab

Если нужно каким-то образом учесть форматирование, то можно попробовать конвертнуть в fods.

есть файл с данными xlsx

xlsx - это zip архив с xml файлами внутри, зачем его ещё куда-то конвертировать?

anonymous
()
Ответ на: комментарий от Evgen25

а попробовать распаковать? wikipedia: xlsx

.xlsx è un'estensione di Excel introdotta con la versione 2007 di Microsoft Office. Si tratta di un file XML compresso con metodo ZIP.

извиняюсь за итальянский язык

anonymous
()
Ответ на: комментарий от anonymous

wikipedia: Microsoft Excel

Формат: Рабочая книга Excel
Расширение: .xlsx
Примечания: Стандартный формат рабочих книг Excel 2007. В действительности это сжатый ZIP-архив каталога XML документов. Является заменой бывшего бинарного формата .xls, хотя и не поддерживает макросы по соображениям безопасности.

anonymous
()
Ответ на: комментарий от anonymous

xlsx - это zip архив с xml файлами внутри, зачем его ещё куда-то конвертировать?

А вдруг окажется проще распарсить OpenDocument, а не OOXML?

static_lab ★★★★★
()

в гугле забанили?

вендо-метод:

Set objArgs = WScript.Arguments
InputName = objArgs(0)
OutputName = objArgs(1)
Set objExcel = CreateObject("Excel.application")
objExcel.application.visible=false
objExcel.application.displayalerts=false
set objExcelBook = objExcel.Workbooks.Open(InputName)
objExcelBook.SaveAs OutputName, 42
objExcel.Application.Quit
objExcel.Quit
всё это в файл xls2csv.vbs и потом запускай

invy ★★★★★
()
Последнее исправление: invy (всего исправлений: 2)
Ответ на: комментарий от anonymous

ssconvert из gnumeric-а наверняка менее жручий.

frob ★★★★★
()
Ответ на: комментарий от NeverLoved

парсер вроде как написал. пока данные беру из тестового вида в кодировке UTF-8. но при первом запуске парсера выскочила ошибка. не могу понять, толи файл не правильно читаю то ли он к таблице доступ получить не может.

DBD::Pg::db do failed: ERROR:  relation "ts_avto" does not exist
СТРОКА 1: INSERT INTO TS (
                      ^ at ./perlmysql.pl line 48, <IN> line 1.
Evgen25
() автор топика
Ответ на: комментарий от Evgen25

запрос делаю так

$dbh -> do ("INSERT INTO TS_avto ( тут название столбцов
                                )

                        VALUES (?,?,?,?,?,?,?,?,?,?,?)",

                            undef, тут перечисление переменных
                        );

база данных postgresql, раньше с ней дело не имел. тут решил по пробовать.

Evgen25
() автор топика
Ответ на: комментарий от Evgen25

ни с постгрей, ни с перлом толком дела не имел, но у тебя налицо проблема не с кодом а с бд. к сожалению больше ничем не могу помочь.

NeverLoved ★★★★★
()
Ответ на: комментарий от anonymous

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

Evgen25
() автор топика
Ответ на: комментарий от Evgen25

что то я вообще запутался. создаю схему CREATE SCHEMA myschema; потом создаю таблицу CREATE TABLE myschema.mytable ( ...... );

потом делаю селект select * from mytable where schemaname='myschema';

на что пострес мне говорит. ERROR: relation «mytable» does not exist

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

Evgen25
() автор топика
Ответ на: комментарий от Evgen25

еще интересный момент

testdb=# CREATE SCHEMA myschema;
CREATE SCHEMA
testdb=# CREATE TABLE myschema.mytable ();
CREATE TABLE
testdb=# \d
Отношения не найдены.
testdb=#
хотя он мне должен был вроде как показать все таблицы

Evgen25
() автор топика

никуда переводить не надо. xlsx это же xml, вроде. открой в текстовом виде, изучи структуру. ну и XML::LibXML тебе в руки

chg ★★★★★
()
Ответ на: комментарий от Evgen25

практика показала следующее: 1. к таблице надо обращаться не по названию, а название схемы.название таблицы. 2. почему то если таблица и колонки содержат заглавные буквы то подключиться не получается, когда всё написано прописными буквами - никаких проблем не возникает, с чем это связано я не знаю, про такие вещи почему то нигде информации я не нашел.

Evgen25
() автор топика
Ответ на: комментарий от Evgen25

странное дело я обнаружил. текст парсится нормально, но если в тексте есть запятые то эти строки не добавляются в БД. пытался тест с запятыми добавить напрямую ручками, результат тот же. ничего не говорит, но в таблице эти строки не добавляются. кто знает с чем связано сие чудо?

Evgen25
() автор топика
Ответ на: комментарий от anonymous

парсер на перл для файлов MS Office для переноса в БД (комментарий) тут запрос весь написан. появилась мысль что надо добавлять знаки " и между ними уже писать значение колонки, тогда скорее всего не будет такой проблемы. но вот как по пробовать еще не придумал

Evgen25
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.