我很难尝试将matlab uitable数据导出为excel。我尝试过很多东西,而且无法解决这个问题。多天后,我尝试使用Windows下面的代码,它确实工作完美,但是,使用相同的Macintosh不再工作。输出如下:
“使用dlmwrite时出错(第118行)输入单元格数组无法转换为矩阵”
在搜索更多信息时,我在这里找到了答案,(Using "xlswrite" MATLABs for cell arrays containing strings of different size)并不完美。最后我发现这个方法仅适用于使用windows(http://www.mathworks.es/matlabcentral/answers/20819-export-uitable-s-data-to-a-spreadsheet-excel)的matlab。
我希望你能帮我解决这个问题。
提前致谢
赫
function Save_File
hf = figure;
hExportButton = uicontrol('Parent',hf,'Units',...
'normalized','Position',[0 0.81 0.22 0.18],'Style','Pushbutton',....
'String',' Export Data!','FontSize',20,'Callback',@ExportButton_Callback);
dat = rand(5,5);
t=uitable('Data',dat,'ColumnName',{'First','Second','Third','Fourth','Fifth'},...
'Position',[7 10 500 300]);
Data=get(t,'Data');
ColumnName=get(t,'ColumnName');
set(t,'ColumnWidth',{93.5})
function ExportButton_Callback(~,~)
NewData= num2cell(Data,ones(size(Data,1),1),ones(size(Data,2),1));
CombData=[ColumnName';NewData];
FileName = uiputfile('*.xls','Save as');
xlswrite(FileName,CombData);
end
end
答案 0 :(得分:2)
您应该能够使用cell2mat
命令将单元格数组转换为数字数组,然后使用csvwrite
或dlmwrite
。
如果数字和字符串的组合是问题,如上面的评论中所述,您可以使用一些简单的循环来为您完成所有操作。我在下面发布了一些示例代码。
% Creating some temporary data for proof of concept
mat = randi([1,5],10,2);
header = {'Col1','Col2'};
cellVals = [header;num2cell(mat)];
% the real code that does the writing
fh = fopen('temp.csv','w'); % open a file with write privileges, will overwrite old versions
for ii = 1:size(cellVals,1)
first = 1;
for jj = 1:size(cellVals,2)
if first
fwrite(fh,num2str(cellVals{ii,jj},'%f'));
first = 0;
else
fwrite(fh,[',',num2str(cellVals{ii,jj},'%f')]);
end
end
fwrite(fh,sprintf('\r\n')); % print line break
end
fclose(fh); % close file out when done writing