из xls в csv

Разговоры на любые темы: вы можете обсудить здесь какой-либо сайт, найти единомышленников или просто пообщаться...
Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

из xls в csv

Сообщение Proxy » 05.08.2012 (Вс) 23:35

Доброго времени суток.
Ищу подсказки в решении такой проблемы:
Есть 100 файлов xls, в каждом 1 страница, включающая в себя ячейку с заголовком, ячейку с датой, ячейки со всяческим мусором и область с таблицей (знаю, криво объяснил. Иначе говоря: в рабочую область страницы (что само по себе таблица) включается некоторая табличная структура, расположенная произвольным образом и однозначно не с ячейки A1). Притом все эти 100 таблиц создавались вручную начиная с 1991 года без какого-либо стандарта, т.е. структура сильно отличается (и я даже не знаю в каком виде в оригинале это хранилось, скажем, в 91 году, я имею только xls файлы), расположение таблицы на странице тоже отличается. В 1991 году в таблицах было 7 столбцов, в последних их уже стало 12 (менялось и количество и порядок). Кроме того в некоторых таблицах встречаются вместо корректных строк строки с заголовками (т.е. таблицы получены грубо говоря склеиванием нескольких таблиц, кое-где среди записей затесались заголовки, кое-где в середине таблицы появляются цветные границы ячеек, объединённые ячейки, в ячейках, в которых должны быть числовые значения — строковые значения (например вместо конкретного числа ячейка содержит примерный диапазон вида "120-122"), в столбцах, где должна быть указана дата, ячейки хранят строковые значения и значения эти написаны вручную в каждой таблице по-своему и т.д).
Всё это некоторого рода отчёты, которые в дальнейшем использовать по всей видимости не предполагалось. Получить эти данные в каком-либо ином виде не представляется возможным (если даже и существует уже какая СУБД с таблицей, в которой хранится всё необходимое, то я не знаю как к ней получить доступ да и вообще вероятность существования таковой очень мала).
Всё это необходимо привести в благородный вид (насколько это возможно) и поместить в таблицу базы данных (предположительно 13 полей: 12 как в таблицах + 1 указывает на источник данных согласно заголовку и дате, но это отдельный вопрос и в целом никакой проблемы не представляющий).
Не знаю как удобнее всего всё это осуществить. В голову пришла идея, что неплохо бы всё это для удобства конвертировать в csv, а затем собрать в кучу в одной нехитрой софтине (осуществляет импорт данных в таблицу базы данных, при импорте из csv требует либо метафайл (не мой случай), либо указать соответствие полей вручную (самое то) для каждого csv файла.
Но: при сохранении с помощью ms Excell документа xls как csv (с кодовой страницей Windows-1251) в таблице появляются артефакты такого типа: "?амилия, имя;??зрас?;?ес?? жи?ельс?ва;??". Попробовал воспользоваться Lotus`ом, с ним вышло вот так: "амилия, имя","зрас","ес жиельсва". Вместо некоторых символов в первом случае почему-то оказывается символ с кодом 0x3F, во втором с кодом 0x1A. Нашёл онлайн конвертер — тот же результат.
Полагаю спас бы макрос, но слишком давно я не сталкивался с макросами в ms office, хочется иного решения.
При сохранении в html ничего не теряется и в целом вытащить данные из html и сформировать csv довольно нетрудно, однако таблиц 100 штук и все они разные, придётся учитывать все тонкости их содержимого, боюсь могу допустить ошибки.
Нет ли какого-нибудь более изящного решения проблемы?
ЗЫ. Вполне возможно, что решение очевидно, а я просто слишком давно не спал.
ЗЗЫ. Кроме того задача ещё состоит в том, чтобы из данной таблицы данные возможно было вывести на печать на бланк документа, который соответствует формату оригинального документа конкретного года (это важно). Т.е. в принтер помещается бланк, на котором уже есть заголовки полей и отведено место для заполнения, а выводимый документ должен по формату попасть в каждую отведённую на бланке строку. Шаблонов нет, однако есть doc файлы незаполненных документов, в которые и необходимо поместить данные из базы данных и отправить на печать. У меня была мысль, что проще всего это сделать следующим образом: не использовать никакие word шаблоны и вообще ms office, конвертировать все эти документы в html файлы или что-нибдь вроде xps, в которых просто перед печатью делать автозамену "переменных" данными. Т.е. примерно как в тексте "<br><b><!-- cosignatory_name --></b>" каждое вхождение "<!-- cosignatory_name -->" заменять на необходимое ФИО. Так ли это?
Follow the white rabbit.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: из xls в csv

Сообщение Twister » 07.08.2012 (Вт) 15:13

Раньше частенько приходилось единоразово импортировать данные из самых разных по структуре xls-файлов в таблицы базы данных. Именно в таких случаях я предпочитал прямо на листе в excel-файле генерировать sql-скрипт для модификации/вставки данных в БД.

Я накидал "на коленке" простенький пример: имеется табличная область (можно просто "таблица", думаю и так понятно о чём речь) с данными где-то на листе, имеется другая информация вне таблицы.
Необходимо сгенерировать insert-запрос для каждой записи в таблице. Для этого в какую-нибудь ячейку на листе мы вынесем общую для всех sql-запросов часть (в примере это ячейка A1), а специфичную часть будем формировать в ячейках какого-нибудь соседнего с таблицей столбца (у меня это столбец F). После того, как в одной F-ячейке мы напишем корректную формулу, строящую валидный sql-запрос, мы просто можем "протянуть" её в нужных нам пределах и excel сам сгенерирует всё остальное. Ну а потом копируем сгенерированное содержимое и засовываем в программу, работающую с нашей БД (у меня это PL/SQL Developer, к примеру).

Выигрыш этого способа в том, что 99% информации мы перенесём в базу без особых трудозатрат. Оставшийся 1% можно корректировать/переносить руками. В твоём случае, к примеру, у тебя будет всего парочка модификаций insert-запроса на все 100 файлов. Разумеется, если все 100 файлов имеют абсолютно одинаковый (или похожий друг на друга) формат, то выигрыш от такого способа представляется сомнительным.
Вложения
test.xls.rar
(2.21 Кб) Скачиваний: 139
А я все практикую лечение травами...

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: из xls в csv

Сообщение Proxy » 07.08.2012 (Вт) 20:07

Идея понравилась, но сегодня испытать на своих 100 файлах не смогу. Отпишусь как испытаю. Да, таблицы очень-очень разнородные, похоже корректировать придётся почти для каждого (но разумеется эту задачу очень трудно формализовать и работу не автоматизировать. Ну или по крайней мере на это будет потрачено куда больше трудозатрат, нежели сделать вручную).

Есть ещё проблема с артефактами в тексте в ячейках. Я не могу понять почему такое могло произойти, но некоторые файлы, например, содержат "Μесτο жиτельсτва" вместо "Место жительства", т.е. как-будто кто-то автозаменой произвольные символы поменял на похожие или как-будто текст распознавался из изображения. Пока не могу судить о масштабах проблемы, но возможно вручную всё это отследить тоже будет непросто (если замена не имеет регулярный характер). Собственно из-за этого, как выяснилось, как-раз не получается сохранить документ в xml без пропусков символов.
Follow the white rabbit.

Twister
Теоретик
Теоретик
Аватара пользователя
 
Сообщения: 2251
Зарегистрирован: 28.06.2005 (Вт) 12:32
Откуда: Алматы

Re: из xls в csv

Сообщение Twister » 08.08.2012 (Ср) 6:25

Вычленять артефакты из текста будет гораздо проще, если данные уже будут сидеть в БД. Там и регулярные выражения на помощь придут, и хранимые процедуры. Так что переноси. :)
Что за база-то?
А я все практикую лечение травами...

Proxy
Профессор VB наук
Профессор VB наук
Аватара пользователя
 
Сообщения: 2941
Зарегистрирован: 31.08.2007 (Пт) 4:41

Re: из xls в csv

Сообщение Proxy » 08.08.2012 (Ср) 18:34

Twister писал(а):Вычленять артефакты из текста будет гораздо проще, если данные уже будут сидеть в БД. Там и регулярные выражения на помощь придут, и хранимые процедуры. Так что переноси. :)
Что за база-то?

Спортивные результаты участников кое-каких местных мероприятий.
Однозначно проще. Там можно было бы проверять строки на символы, не входящие в кириллический алфавит в win-1251 (всё что за пределами 168,184,192-255), поискать закономерность замены символов и заменить неправильные символы назад.
Пока я пытался отыскать время на задуманное, узнал, что эти же таблицы есть и в виде кучи баз данных у одного человека (который, как оказалось, когда-то давно уже начинал всё это объединять, но бросил). Пока не знаю в каком виде базы данных. Предположительно там нет никаких артефактов, однако там тем не менее тоже общей структуры никакой нет. Поэтому пока отложил работу с этими xls файлами, т.к. предполагаю, что это напрасный труд. Да и времени сейчас на это нет, дело не срочное.
Follow the white rabbit.


Вернуться в Народный треп

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 19

    TopList