使用matlab for macintosh将可编辑数据导出到excel

使用matlab for macintosh将可编辑数据导出到excel,excel,matlab,user-interface,matlab-uitable,Excel,Matlab,User Interface,Matlab Uitable,我一直在尝试将MatlabUITable数据导出到excel。我尝试了很多事情,但一直无法解决这个问题。几天后,我使用windows尝试了下面的代码,它确实工作得很好,但是,在Macintosh上使用同样的代码不再有效。结果如下: “使用dlmwrite时出错(第118行)无法将输入单元格数组转换为矩阵” 为了寻找更多的信息,我在这里找到了一个答案,()它并不完美。最后,我发现这个方法只适用于使用windows()的matlab 我希望你能帮我解决这个问题 提前谢谢 赫克托 function S

我一直在尝试将MatlabUITable数据导出到excel。我尝试了很多事情,但一直无法解决这个问题。几天后,我使用windows尝试了下面的代码,它确实工作得很好,但是,在Macintosh上使用同样的代码不再有效。结果如下:

“使用dlmwrite时出错(第118行)无法将输入单元格数组转换为矩阵”

为了寻找更多的信息,我在这里找到了一个答案,()它并不完美。最后,我发现这个方法只适用于使用windows()的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

您应该能够使用
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

问题很可能是您的数组同时包含字符串和数字,这些不能放在一个矩阵中,我建议您只需将文件逐行写入csv即可。一个csv文件可以由Excels打开,这在R2013b中甚至不起作用。不要费心于
xlswrite
。您签出MathWorks文件交换了吗?似乎有一种方法甚至不需要Excel。不要对浮点输入使用没有第二个参数的
num2str
<代码>sprintf('%.17g',cellVals{ii,jj}))无论如何都会更好。亲爱的@MZimmerman6,感谢您的帮助和建议。您的示例代码工作得很好。非常感谢您的帮助@霍奇勒抓得好。请注意,所有格式标志都可以看到亲爱的@MZimmerman6,我将您的示例改编为我的代码,效果非常好。但是,我有一个新问题,第一个单元格包含字符串而不是数字,当我运行代码时,第一个单元格显示NaN消息。在那种情况下我能做什么?提前谢谢你!!!我不能完全肯定我理解你在哪里遇到麻烦。你能编辑你的问题来举例说明你的意思吗