Вниз
Скачать: 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 вся ветка

Скачать: CL | DM;



Память: 0.46 MB
Время: 0.029 c
15-1163787017
antonn
2006-11-17 21:10
2006.12.10
Установка компонент в BSD 2006


15-1164079730
Slider007
2006-11-21 06:28
2006.12.10
С днем рождения ! 21 ноября


15-1164019231
alex-drob
2006-11-20 13:40
2006.12.10
Раздача интернет трафика по сети на Delphi


1-1162226777
Master_
2006-10-30 19:46
2006.12.10
Работа с MIDI в Delphi


2-1164103100
Андрей Сенченко
2006-11-21 12:58
2006.12.10
TResourceStream.CreateFromID () "из себя"




   Наверх