通过Matlab GUI在Excel中提取特定变量

时间:2018-04-29 19:38:18

标签: excel matlab functional-programming matlab-guide

我在 Matlab 中创建了一个 GUI ,经过一些计算,它在工作区中显示了各种变量,例如 mass,密度,高度,功率和速度

我的第一个问题是我有一个按钮,我想让我将上述数据保存在 Excel 文件中,格式如下:

  1. 质量,密度和高度在不同的纸张中
  2. 功率和速度在彼此相邻的同一张纸上
  3. 无论我尝试过什么都行不通,这就是为什么我只粘贴 GUI 中的函数:

    function pushbutton1_Callback(hObject, eventdata, handles)
    

    我的第二个问题是我有一个按钮,我想让我在 Excel 文件中保存我想要的任何上述变量,我尝试了以下操作:

    function pushbutton2_Callback(hObject, eventdata, handles)
    % hObject    handle to pushbutton2 (see GCBO)
    % eventdata  reserved - to be defined in a future version of MATLAB
    % handles    structure with handles and user data (see GUIDATA)
        [filename, pathname] = uiputfile('*.xls', 'Choose a file name'); 
        outname = fullfile(pathname, filename); 
        xlswrite(outname, M);
    

    我希望每次运行 GUI 都能够将M设置为我想要提取的变量的名称,例如密度

    有人可以帮我解决上述问题吗?

    提前Τhanks!

2 个答案:

答案 0 :(得分:0)

在我看来,xlswrite对于你的问题的第一部分来说不是一个好的选择,因为如果你想要处理两个不同的变量同时写在同一张纸上,它就不会让你追加现有文件的现有工作表上的数据。您必须通过actxserver实例使用Excel互操作性(有关详细信息,请参阅this page)。

以下是如何将所有内容保存到文件中:

[filename,pathname] = uiputfile('*.xls', 'Choose a File'); 

if (~filename)
    errordlg('Invalid file name specified.');
end

e = actxserver('Excel.Application');
e.DisplayAlerts = false;
e.Visible = false;

wb = e.Workbooks.Add();
shts = e.ActiveWorkbook.Sheets;

sht1 = shts.Item(1);
sht1.Activate();
sht1.Name = 'Density';
sht1.Range(['A1:A' num2str(numel(D))]).Value = D; % your Density variable

sht2 = shts.Item(2);
sht2.Activate();
sht2.Name = 'Height';
sht2.Range(['A1:A' num2str(numel(H))]).Value = H; % your Height variable

sht3 = shts.Item(3);
sht3.Activate();
sht3.Name = 'Mass';
sht3.Range(['A1:A' num2str(numel(M))]).Value = M; % your Mass variable

shts.Add([],shts.Item(shts.Count));
sht4 = shts.Item(4);
sht4.Activate();
sht4.Name = 'Other';
sht4.Range(['A1:A' num2str(numel(P))]).Value = P; % your Power variable
sht4.Range(['B1:B' num2str(numel(S))]).Value = S; % your Speed variable

wb.SaveAs(fullfile(pathname,filename));
wb.Close();

e.Quit();
delete(e);

现在......对于问题的第二部分,初始模式几乎相同,添加inputdlg用于选择要保存的正确变量。在这种情况下,您可以使用xlswrite,因为它是一次性调用以处理所有内容:

variable = cell2mat(inputdlg('Enter the variable name to be saved:','Choose a Variable'));

switch (variable)
    case 'Density'
        data = D;
    case 'Height'
        data = H;
    case 'Mass'
        data = M;
    case 'Power'
        data = P;
    case 'Speed'
        data = S;
    otherwise
        errordlg('Invalid variable name specified.');
        return;
end

[filename,pathname] = uiputfile('*.xls', 'Choose a File'); 

if (~filename)
    errordlg('Invalid file name specified.');
end

xlswrite(fullfile(pathname,filename),data,variable,'A1');

答案 1 :(得分:0)

问题1:只需使用指定的表单多次调用xlswrite中的pushbutton2_Callback即可。 xlswrite(filename, A, sheet)。显然文件名保持不变,A是您在该表上所需的数据。

问题2:有点不清楚你在问什么,但是如果你只想将一个选定的数据点保存到文件中,你可以制作uicontrol列表框样式,其中包含数据要保存的类型。然后,如果您想将该类型的数据保存到特定的列/行/表,您只需查询其value属性(例如get(listbox_handle, 'Value'))并使用它来指定sheet和xlrange,这也是一个选项。 xlswrite函数。我强烈建议您查看该功能的doc