Доброго времени суток.
Ищу подсказки в решении такой проблемы:
Есть 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 -->" заменять на необходимое ФИО. Так ли это?