[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