[oodisc] задача: обновление полей сводного документа на основе имеющихся данных в Calc

Круглов Андрей Конс Круглов Андрей Конс
Вт Окт 18 13:29:24 MSD 2005


Владислав Орлов пишет:

>Правильнее всего, конечно, затолкать данные кадровиков в реальную базу с приемлемым пользовательским интерфейсом, НО...
>Раз уж этот вариант не подходит (в данное время), то оставляем все как есть и решаем задачу средствами самого ООо.
>Cамое простое и надежное - столбец vlookup'ов на внешние данные
>
Объясню, почему необходим механизм именно в ООо.
Я видел как небольшие предприятия (винда, офис, интернет, почта), где 
нет вообще программистов как класс и видел, что даже на больших предприятиях
со штатом программистов подобные задачи возникают у простых пользователей.
Есть прослойка людей, которые знают (выучат) языки макросов и будут 
довольно успешно пользоваться этим.
Я сам периодически сталкиваюсь с необходимостью собрать данные в кучу - 
найти дубликаты в листах, или наоборот добавить данные из соседнего листа...

В MSO я периодически правлю один тупой (лень оптимизировать даже) макрос 
вида:

Sub MakeReport()
'
i = 5 ' с какой строки начинать в листе-источнике (пропускаем шапку)
Do While Worksheets("Comps").Cells(i, 4).Value <> ""
Worksheets("ReportList").Cells(i, 1).Value = Worksheets("Comps").Cells(i, 1)
Worksheets("ReportList").Cells(i, 2).Value = Worksheets("Comps").Cells(i, 3)
jj = 2 ' с какой строки начинать в листе-назначения (пропускаем шапку)
Do While Worksheets("Users").Cells(jj, 1).Value <> ""
If Worksheets("Users").Cells(jj, 2).Value = Worksheets("Comps").Cells(i, 
7).Value Then
    Worksheets("ReportList").Cells(i, 2).Value = 
Worksheets("Users").Cells(jj, 2)
    Worksheets("ReportList").Cells(i, 3).Value = 
Worksheets("Users").Cells(jj, 6)
    Worksheets("ReportList").Cells(i, 5).Value = 
Worksheets("Users").Cells(jj, 1)
    jj = 9000
End If
jj = jj + 1
Loop
i = i + 1
Loop
Columns("A:A").EntireColumn.AutoFit
Columns("D:D").EntireColumn.AutoFit
MsgBox "Done!"
End Sub

Причем руки не дойдут до того, чтобы толково написать одну обобщенную 
процедуру (входные переменные - SheetDestination, SheetSource, 
CompareMethod...)

Вот и думаю - может быть есть смысл такую операцию обобщить и добавить 
(отдельным UNO-пакетом, не в сам дистрибутив) для тех, кому такая 
операция нужна?
Щелкаешь например, Сервис - Мастер дубликатов, появляется диалоговое 
окно: "выберите область-источник", "выберите область назначение" и т.п.

С уважением, Андрей.



Подробная информация о списке рассылки Oo-discuss