使用MATLAB通过ActiveX协议将字符串值写入Excel电子表格。。发现问题
我正在使用Matlab2017a,过去一直使用使用MATLAB通过ActiveX协议将字符串值写入Excel电子表格。。发现问题,excel,matlab,activex,Excel,Matlab,Activex,我正在使用Matlab2017a,过去一直使用xlswrite来执行此操作。我遇到的问题是执行速度,我正在寻找更好的方法。因此,我决定使用actxserver并使用MATLAB中的get(obj)和ActiveX中的Range.Value编写数据。下面是代码的样子: e = actxserver('Excel.Application); eWorkbook = e.Workbooks.Add; e.Visible = 1; eSheets = e.ActiveWorkbook.Sheets; e
xlswrite
来执行此操作。我遇到的问题是执行速度,我正在寻找更好的方法。因此,我决定使用actxserver
并使用MATLAB中的get(obj)
和ActiveX中的Range.Value
编写数据。下面是代码的样子:
e = actxserver('Excel.Application);
eWorkbook = e.Workbooks.Add;
e.Visible = 1;
eSheets = e.ActiveWorkbook.Sheets;
eSheet1 = eSheets.get('Item',1);
eSheet1.Activate;
A = ["Str1";"Str2";"Str3";];
eActivesheetRange = get(e.Activesheet, 'Range', 'A1:A3');
eActivesheetRange.Value = A;
这段无关紧要的代码不会执行,也不会抛出警告或错误消息。。没什么。在我看来,eActivesheetRange
在ActiveX端的计算结果是:Range(“A1:A3”)
。有趣的是,如果我替换
A = ["Str1";"Str2";"Str3";];
与
然后程序将字符数组写入eActivesheetRange
范围内的每个单元格
有没有一种方法可以使用MATLAB
Range.Value
连接调用cells()
?cells().Value
能解决这个问题吗?解决这个问题的方法当然是for
循环
alphacolumn=char(97:117);
% iterate through data array
for i=1:21
str=string(alphacolumn(i))+2;
str2=string(alphacolumn(i))+202;
write1=char(str+":"+str2);
if ~isreal(tsc{i,1})
T = (tsc{i,1});
for j = 1:length(T)
rrange = xl.ActiveWorkbook.Activesheet.Range(char(string(alphacolumn(i)) + string(j+1)));
xlcompatiblestring1 = char(string(T(j,:,:)));
rrange.Value= xlcompatiblestring1;
end
else
tsci=tsc{i,1};
% write data to xl target file
%xlswrite(xlfilepath,tsci,write1);
xlActivesheetRange = get(xl.Activesheet,'Range',write1);
xlActivesheetRange.Value = tsci;
end
end
我认为他不能正确地处理类型。在这种情况下,只需将字符串数组转换为一种使用方法,就可以使其正常工作。将最后一行代码更改为以下代码对我很有用(在R2016b中):
将最后两行替换为以下内容同样有效:
e.Activesheet.Range('A1:A3').Value = cellstr(A);
希望这能帮助那些陷入困境的人。如果你知道更好的方法,请发表评论!
eActivesheetRange.Value = cellstr(A);
e.Activesheet.Range('A1:A3').Value = cellstr(A);