Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2006.12.10;
Скачать: [xml.tar.bz2];

Вниз

Удаление картинки из листа 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.049 c
15-1164236733
Стример
2006-11-23 02:05
2006.12.10
Скажите. в Линуксе есть dll и IStream ?


2-1164042627
lobach
2006-11-20 20:10
2006.12.10
Как проверить существование пункта в listbox?


15-1164013021
palva
2006-11-20 11:57
2006.12.10
Ода во славу пиратства


3-1159791865
Wolferio
2006-10-02 16:24
2006.12.10
SQL Запрос


1-1161672303
RayRom
2006-10-24 10:45
2006.12.10
Html to RTF желательно в памяти и целым текстом!





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский