使用MATLAB通过ActiveX协议将字符串值写入Excel电子表格..发现了一个问题

问题描述 投票:1回答:2

我正在使用MATLAB 2017a并且过去一直在使用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";];

A = char(["Str1";"Str2";"Str3";]);

然后程序将A char数组写入eActivesheetRange Range中的每个单元格。

有没有办法使用MATLAB cells()连接调用Range.Valuecells().Value能解决这个问题吗?

excel matlab activex
2个回答
1
投票

我不认为writing to Excel using ActiveX能够正确处理string类型。在这种情况下,您可以通过使用cell array将字符串数组转换为character vectorscellstr来使其工作。将您的最后一行代码更改为以下代码(在R2016b中):

eActivesheetRange.Value = cellstr(A);

用以下内容替换最后两行也有效:

e.Activesheet.Range('A1:A3').Value = cellstr(A);

0
投票

解决方案当然是一个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
© www.soinside.com 2019 - 2024. All rights reserved.