Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用MATLAB通过ActiveX协议将字符串值写入Excel电子表格。。发现问题_Excel_Matlab_Activex - Fatal编程技术网

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

使用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

我正在使用Matlab2017a,过去一直使用
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);