2017-05-04 5 views
0

Zunächst vielen Dank, für sehr gute Antworten, die ich hier in anderen Themen in der Vergangenheit gefunden habe.MatLab: Dynamisch durch Zellen mit Excel COM-Add-In Iterating

nun auf eine neue Herausforderung:

ich zur Zeit mit dem COM-Add-In in Matlab arbeite, also ich eine Excel-Arbeitsmappe lese und die Farbe der Immobilie zu extrahieren:

excelapp = actxserver('Excel.Application'); %connect to excel 
workbook = excelapp.Workbooks.Open('Solutions.xls');   
worksheet = workbook.Sheets.Item(1);       
ColorValue_Solutions=worksheet.Range('N2').Interior.Color; 

Nun, ich Ich möchte dies für Zellen im Bereich A1 bis J222 tun, für die ich die Range-Eigenschaft dyna- matisch durchlaufen möchte, indem ich dem Programm erlaube, jede Zelle einzeln zu lesen und dann die Farbe zu entfernen. Zum Beispiel:

Columns = {'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J'}; 

for j = 1:length(Columns)   
    for i = 1:222 

worksheet.(char(strcat('Range(''',Columns(j), num2str(i), ''')'))).Interior.Color 

    end 
end 

Dies jedoch führt zu einem Fehler:

Undefined function or variable 'Range('A1')'. 

Ich denke, das Problem ist in der Kombination aus einer Zeichenfolge mit einem eingeschlossenen String zu interpretieren, dh Range ('A1') .

Jede Hilfe wird sehr geschätzt.

Antwort

0

Vor einiger Zeit habe ich eine ähnliche Frage gestellt. Check it out, vielleicht finden Sie es hilfreich.

sollte der folgende Code tun, was Sie wollen:

Sie können sehen, wie die Interior.Color Eigenschaft von jeder Zelle zuerst extrahiert wird, indem ein Cell Objekt bekommt, dann das Interior Objekt dieser Cell Zugriff und schließlich die immer Color Eigenschaft davon Interior Objekt. Die Color Eigenschaft ist eine von Microsoft definierte Farb-Ganzzahl (Sie können mehr erfahren here und here), ich speichere diesen Wert in einer Matrix (M). Um diesen Prozess über den angegebenen Bereich von Zellen zu wiederholen, verwende ich eine verschachtelte Schleife, wie Sie es bereits getan haben. Sobald der Prozess beendet ist, zeige ich den Inhalt von M an.

excelapp = actxserver('Excel.Application'); % Start Excel as ActiveX server. 
workbook = excelapp.Workbooks.Open('Solutions.xls'); % Open Excel workbook. 
worksheet = workbook.Sheets.Item(1);   % Get the sheet object (sheet #1). 

ncols = 10;    % From column A to J. 
nrows = 222;   % From row 1 to 222. 
M(nrows, ncols) = 0; % Preallocate matrix M. 

for col = 1:ncols        % Loop through every column. 
    for row = 1:nrows       % Loop through every row. 
     cell = get(worksheet, 'Cells', row, col); % Get the cell object. 
     interior = cell.Interior;    % Get the interior object. 
     colorint = get(interior, 'Color');  % Get the color integer property. 
     M(row, col) = colorint;    % Store color integer in matrix M. 
    end 
end 

disp(M); % Display matrix M with the color integer information. 

Denken Sie daran, die Verbindung zu schließen, wenn Sie fertig sind. Sie können lernen, wie Sie es tun here und here.

+0

Vielen Dank! Das funktioniert perfekt. –