MATLAB Answers

0

How to Publish from App Designer with a Push Button?

Asked by Florian Gerstbauer on 11 May 2019
Latest activity Answered by Florian Gerstbauer on 6 Jun 2019
Hi Guys!
I'm use MATLAB R2019a.
General question: Is it possible to Publish from the App Designer? (with a Push Button)
This is my Code:
function ButtonReportgeneriereninternPushed(app, event)
% Fahrzeugprofil
app.Dateiname=evalin('base','Dateiname'); % Get my Values from the Worksapce
% Fahrleistungsprofil
app.Projekt=evalin('base','Projekt'); % Get my Values from the Worksapce
app.Type=evalin('base','Type'); % Get my Values from the Worksapce
% there are more Values
options_pdf_nocode.format = 'pdf'; % FORMAT .pdf
options_pdf_nocode.outputDir = 'C:\Users\Florian\OneDrive\Masterarbeit_RMMV\011_Matlab_Excel'; %output
%options_pdf_nocode.stylesheet= ;
options_pdf_nocode.createThumbnail = true;
%options_pdf_nocode.figureSnapMethod = ;
%options_pdf_nocode.imageFormat = ;
%options_pdf_nocode.maxHeight = ;
%options_pdf_nocode.maxWidth = ;
%options_pdf_nocode.useNewFigure = true;
%options_pdf_nocode.catchError = true;
%options_pdf_nocode.codeToEvaluate = ;
%options_pdf_nocode.maxOutputLines = inf;
options_pdf_nocode.evalCode = true;
options_pdf_nocode.showCode = false;
publish('AppDesignerPublish.m',options_pdf_nocode) % Publish durchführen
winopen AppDesignerPublish.pdf % .pdf öffnen
end
% my Publish Function
function [] = AppDesignerPublish(Dateiname,Projekt,Type,Datum,angefordertvonBenutzer,Benutzer,SetupUmgebung,v_W,mue_R,f_R,Temp_E,Hoehe_E,alpha_,phi)
%%
% *Fahrzeugprofil:*
disp (string(Dateiname))
%%
% *Fahrleistungsprofil*
disp (['Projekt: ', string(Projekt)])
disp (['Fahrzeugtyp: ', string(Type)])
% this is function is longer with the same type of writing
end
This is the Error:
Not enough input arguments.
Error in AppDesignerPublish (line 17)
disp (['Projekt: ', string(Projekt)])
If it is not possible to Publish from the App Designer, is it possible to generate a Report with the Report Generator?
If it is only possible with the Report Generator is there some other (free) option?
Thank you for your reply.

  0 Comments

Sign in to comment.

Products


Release

R2019a

3 Answers


Hi Florian,
It is possible to use 'publish' function inside App Designer. From the error report, it appears to be that the 'AppDesignerPublish.m' contains a function that requires an argument, which was not passed. As 'publish' function generates a report that contains the code and the output of the code, the code needs to be run in order to produce the output. While running the code, it appears to be that certain argument is missing and hence it can not complete the process.
I hope this explanation helps.
Regards,
Zenin

  0 Comments

Sign in to comment.


Answer by Mary Abbott on 28 May 2019

Hi Florian,
I agree with Zenin's answer. The error is produced because the AppDesignerPublish function is not being supplied with its required arguments. You can experiment with the codeToEvaluate option of the publish function to supply the neccessary arguments. However, keep in mind that the publish function evaluates the given code in the base workspace, not in your App Designer callback's workspace.
Using Report Generator will allow easier creation and formatting. The following is an example push button callback that generates a report using MATLAB Report Generator:
function ButtonReportgeneriereninternPushed(app, event)
% Your supplied code to get values:
% Fahrzeugprofil
app.Dateiname=evalin('base','Dateiname'); % Get my Values from the Worksapce
% Fahrleistungsprofil
app.Projekt=evalin('base','Projekt'); % Get my Values from the Worksapce
app.Type=evalin('base','Type'); % Get my Values from the Worksapce
% there are more Values
% Example code:
% Import the Report and DOM API package
import mlreportgen.report.*
import mlreportgen.dom.*
% Create a PDF report
rpt = Report("myReport", "pdf");
% Add a heading to the report
h = Heading3(app.Dateiname);
add(rpt, h);
% Add content to the report
p1 = Paragraph("Projekt " + string(app.Projekt));
add(rpt, p1);
p2 = Paragraph("Fahrzeugtyp " + string(app.Type));
add(rpt, p2);
% (Continue adding content.)
% Close and view the report
close(rpt);
rptview(rpt);
end
This example uses only headings and paragraphs, but depending on the data you are reporting, you may want to use other components. See the following link for more content options:

  0 Comments

Sign in to comment.


Answer by Florian Gerstbauer on 6 Jun 2019

Thank you Mary and Zenin.
This how i made it and how it works.
This line is the KEY
options_pdf_nocode.codeToEvaluate = 'AppDesignerPublish(Dateiname,Projekt,Type)';
I didn't choose the MATLAB Report Generator, because we didn't have this Toolbox in our Company.
% APPDESIGNER Button pushed function: ButtonReportgenerierenintern
function ButtonReportgeneriereninternPushed(app, event)
% Fahrzeugprofil
app.Dateiname=evalin('base','Dateiname'); %
% Fahrleistungsprofil
app.Projekt=evalin('base','Projekt'); %
app.Type=evalin('base','Type'); %
% much more parameters
options_pdf_nocode.format = 'pdf';
options_pdf_nocode.outputDir = 'C:\Users\Florian\OneDrive\Masterarbeit_RMMV\011_Matlab_Excel';
%options_pdf_nocode.stylesheet= ;
options_pdf_nocode.createThumbnail = true;
%options_pdf_nocode.figureSnapMethod = ;
%options_pdf_nocode.imageFormat = ;
%options_pdf_nocode.maxHeight = ;
%options_pdf_nocode.maxWidth = ;
%options_pdf_nocode.useNewFigure = true;
%options_pdf_nocode.catchError = true;
options_pdf_nocode.codeToEvaluate = 'AppDesignerPublish(Dateiname,Projekt,Type)';
%options_pdf_nocode.maxOutputLines = inf;
options_pdf_nocode.evalCode = true;
options_pdf_nocode.showCode = false;
publish('AppDesignerPublish.m',options_pdf_nocode) % Publish durchführen
winopen AppDesignerPublish.pdf % .pdf öffnen
% MY FUNCTION AppDesignerPublish.m
function [] = AppDesignerPublish(Dateiname,Projekt,Type)
%%
% *Fahrzeugprofil:*
disp (string(Dateiname))
%%
% *Fahrleistungsprofil*
disp (['Projekt: ', string(Projekt)])
disp (['Fahrzeugtyp: ', string(Type)])
end

  0 Comments

Sign in to comment.