Select Two Images In Excel Using ActiveX

10 次查看(过去 30 天)
I have an Excel Workbook which contains two pictures in it. The picture names are "Picture 2" & "Picture 3".
I am able to select either picture by itself like so
E = actxserver('Excel.Application'); % start COM server
E.Visible=1; % makes visible
E.Workbooks.Open('myWorkbook.xlsx'); % opens file
E.ActiveSheet.Shapes.('Picture 2').Select % selects Picture 2
or alternatively
E.ActiveSheet.Shapes.Item(2).Select
I cannot figure out how to select both at once. I tried several different ways but none of them work
E.ActiveSheet.Shapes.('Picture 2','Picture 3').Select
E.ActiveSheet.Shapes.({'Picture 2','Picture 3'}).Select
E.ActiveSheet.Shapes.("Picture 2","Picture 3").Select
E.ActiveSheet.Shapes.(["Picture 2","Picture 3"]).Select
I recorded a macro in Excel selecting the two pictures...
ActiveSheet.Shapes.Range(Array("Picture 2", "Picture 3")).Select
...and notice that the two picture names are grouped in the Array function.
Thanks in advance for any help.
Mike

回答(1 个)

Prathamesh
Prathamesh 2023-7-21
Hi,
I understand that you want to select two images from excel.
You can use the cellfun()” function to create imagenamecell” object and use it to select multiple images.
Excel = actxserver('Excel.Application');
fullFileName = 'C:\path\to\workbook.xlsx';
ExcelWorkbook = Excel.Workbooks.Open(fullFileName);
oSheet = ExcelWorkbook.Sheets.Item(1);
Shapes = oSheet.Shapes;
imageNames = {'Picture 2', 'Picture 3'};
imageNamesCell = cellfun(@(x) [oSheet.Name, '!', x], imageNames, 'UniformOutput', false);
Shapes.Select(imageNamesCell);
Alternatively, you can use a for loop
Excel = actxserver('Excel.Application');
fullFileName = 'C:\path\to\workbook.xlsx';
ExcelWorkbook = Excel.Workbooks.Open(fullFileName);
oSheet = ExcelWorkbook.Sheets.Item(1);
Shapes = oSheet.Shapes;
imageNames = {'Picture 2', 'Picture 3'};
for i = 1:numel(imageNames)
shapeName = imageNames{i};
shape = Shapes.Item(shapeName);
shape.Select;
end
I hope this resolves your issue.
  2 个评论
Michael Cappello
Michael Cappello 2023-7-28
Hi Prathamesh,
Thank you for taking the time to respond. Unfortunately neither method works for me.
When I try to select them all via "Shapes.Select(imageNamesCell);" I get the following error message: "Incorrect number or types of inputs or outputs for function 'Select'."
When I tried the second method, the i'th picture does get selected, but all other pictures are deselected.
Do you know why either of these problems would occur?
I am running Matlab 2022b on Windows 10 using Microsoft® Excel® for Microsoft 365 MSO (Version 2305 Build 16.0.16501.20074) 32-bit.
Michael Cappello
Michael Cappello 2023-7-28
After some more digging I found this: https://learn.microsoft.com/en-us/office/vba/api/excel.shape.select which helped me to get the second method to work, I changed the line:
from: shape.Select;
from: shape.Select(false);
The argument to shape.Select should be set to true (evidently the default value) to replace the current selection with the specified object. False to extend the current selection to include any previously selected objects and the specified object.
I would still like to know how to select multiple pictures at once.

请先登录,再进行评论。

类别

Help CenterFile Exchange 中查找有关 Use COM Objects in MATLAB 的更多信息

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by