Azzera filtri
Azzera filtri

Select Two Images In Excel Using ActiveX

10 visualizzazioni (ultimi 30 giorni)
Michael Cappello
Michael Cappello il 8 Giu 2023
Commentato: Michael Cappello il 28 Lug 2023
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

Risposte (1)

Prathamesh
Prathamesh il 21 Lug 2023
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 Commenti
Michael Cappello
Michael Cappello il 28 Lug 2023
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 il 28 Lug 2023
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.

Accedi per commentare.

Categorie

Scopri di più su Use COM Objects in MATLAB in Help Center e File Exchange

Prodotti

Community Treasure Hunt

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

Start Hunting!

Translated by