通过 Matlab GUI 提取 Excel 中的特定变量
Extract specific variables in Excel via a Matlab GUI
我在 Matlab 中创建了一个 GUI,经过一些计算后它显示在工作空间各种变量,例如 质量、密度、高度、功率和速度 。
我的第一个问题是我有一个按钮,我想让我将上述数据保存在 Excel 文件格式如下:
- 质量、密度和高度的差异 sheets
- 功率和速度相同sheet相邻
无论我尝试什么都没有用,这就是为什么我只粘贴来自 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 设置为我要提取的变量的名称,例如密度.
有人可以帮我解决以上问题吗?
在此先致谢!
在我看来 xlswrite
对于你问题的第一部分来说不是一个好的选择,因为如果你想处理异步写入同一个 sheet 的两个不同变量,它不会'不允许您在现有文件的现有 sheet 上追加数据。您必须通过 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:只需在 pushbutton2_Callback
中多次调用 xlswrite
并指定 sheet。 xlswrite(filename, A, sheet)
。显然文件名保持不变,A 是你想要的 sheet.
上的数据
问题 2:有点不清楚你在问什么,但如果你只想将一个选定的数据点保存到文件中,你可以为该函数创建一个 uicontrol of listbox style, which has the data types to save. Then, if you wanted to save that type of data to a specific column/row/sheet you would just query its value property (ex. get(listbox_handle, 'Value')
) and use that to specify sheet and xlrange, which is also an option in the xlswrite
function. I highly recommend you look at the doc。
我在 Matlab 中创建了一个 GUI,经过一些计算后它显示在工作空间各种变量,例如 质量、密度、高度、功率和速度 。
我的第一个问题是我有一个按钮,我想让我将上述数据保存在 Excel 文件格式如下:
- 质量、密度和高度的差异 sheets
- 功率和速度相同sheet相邻
无论我尝试什么都没有用,这就是为什么我只粘贴来自 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 设置为我要提取的变量的名称,例如密度.
有人可以帮我解决以上问题吗?
在此先致谢!
在我看来 xlswrite
对于你问题的第一部分来说不是一个好的选择,因为如果你想处理异步写入同一个 sheet 的两个不同变量,它不会'不允许您在现有文件的现有 sheet 上追加数据。您必须通过 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:只需在 pushbutton2_Callback
中多次调用 xlswrite
并指定 sheet。 xlswrite(filename, A, sheet)
。显然文件名保持不变,A 是你想要的 sheet.
问题 2:有点不清楚你在问什么,但如果你只想将一个选定的数据点保存到文件中,你可以为该函数创建一个 uicontrol of listbox style, which has the data types to save. Then, if you wanted to save that type of data to a specific column/row/sheet you would just query its value property (ex. get(listbox_handle, 'Value')
) and use that to specify sheet and xlrange, which is also an option in the xlswrite
function. I highly recommend you look at the doc。