Форум: "Основная";
Текущий архив: 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.04 c