Опитвам се да автоматизирам условното форматиране вExcel листове, генерирани с помощта на MATLAB. Трябва да форматирам цвета на клетката въз основа на стойността в съседната клетка. И аз предпочитам да постигна това чрез използване на actxserver в MATLAB.
Например:
Трябва да форматирам цвета на клетките B2: B20 въз основа на стойностите от клетки A2: A20.
Това е кодът, който използвам
Excel = actxserver("Excel.Application");
set(Excel,"Visible", 0);
Workbook = invoke(Excel.Workbooks, "open", [fpath filesep file ext]);
sheet = get(Excel.Worksheets, "Item", sheetname);
invoke(sheet, "Activate");
%% range: cells that need to be formatted
%% range1: cells that determine the formatting of range
ExAct = Excel.Activesheet;
ExActRange = get(ExAct,"Range",range);
ExActRange.Select;
xlExpression = 2;
Excel.Selection.FormatConditions.Delete;
Excel.Selection.FormatConditions.Add(xlExpression, [], ["=" range "=if(range1 = 6, 1)"]);
Excel.Selection.FormatConditions.Item(1).Interior.ColorIndex = 3;
invoke(Workbook, "Save");
invoke(Excel, "Quit");
delete(Excel);
Моля, уведомете ме за грешката си и по-добре, ако можете да предложите алтернатива, която би могла да свърши работата ми.
Отговори:
0 за отговор № 1Формулата ви не трябва да се позовава на себе си, в Excel ще бъде =IF(A2=6,1,0)
.
Така че параметрите ви за добавяне могат да бъдат
.Add(xlExpression, [], "=IF(A2=6,1,0)")
Ако искате да използвате променлив обхват, тогава:
.Add(xlExpression, [], strcat("=IF(", range1, "=6,1,0)"))
В Excel можете да изберете целия обхват ислед това създайте формулата на условния формат, базирана на първата клетка, и след това формулата ще се промени за всяка клетка, ако не използвате знаци $ за замразяване на стойността.