Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2006.12.10;
Скачать: CL | DM;

Вниз

Удаление картинки из листа Excel   Найти похожие ветки 

 
Антоныч ©   (2006-10-25 16:53) [0]

Всем добрый день. Постоянно пишу программы на Delphi для работы с базами данных, все отчёты оформляю в Excel. И удобно, и заказчики довольны. Если возникают трудности, то действовую стандартно: записываю макрос в Excel, затем пишу то же самое в своей программе. Но сегодня возникли трудности. При определённых условиях потребовалось удалять из отчёта небольшую картинку. Сделал макрос в Excel:
ActiveSheet.Shapes("Pozhar").Delete
перенёс в Delphi:
var
 XLApp, WorkBk, WorkSheet: Variant;
....
 XLApp:=CreateOLEObject("Excel.Application");
 WorkBk:=XLApp.WorkBooks.Open(FileName);
 WorkSheet:=WorkBk.Sheets[1];
 ...
 WorkSheet.Shapes["Pozhar"].Delete

На последней строчке выскакивает ошибка "Член группы не найден". Стал пробовать по-другому, попробовал получить доступ к коллекции Shapes по индексу:
 WorkSheet.Shapes[1].Delete
или
 WorkSheet.Shapes.Item[1].Delete (что, в принципе, одно и то же)  - всё таже ошибка. Единственное, что "схавал" Excel - это вернул общее количество картинок на листе через
 kol:=Worksheet.Shapes.Count
 и выделил их все:
 Worksheet.Shapes.SelectAll
 Выкрутился тем, что для удаления картинки запускаю макрос, но вопрос по-прежнему остался открытым: Почему не работает напрямую?


 
MetalFan ©   (2006-10-25 19:34) [1]

у меня эксель на удаление такой код придложил
ActiveSheet.Shapes("Picture 1").Select
Selection.Delete

попробуй - может прокатит?


 
MetalFan ©   (2006-10-25 20:02) [2]

у меня вот что прокатило:
var
XLApp, WorkBk, WorkSheet, Shp: Variant;
begin
...
XLApp := GetActiveOleObject("Excel.Application");
WorkBk := XLApp.Workbooks[1];
WorkSheet:=XLApp.ActiveSheet;
Shp := WorkSheet.Shapes.Item(1);
Shp.Delete;
...


 
Shirson ©   (2006-10-26 11:14) [3]

Антоныч, просто нужно помнить что в отличии от Delphi, в екселевском VBA, доступ к членам коллекций осуществляется только через .item() и только с круглыми скобками.


 
Антоныч ©   (2006-10-26 16:31) [4]

MetalFan: Спасибо, помогло.
Однако вопрос всё-равно остался открытым. Например, Sheets - это тоже коллекция в Excel (так написано в help-e), и доступ осуществляется через квадратные скобки (см. как у меня выше). Только что попробовал написать
WorkSheet:=WorkBk.Sheets.Item(1)
Вылетела та же ошибка: "Член группы не найден".

Shirson: В том же help-е написано, что свойство Item является у большинства коллекций используемым по-умолчанию, поэтому можно обращаться как через Item, так и без него (по типу TList в Delphi). Например, как коллекция Sheets. Такое ощущение, что к Shapes в данном случае слово "большинство" не относится :-)


 
MetalFan ©   (2006-10-26 16:48) [5]

count проверяй... на всякий случай



Страницы: 1 вся ветка

Текущий архив: 2006.12.10;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.059 c
2-1164145586
albertinio
2006-11-22 00:46
2006.12.10
Работа с Word.Application


15-1164037430
oldman
2006-11-20 18:43
2006.12.10
А вот зато как наши девушки бразильянок обули!!!


3-1159857916
Megabyte
2006-10-03 10:45
2006.12.10
Можно ли прописать алиас без перезапуска сервера?


6-1152780857
alex_dorin
2006-07-13 12:54
2006.12.10
сервер сокетов


2-1164112087
Сатир
2006-11-21 15:28
2006.12.10
сравнение двух булевых массивов