Главная страница
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.058 c
3-1159861658
Itonix
2006-10-03 11:47
2006.12.10
Два запроса


2-1164011733
Steep
2006-11-20 11:35
2006.12.10
ADO + Ms SQL Server


15-1163760410
untermensch
2006-11-17 13:46
2006.12.10
В чём щас помосчь пишется ?


6-1153442710
Glu
2006-07-21 04:45
2006.12.10
Не одно подключение


2-1164052259
c0rben
2006-11-20 22:50
2006.12.10
Вопрос по компоненту TListBox