2015-02-20 3 views
0

Я пытаюсь автоматизировать условное форматирование в листах Excel, созданных с использованием MATLAB. Я должен отформатировать цвет ячейки на основе значения в соседней ячейке. И я предпочитаю это делать, используя actxserver в MATLAB.Как применить условное форматирование в Excel на основе значения в другой ячейке с использованием 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

Ваша формула не должна ссылаться на себя, в Excel это будет =IF(A2=6,1,0).

Так что ваши параметры Добавить могут быть

.Add(xlExpression, [], '=IF(A2=6,1,0)') 

Если вы хотите использовать переменный диапазон, то:

.Add(xlExpression, [], strcat('=IF(', range1, '=6,1,0)')) 

В Excel, вы можете выбрать весь диапазон, а затем создать условный формат формулу, основанную на первой ячейке, а затем формула будет изменяться для каждой ячейки, если вы не используете $ sign для замораживания значения.

+0

Hi Lance, это похоже на работу. Но вместо ссылки на ячейку, скажем, A2 здесь, я хочу ссылаться на нее с переменной say range1 здесь. Как это сделать?. Спасибо –

+0

@BhaskarChennuri, отредактированный в ответ на это. Заметьте, у меня нет времени, чтобы проверить его, поэтому дайте мне знать, если strcat не выполняет эту работу. –

Смежные вопросы