Извлечение определенных переменных в Excel через графический интерфейс Matlab - PullRequest
0 голосов
/ 29 апреля 2018

Я создал GUI в Matlab , который после некоторых вычислений отображает в рабочей области различные переменные, например масса, плотность, высота , мощность и скорость .

Моя первая проблема заключается в том, что у меня есть кнопка, с помощью которой я хочу сохранить вышеуказанные данные в файле Excel в следующем формате:

  1. масса, плотность и высота в разных листах
  2. мощность и скорость находятся на одном листе рядом друг с другом

Что бы я ни пытался, это не сработало, поэтому я вставляю только функцию из 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 с именем переменной, которую я хочу извлечь, например, плотность.

Может кто-нибудь помочь мне с вышесказанным?

Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 30 апреля 2018

Вопрос 1: просто сделайте несколько звонков на xlswrite в pushbutton2_Callback с указанным листом. xlswrite(filename, A, sheet). Очевидно, что имя файла остается прежним, и A - это данные, которые вы хотите получить на этом листе.

Вопрос 2: Немного неясно, что вы спрашиваете, но если вы хотите сохранить в файл только одну из выбранных точек данных, вы можете сделать uicontrol в стиле списка, который имеет типы данных для сохранения. Затем, если вы хотите сохранить данные этого типа в определенном столбце / строке / листе, вы просто запросите их свойство значения (например, get(listbox_handle, 'Value')) и воспользуетесь им для указания листа и xlrange, что также является опцией в xlswrite функция. Я настоятельно рекомендую вам взглянуть на doc для этой функции.

0 голосов
/ 30 апреля 2018

По моему мнению, xlswrite не очень хороший выбор для первой части вашего вопроса, потому что, если вы хотите обрабатывать две разные переменные, записываемые на одном листе асинхронно, это не позволит вам добавлять данные в существующую лист существующего файла. Вместо этого вы должны использовать совместимость с Excel через экземпляр actxserver (дополнительную информацию см. На этой странице ).

Вот как сохранить все в файл:

[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');
...