我已经使用matlab创建了一个GUI,最后用户可以选择保存数据并将其保存到他们选择的excel文件中。
保存两个单独的数据集并将其写入excel文件。第一个是一个数值IntensityValue2
,例如4592.25
和OtherAUC2
,它是不同数值的数组,例如[] [5025.8] [5012.3] [4963.45]
这是我正在使用的代码:
% --- Executes on button press in Save.
function Save_Callback(hObject, eventdata, handles)
% hObject handle to Save (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
IntensityValue = getappdata(0,'IV');
[FileName,PathName]= uigetfile('*.xlsx*','File to save to');
intensityfile = fullfile(PathName,FileName);
filename = intensityfile;
mypeak = {'Peak(nm)'};
xlswrite(filename,mypeak,'Sheet1','A1');
myintensity = {'Intensity'};
xlswrite(filename,myintensity,'Sheet1','B1');
IntensityValue2 = str2num(IntensityValue);
xlswrite(filename,IntensityValue2,'Sheet1','B2');
OtherAUC = getappdata(0,'AUC')
numfiles = getappdata(0,'files');
for a = 2:numfiles
OtherAUC2{a} = OtherAUC{a}
end
xlswrite(filename,OtherAUC2,'Sheet1','B3');
目前excel文件看起来像这样:
Peak(nm) Intensity
4592.25
5025.8 5012.3 4963.45
我希望它看起来像这样:
Peak(nm) Intensity
4592.25
5025.8
5012.3
4963.45
有人可以帮助我实现这个目标吗?我意识到OtherAUC2
中第一个单元格是空的,但我认为foor循环意味着第一个单元格没有写入excel文件。任何帮助或建议将不胜感激!
答案 0 :(得分:1)
回顾一下:
当xlswrite
将数据写入excel文件时,布局将与MATLAB中的布局相同。因此,如果您有一个1x4数组,它将写入一行,如果您有一个4x1数组,它将写入一列。要重塑此数组,您可以使用MATLAB的transpose
函数,该函数通常缩写为.'
(复共轭)或'
(转置)。在这种情况下,这三者都是等价的。
因此,对于您的应用程序,您有两种方法:
OtherAUC2 = OtherAUC2.';
xlswrite(filename,OtherAUC2,'Sheet1','B3');
% or
xlswrite(filename,OtherAUC2.','Sheet1','B3');
这两种方法都应该为您提供您正在寻找的结果。
对于第二部分,您的for
循环只需要进行调整。你在2处开始循环索引是正确的,以便跳过空白值,但是你忘了考虑新数组中的索引移位。
您需要做的就是从OtherAUC2
索引中减去一个:
for a = 2:numfiles
OtherAUC2{a-1} = OtherAUC{a}
end
或者,您可以删除没有循环的空单元格:
OtherAUC = OtherAUC(~cellfun(@isempty, OtherAUC));
cellfun
将指定的函数应用于单元格数组中的每个单元格,这在许多情况下消除了对循环的需要。在这里,它正在做的是通过每个单元格并查看它是否为空。然后,它将OtherAUC
重新定义为每个非空的单元格。这是logical indexing的示例(~cellfun(@isempty, OtherAUC)
返回1x4逻辑数组,其中FALSE
是一个空单元格。)
你可以用数值数组完成同样的事情:
test = [NaN,2,3,4];
test(isnan(test)) = [];
% or
test = [0,2,3,4];
test(test==0) = [];
在比较非整数而不使用公差时,请注意floating point errors。