Problem when running a GUI to open, display and plot excel data from a *.xls file.

Hello,
I am having some issues with a code that I saw on the Matlab website. Basically, when I execute the code I get the error Warning: File: mainGui.m Line: 149 Column: 18 Function with duplicate name "readExcelColumns" cannot be called.
handles =
figure1: 173.0012
pushbuttonLoadXLS: 1.0013
popupmenuY: 0.0013
popupmenuX: 179.0012
axes1: 174.0012
output: 173.0012
fileName: 'march-sep_data.xls'
??? Undefined function or variable 'hObject'.
??? Error while evaluating uicontrol Callback
What I am trying to do with this is to plot rainfall data over a period of time but when I go to the dropdown menu for either axes, instead of getting date vs precipitation, I get the contents of column A. Here is the code:
function varargout = mainGui(varargin)
% MAINGUI MATLAB code for mainGui.fig
% MAINGUI, by itself, creates a new MAINGUI or raises the existing
% singleton*.
%
% H = MAINGUI returns the handle to a new MAINGUI or the handle to
% the existing singleton*.
%
% MAINGUI('CALLBACK',hObject,eventData,handles,...) calls the local
% function named CALLBACK in MAINGUI.M with the given input arguments.
%
% MAINGUI('Property','Value',...) creates a new MAINGUI or raises the
% existing singleton*. Starting from the left, property value pairs are
% applied to the GUI before mainGui_OpeningFcn gets called. An
% unrecognized property name or invalid value makes property application
% stop. All inputs are passed to mainGui_OpeningFcn via varargin.
%
% *See GUI Options on GUIDE's Tools menu. Choose "GUI allows only one
% instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES
% Edit the above text to modify the response to help mainGui
% Last Modified by GUIDE v2.5 26-Sep-2011 14:59:19
% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name', mfilename, ...
'gui_Singleton', gui_Singleton, ...
'gui_OpeningFcn', @mainGui_OpeningFcn, ...
'gui_OutputFcn', @mainGui_OutputFcn, ...
'gui_LayoutFcn', [] , ...
'gui_Callback', []);
if nargin && ischar(varargin{1})
gui_State.gui_Callback = str2func(varargin{1});
end
if nargout
[varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});
else
gui_mainfcn(gui_State, varargin{:});
end
% End initialization code - DO NOT EDIT
% --- Executes just before mainGui is made visible.
function mainGui_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% varargin command line arguments to mainGui (see VARARGIN)
% Choose default command line output for mainGui
handles.output = hObject;
% Update handles structure
guidata(hObject, handles);
% UIWAIT makes mainGui wait for user response (see UIRESUME)
% uiwait(handles.figure1);
% --- Outputs from this function are returned to the command line.
function varargout = mainGui_OutputFcn(hObject, eventdata, handles)
% varargout cell array for returning output args (see VARARGOUT);
% hObject handle to figure
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Get default command line output from handles structure
varargout{1} = handles.output;
% --- Executes on selection change in popupmenuX.
function popupmenuX_Callback(hObject, eventdata, handles)
% hObject handle to popupmenuX (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenuX contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenuX
% --- Executes during object creation, after setting all properties.
function popupmenuX_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenuX (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
% --- Executes on selection change in popupmenuY.
function popupmenuY_Callback(hObject, eventdata, handles)
% hObject handle to popupmenuY (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
% Hints: contents = cellstr(get(hObject,'String')) returns popupmenuY contents as cell array
% contents{get(hObject,'Value')} returns selected item from popupmenuY
% --- Executes during object creation, after setting all properties.
function popupmenuY_CreateFcn(hObject, eventdata, handles)
% hObject handle to popupmenuY (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles empty - handles not created until after all CreateFcns called
% Hint: popupmenu controls usually have a white background on Windows.
% See ISPC and COMPUTER.
if ispc && isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
set(hObject,'BackgroundColor','white');
end
function [x,y] = readExcelColumns(fileName,xColNum,yColNum)
a = xlsread(fileName);
x= a(:, xColNum);
y= a(:, yColNum);
% --- Executes on button press in pushbuttonLoadXLS.
function pushbuttonLoadXLS_Callback(hObject, eventdata, handles)
% hObject handle to pushbuttonLoadXLS (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles.fileName = uigetfile('*.xls')
guidata(hObject,handles)
setPopupmenuString(handles.popupmenuX, eventdata, handles)
setPopupmenuString(handles.popupmenuY, eventdata, handles)
set(handles.popupmenuX,'callback','mainGui(''updateAxes'',hObject,eventdata,guidata(hObject))')
set(handles.popupmenuY,'callback','mainGui(''updateAxes'',hObject,eventdata,guidata(hObject))')
function setPopupmenuString(hObject, eventdata, handles)
fileName = handles.fileName;
[numbers, colNames] = xlsread(fileName);
set(hObject, 'string', colNames);
function [x,y] = readExcelColumns(fileName,xColNum,yColNum)
a = xlsread(fileName);
x= a(:, xColNum);
y= a(:, yColNum);
function updateAxes(hObject, eventdata, handles)
xColNum = get(handles.popupmenuX, 'value');
yColNum = get(handles.popupmenuY, 'value');
fileName= handles.fileName;
[x,y] = readExcelColumns(fileName,xColNum,yColNum)
plot(handles.axes1,x,y)
Thanks in Advance

 Accepted Answer

Apparently, you have two functions with the exact same name.
function [x,y] = readExcelColumns(fileName,xColNum,yColNum)

2 Comments

Your code has no reference to readExcelColumns so if the above is the full extent of your code and you do not reference readExcelColumns in a callback coded in to a .fig file, then you could remove both.
The first of your readExcelColumns functions reads the excel file and returns the data.
The second of your readExcelColumns functions takes the same arguments, does not read the data, but attempts to plot the data as if it had already read it, and then attempts to return the data it did not even read. The second of your functions is thus broken. You might, though, perhaps want to move the plot() command to somewhere else.

Sign in to comment.

More Answers (2)

I deleted one but I still can't plot anything. I get
??? Undefined function or variable 'hObject'.
??? Error while evaluating uicontrol Callback

3 Comments

Which line caused the error? Type "dbstop if error" before run the program to debug your code.
handles =
fileName: 'Rain_data_aug-sep.xls'
??? Reference to non-existent field 'popupmenuX'.
Error in ==> mainGui>pushbuttonLoadXLS_Callback at 139
setPopupmenuString(handles.popupmenuX, eventdata, handles)
Error in ==> gui_mainfcn at 96
feval(varargin{:});
Error in ==> mainGui at 44
gui_mainfcn(gui_State, varargin{:});
Error in ==>
@(hObject,eventdata)mainGui('pushbuttonLoadXLS_Callback',hObject,eventdata,guidata(hObject))
Well, the error message says that the popupmenu 'popupmenuX' is not found in the GUI handles.

Sign in to comment.

hello jst came across this post i av tried all that you have said am still getn similar error message. also how can i call an outside function

4 Comments

Glad you did a search first. Not that many users do this.
You can all your function as long as the corresponding .m file is in the MATLAB path. See <http://www.mathworks.com/help/techdoc/matlab_prog/f7-58170.html;jsessionid=yQNnTrHWpv93hXyn8xMt9bxNvh0vyD2xhr0QCCqGmBRv5rk8gYny!528457373? Calling Functions> and <http://www.mathworks.com/help/techdoc/matlab_prog/f7-38085.html? Type of Functions>
thanks for ur reply am reading it nw the major problem now is dat am getn only a single dot instead of a multiple scatter plot
Post a new question. I don't this thread is fit for your issue.

Sign in to comment.

Products

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!