My appdesigner code begins by writing the first set of answers to file. The first set of answers start on tab press (i.e., on tab press = instruction and question loads; client selects answers, client presses submit). The first set of answers are written when the SubmitAnswers button is pressed. The 'if loop' then presents the remaining questions and writes these to file. I'm having an issue with the "if statement". When I use <=, the app presents all the remaining questions but I get a "row index exceeds table dimensions' error which makes sense because the row index would be 9. However, the app should not process this and should instead go to the elseif statement but the app won't go to the "elseif statement" and process the questions from the next sheet. I've also tried < but then the app only does up to question 7 and misses the last question. I tried "WriteMode Append" but this command appends all answers and I only want the client's answers for one set of questionnaires in the app. If anyone can be of assistance, I would appreciate it. Someone told me that if I read the table in and write it out again, the rows would append. This also is not working in my code below.
% Button pushed function: SubmitAnswersButton
function SubmitAnswersButtonPushed(app, event) readtable("Answers.xlsx","ReadVariableNames",false,"Sheet","NEQA"); writetable(app.Answers, 'Answers.xlsx', 'Sheet', "NEQA"); %, 'WriteMode', 'Append'); % write the values to the table Answers.xlsx as a backup - should be all questions from all sheets to one page
writetable(app.Answers, app.filenm, 'Sheet', "NEQA"); %, 'WriteMode', 'Append'); % write the answers to the client's excel file;
% collects answers when "Submit" button pushed and writes question and answers to file
if app.NEQCurrentCount < app.NumberOfNEQQuestions app.NEQCurrentCount = app.NEQCurrentCount + 1; % NEQ question counter
app.NEQsheet_counter = 1; % first sheet in Questionnaires_NEQ.xlsx
app.Answers = table; %load next question
app.NEQColumns = 3:2:width(app.NEQQuestions); app.NEQInstructions = readtable('Questionnaires_NEQ.xlsx',"ReadVariableNames",false,"TextType","string","Range","A1"); %height will not work unless readtable comes first; % Succeeds because the sheet counter is a scalar
app.NumberOfNEQInstructions = height(app.NEQInstructions); % total number of instructions; just in case future projects require more rows for instructions;
app.NEQInstructionsTextArea.Value = app.NEQInstructions{1,1}; % writes the instruction in the front panel box from the row count and column 1
app.NEQQuestions = readtable('Questionnaires_NEQ.xlsx',"ReadVariableNames",false,"TextType","string","Sheet", app.NEQsheet_counter); % Succeeds because the sheet counter is a scalar
app.NEQQuestionsTextArea.Value = app.NEQQuestions{app.NEQCurrentCount,2}; % ROW INDEX ERROR OCCURS HERE
selectedButton1.Text = app.ButtonGroup_NEQF.SelectedObject.Text; selectedButton2.Text = app.ButtonGroup_NEQT.SelectedObject.Text; selectedButton3.Text = app.ButtonGroup_NEQE.SelectedObject.Text; newRow = {app.NEQQuestionsTextArea.Value{1}, [selectedButton1.Text], [selectedButton2.Text], [selectedButton3.Text]}; app.Answers = [app.Answers; newRow]; % inserts new row in answer 'file'
readtable("Answers.xlsx","ReadVariableNames",false,"Sheet","NEQA") writetable(app.Answers, 'Answers.xlsx', 'Sheet', "NEQA");%, 'WriteMode', 'Append'); % write the values to the table Answers.xlsx as a backup - should be all questions from all sheets to one page writetable(app.Answers, app.filenm, 'Sheet', "NEQA"); % 'WriteMode', 'Append'); % write the answers to the client's excel file; writes the question in the front panel box from the row count and column 2
app.DummyButton1.Value = 1; app.DummyButton2.Value = 1; app.DummyButton3.Value = 1; % Presents Questions for Sheet 2
elseif (app.NEQCurrentCount > app.NumberOfNEQQuestions) % if the question counter is less than the number of questions
app.NEQsheet_counter = app.NEQsheet_counter + 1; more code end end
Best Answer