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

通过Matlab GUI在Excel中提取特定变量,excel,matlab,functional-programming,matlab-guide,Excel,Matlab,Functional Programming,Matlab Guide,我在Matlab中创建了一个GUI,经过一些计算后,它会在工作空间中显示各种变量,例如质量、密度、高度、功率和速度 我的第一个问题是,我有一个按钮,我想让我用以下格式将上述数据保存在Excel文件中: 质量、密度和高度在不同的表格中 功率和速度在同一张纸上,彼此相邻 无论我尝试了什么,它都不起作用,这就是为什么我只粘贴GUI中的函数: 我的第二个问题是,我有一个按钮,我想让我在Excel文件中保存上述变量,我尝试了以下方法: function pushbutton2_Callback(hObje

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

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

  • 质量、密度和高度在不同的表格中
  • 功率和速度在同一张纸上,彼此相邻
  • 无论我尝试了什么,它都不起作用,这就是为什么我只粘贴GUI中的函数:

    我的第二个问题是,我有一个按钮,我想让我在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,例如密度

    有人能帮我做上面的事吗


    先走汉克斯

    在我看来,
    xlswrite
    对于问题的第一部分不是一个好的选择,因为如果您想处理异步写入同一工作表的两个不同变量,它不允许您在现有文件的现有工作表上追加数据。您必须通过
    actxserver
    实例使用Excel互操作性(有关更多信息,请参阅)

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

    [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);
    
    现在。。。关于问题的第二部分,初始模式几乎相同,添加了一个用于选择要保存的适当变量的。在这种情况下,您可以使用
    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:只需在
    pushbutton2\u Callback
    中使用指定的工作表多次调用
    xlswrite
    <代码>xlswrite(文件名、A、工作表)。显然,文件名保持不变,A是您希望在该工作表上显示的数据


    问题2:您的问题有点不清楚,但是如果您只想将一个选定的数据点保存到文件中,您可以创建一个列表框样式,其中包含要保存的数据类型。然后,如果要将该类型的数据保存到特定的列/行/工作表,只需查询其value属性(例如
    get(listbox\u handle,'value')
    ),并使用该属性指定工作表和xlrange,这也是
    xlswrite
    函数中的一个选项。我强烈建议您查看用于该函数的。我在代码中尝试了这两种方法,但两次都显示相同的错误“未定义函数或变量‘密度’”,但我可以在工作区中看到该变量。你知道为什么会发生这种情况吗?可能是复制粘贴错误。检查在将代码迁移到Matlab时是否遗漏了任何内容。我检查了很多次,但仍然不起作用。我唯一更改的是范围,因为我的数据不是向量,而是矩阵,我只使用了“A1:”而不是“A1:a”,但我认为这不是问题所在!可能在什么地方漏掉了引号?第二段代码非常好,这是一个错误。第一个仍然没有解决问题,但我感谢你的帮助!
    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');