Guest User

Dzhamshed

a guest
Aug 1st, 2012
487
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 6.60 KB | None | 0 0
  1. function actx_excel
  2. startServ1
  3. % Scope variables from startServ1 to main function
  4. exl; exlWkbk; exlData;
  5. % Start graph server
  6. startServ2
  7. % Scope variables from startServ2 to main function
  8. exl2; exlWkbk2; wb; Shapes;
  9.  
  10. %% Extract column data
  11. % Time:1, inptAil:2, inptEle:3, inptRud:4, respAil:5, respEle:6, respRud:7
  12. for ii = 1:size(exlData,2)
  13.    matData(:,ii) = reshape([exlData{2:end,ii}],size(exlData(2:end,ii)));
  14.    lBoxList{ii} = [exlData{1,ii}];
  15. end
  16. lbs = '';
  17. tme = matData(:,1); % Time data
  18. %% ------------ GUI layout ---------------
  19. % Use system background color for GUI components
  20. panelColor = get(0,'DefaultUicontrolBackgroundColor');
  21. %% Set up the figure and defaults
  22. f = figure('Units','characters',...
  23.         'Position',[30 30 120 35],...
  24.         'Color',panelColor,...
  25.         'HandleVisibility','callback',...
  26.         'IntegerHandle','off',...
  27.         'Renderer','painters',...
  28.         'Toolbar','figure',...
  29.         'NumberTitle','off',...
  30.         'Name','Excel Plotter',...
  31.         'PaperPositionMode','auto',...
  32.         'DeleteFcn',@deleteFig);
  33.  
  34. %% Create the bottom uipanel
  35. botPanel = uipanel('BorderType','etchedin',...
  36.     'BackgroundColor',panelColor,...
  37.     'Units','characters',...
  38.     'Position',[1/20 1/20 119.9 8],...
  39.     'Parent',f);
  40.  
  41. %% Create the right side panel
  42. rightPanel = uipanel('bordertype','etchedin',...
  43.     'BackgroundColor',panelColor,...
  44.     'Units','characters',...
  45.     'Position',[88 8 32 27],...
  46.     'Parent',f);
  47.  
  48. %% Create the center panel
  49. centerPanel = uipanel('bordertype','etchedin',...
  50.     'Units','characters',...
  51.     'Position', [1/20 8 88 27],...
  52.     'Parent',f);
  53.  
  54. %% Add an axes to the center panel
  55. a = axes('parent',centerPanel);
  56. xlabel(a,'Time')
  57.  
  58. %% Add listbox and label
  59. listBoxLabel = uicontrol('Style','text','Units','characters',...
  60.         'Position',[4 24 24 2],...
  61.         'String','Select column(s) to plot',...
  62.         'BackgroundColor',panelColor,...
  63.         'Parent',rightPanel);
  64. listBox = uicontrol('Style','listbox','Units','characters',...
  65.         'Position',[4 2 24 20],...
  66.         'BackgroundColor','white',...
  67.         'Max',10,'Min',1,...
  68.         'Parent',rightPanel,...
  69.         'String',lBoxList(2:end));
  70.  
  71. %% Add edit field for excel file name
  72. plotButton = uicontrol('Style','pushbutton','Units','characters',...
  73.         'Position',[5 2 24 2],...
  74.         'String','Create Plot',...
  75.         'Parent',botPanel,...
  76.         'Callback',@plotButtonCallback);
  77. clearButton = uicontrol('Style','pushbutton','Units','characters',...
  78.         'Position',[33 2 24 2],...
  79.         'String','Clear Graph',...
  80.         'Parent',botPanel,...
  81.         'Callback',@clearButtonCallback);
  82. saveButton = uicontrol('Style','pushbutton','Units','characters',...
  83.         'Position',[60 2 24 2],...
  84.         'String','Save Graph',...
  85.         'Parent',botPanel,...
  86.         'Callback',@saveButtonCallback);    
  87. dispButton = uicontrol('Style','togglebutton','Units','characters',...
  88.         'Position',[87 2 24 2],...
  89.         'String','Show Excel Data File',...
  90.         'Parent',botPanel,...
  91.         'Callback',@dispButtonCallback);
  92.  
  93. %% ------------------Callback Functions------------
  94.  
  95. function plotButtonCallback(src,evnt)  
  96. iSelected = get(listBox,'Value');
  97. grid(a,'on');hold all
  98. for p = 1:length(iSelected)
  99.    switch iSelected(p)
  100.       case 1
  101.          plot(a,tme,matData(:,2))
  102.       case 2
  103.          plot(a,tme,matData(:,3))
  104.       case 3
  105.          plot(a,tme,matData(:,4))  
  106.       case 4
  107.          plot(a,tme,matData(:,5))
  108.       case 5
  109.          plot(a,tme,matData(:,6))
  110.       case 6
  111.          plot(a,tme,matData(:,7))
  112.       otherwise
  113.          disp('Select data to plot')
  114.    end
  115. end
  116. [legh,c,g,lbs] = legend([lbs lBoxList(iSelected+1)]);
  117. end % plotButtonCallback
  118.  
  119. %% Callback for clear button
  120. function clearButtonCallback(src,evt)
  121.    cla(a,'reset')
  122.    lbs = '';
  123. end % clearButtonCallback
  124.  
  125. %% Callback for save graph button
  126. function saveButtonCallback(src,evt)
  127.    tempfig = figure('Visible','off','PaperPositionMode','auto');
  128.    ah = findobj(f,'type','axes');
  129.    copyobj(ah,tempfig)
  130.    print(tempfig,'-dpng',[pwd 'exlgraphexample']);
  131.    Shapes.AddPicture([pwd 'exlgraphexample.png'] ,0,1,50,18,300,235);
  132.    exl2.visible = 1;
  133. end
  134.    
  135. %% Display or hide Excel file
  136. function dispButtonCallback(src,evt)
  137.    %exl.visible = get(src,'Value');
  138.    if get(src,'Value')
  139.       exl.visible = true;
  140.       set(src,'String','Hide Excel Data File')
  141.    else
  142.       exl.visible = false;
  143.       set(src,'String','Show Excel Data File')
  144.    end
  145. end % dispButtonCallback
  146.  
  147. %% Start data server
  148. function startServ1
  149.    exl = actxserver('excel.application');
  150.    % Load data from an excel file
  151.    % Get Workbook interface and open file
  152.    exlWkbk = exl.Workbooks;
  153.    exlFile = exlWkbk.Open([docroot '/techdoc/matlab_external/examples/input_resp_data.xls']);
  154.    % Get interface for Sheet1 and read data into range object
  155.    exlSheet1 = exlFile.Sheets.Item('Sheet1');
  156.    robj = exlSheet1.Columns.End(4);
  157.    numrows = robj.row;
  158.    dat_range = ['A1:G' num2str(numrows)];
  159.    rngObj = exlSheet1.Range(dat_range);
  160.    % Read data from excel range object into MATLAB cell array
  161.    exlData = rngObj.Value;
  162.    exl.registerevent({'WorkbookBeforeClose',@close_event1});
  163. end % startServ1
  164.  
  165. % Start graph server
  166. function startServ2
  167.    % Create a second Excel server and
  168.    % Add another workbook for saving
  169.    % the graph to an Excel file
  170.    exl2 = actxserver('excel.application');
  171.    exlWkbk2 = exl2.Workbooks;
  172.    wb = exlWkbk2.Add;
  173.    graphSheet = wb.Sheets.Add;
  174.    Shapes = graphSheet.Shapes;
  175.    exl2.registerevent({'WorkbookBeforeClose',@close_event2});
  176. end % startServ2
  177.  
  178. % Handle situation where user closes Excel data file
  179. function close_event1(varargin)
  180. % MATLAB does not currently support
  181. % pass by reference arguments for events
  182. % so you cannot set Cancel argument to True
  183. % Instead, just quit server and restart
  184.    if exist('exl','var')
  185.       exl.Quit;
  186.       set(dispButton,'Value',0,...
  187.          'String','Show Excel Data File')
  188.    end
  189.    startServ1
  190. end % close_event1
  191.  
  192. % Handle situation where user closes Excel graph file
  193. function close_event2(varargin)
  194.    if exist('exl2','var')
  195.       wb.Saved = true;
  196.       exlWkbk2.Close
  197.       exl2.Quit;
  198.    end
  199. startServ2
  200. end
  201. %% Terminate Excel process
  202. function deleteFig(src,evt)
  203.    if exist('exl','var')
  204.       exl.unregisterevent({'WorkbookBeforeClose',@close_event1});
  205.       exlWkbk.Close
  206.       exl.Quit
  207.    end
  208.    if exist('exl2','var')
  209.       wb.Saved = true;
  210.       exl2.unregisterevent({'WorkbookBeforeClose',@close_event2});
  211.       exlWkbk2.Close
  212.       exl2.Quit
  213.    end
  214. end      
  215. end
Advertisement
Add Comment
Please, Sign In to add comment