[oodisc] Автоввод - сводная таблица
Владислав Орлов
software на pro-za.com.ua
Чт Июл 28 17:42:16 MSD 2005
В сообщении от Четверг, 28-Июл-2005 08:40 Денис написал(a):
> Имеется несколько тысяч файлов формата *.xls
Это не страшно, это даже хорошо, это лучше чем тысячи таблиц на бумаге.
> У всех название вида (Waranty xxxx..xls) и находятся в одной папке.
Нужно уточнение - файловая стуктура уже установлена раз и навсегда и менятся
не должна? И файлы обязательно xls, и каталог жестко задан? И имя листа
"Дефект1" всегда одно и то же? И номер строки (в примере - 11) задан жестко?
> В сводной таблице надо получить данные из каждого файла.
> Формула в ячейке получается вот такого вида:::
>
> ='file:///D:/Dmitry_Gopka/Waranty from 1000/Waranty
> 1028..xls'#$Дефект1.E11&'file:///D:/Dmitry_Gopka/Waranty from 1000/Waranty
> 1028..xls'#$Дефект1.F11&'file:///D:/Dmitry_Gopka/Waranty from 1000/Waranty
> 1028..xls'#$Дефект1.G11&'file:///D:/Dmitry_Gopka/Waranty from 1000/Waranty
> 1028..xls'#$Дефект1.H11&'file:///D:/Dmitry_Gopka/Waranty from 1000/Waranty
> 1028..xls'#$Дефект1.I11&'file:///D:/Dmitry_Gopka/Waranty from
> 1000/Waranty 1028..xls'#$Дефект1.J11&'file:///D:/Dmitry_Gopka/Waranty
> from 1000/Waranty 1028..xls'#$Дефект1.K11
То есть просто сцепить результаты? Не суммировать, а отобразить текст из
нескольких ячеек исходной таблицы в виде одной строки? Тогда это
действительно не совсем "сводная" таблица...
>
> Как можно автоматом( какой синтаксис) и если можно, то поподробнее
> объясните, как в столбце в следующей ячейке увеличивать номер файла ( в
> данном примере - 1028) на 1. или брать число из соседнего столбца.
Эта задача имеет (ИМХО!) как минимум два решения - быстрое и правильное.
Быстрое: привязать номер СТОЛБЦА результирующей таблицы к номеру файла. Для
этого решения, на отдельном листе в одну из клеток записал текст
'file:///D:/Dmitry_Gopka/Waranty from 1000/Waranty и присвоил клетке имя
AddFile. В другой клетке записал число 1027 и назвал ее Ofc. В третью записал
"хвост" формулы без адреса конкретной клетки - ..xls'#$Дефект1. Ей дал имя
Ext.
Теперь вся первоначальная конструкция (привожу только начало) превращается в:
=INDIRECT(CONCATENATE(AddFile;COLUMN()+Ofc;Ext;"E11")) &
INDIRECT(CONCATENATE(AddFile;COLUMN()+Ofc;Ext;"F11"... И т.д.
Еще облегчить жизнь ООо можно, если вынести часть
=CONCATENATE(AddFile;COLUMN()+Ofc;Ext) в, скажем, первую строку, а в INDIRECT
указывать только адрес ячейки: =INDIRECT(CONCATENATE(A$1;"E11")) &
INDIRECT(CONCATENATE(A$1;"F11"))...
Служебную строку с полным именем файла и листа можно скрыть, чтобы глаза не
мозолила.
Дальнейшие улучшения лежат в использовании OFFSET и других адресных функций, в
привязке формулы к номеру строки результирующей таблицы и т.д.
В конце концов можно будет добится того, что ВО ВСЕЙ таблице будет одна и та
же формула, вычисляющая по заголовкам строк и столбцов (даже не по их именам,
а по текстам надписей) реальные значения из внешних файлов.
> А если есть возможность проделать это в ООBase напрямую и перекидывать
> данные в MySql- буду вообще безмерно счастлив.
О! А вот это уже - правильное решение. Макрос, который затолкает данные из
таблиц (перебрав их все) в MySQL пишется и отлаживается около суток, если
постоянно подглядывать в http://www.pitonyak.org/AndrewMacro.sxw (разделы
6.3.1.Reference a cell in another document, 6.11.Database range и 9.Database)
Зато потом за час работы макрос затолкает данные в базу и работать с ними
будет легко и приятно...
Есть правда еще и ряд промежуточных решений - не самых быстрых и не очень
мудреных. Например, записать всю пачку формул ДЛЯ ОДНОЙ внешней книги (номер
книги указать в отдельной ячейке, чтобы менять удобно было) и когда данные
отобразятся выделить (ctrl+* на NumPad) и перетащить или копи-пастом
перенести в текстовый документ, который потом влить в БД через insert into...
--
Всего доброго!
Владислав Орлов aka JohnSUN
Подробная информация о списке рассылки Oo-discuss