2

此代码必须通过给定的 rgb 为 J1 单元格着色。

row_number_excel = 1;
representative_red = 205;
representative_green = 211;
representative_blue = 201;
headers = {'J'};
rgb = [representative_red representative_green representative_blue]; %# if you have 0 to 1 values        multiply by 255 and round
clr = rgb * [1 256 256^2]'; %# convert to long number Excel understands
pwd = 'D:\grapes\main';
e = actxserver ('Excel.Application'); % open Activex server
filename = fullfile(pwd,'example.xls'); %# full path required
if exist(filename,'file')
    ewb = e.Workbooks.Open(filename); %# open the file
else
    error('File does not exist.') %# or create a new file
end
esh = ewb.ActiveSheet;
for c = 1:row_number_excel
    str = num2str(row_number_excel);
    esh.Range(strcat(headers{1},str)).Interior.Color = clr;
end
ewb.Save
ewb.Close(false)
e.Quit

我尝试运行此代码,但单元格的颜色与给定的 rgb 不同。当我第二次运行代码时,在我的目录中创建了一个文件,名为:“2E60F720”。它的类型是“文件”。然后程序跑了又跑,直到我被任务管理器停止'EXCEL.EXE'才停止。之后matlab给我写了这个:

"??? Error: The remote procedure call failed.
Error in ==> test1 at 212 ewb.
Close(false);"

有人能帮助我吗?我捕获了屏幕。在左侧,程序仍在运行,在右侧,这是我的目录。我标记了创建的文件。 在此处输入图像描述 谢谢!

解决我的问题的解决方案是:

row_number_excel = 1;
representative_red = 205;
representative_green = 211;
representative_blue = 201;
headers = {'J'};
rgb = [representative_red representative_green representative_blue]; %# if you have 0 to 1 values            multiply by 255 and round
clr = rgb * [1 256 256^2]'; %# convert to long number Excel understands
pwd = 'D:\grapes\main';
e = actxserver ('Excel.Application'); % open Activex server
filename = fullfile(pwd,'example.xls'); %# full path required
if exist(filename,'file')
    ewb = e.Workbooks.Open(filename); %# open the file
else
    error('File does not exist.') %# or create a new file
end
esh = ewb.ActiveSheet;
for c = 1:row_number_excel
    str = num2str(row_number_excel);
    esh.Range(strcat(headers{1},str)).Interior.Color = clr;
end
xlWorkbookDefault = 51; %# it's the Excel constant, not sure how to pass it other way
ewb.SaveAs(fullfile(pwd,'example2'), xlWorkbookDefault)
ewb.Close(false)
e.Quit

感谢@yuk!

4

1 回答 1

2

问题行是用ewb.Save.

您的文件实际上是旧格式(excel 2003),不确定它是否支持真正的 RGB 颜色,这可能是原因。

我建议使用新名称和最新格式保存文件。把它作为最后几行:

xlWorkbookDefault = 51; %# it's the Excel constant, not sure how to pass it other way
ewb.SaveAs(fullfile(pwd,'example2'), xlWorkbookDefault)
ewb.Close(false)
e.Quit
于 2012-04-12T16:58:48.853 回答