WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Excel Files öffnen von Matlab

 

Felix_123
Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 16.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.08.2014, 13:09     Titel: Excel Files öffnen von Matlab
  Antworten mit Zitat      
Hallo,

ich hoffe es kann mir jemand weiterhelfen.
Ich habe eine Matlab GUI mit 2 Funktionen.

Die erste Funktion öffnet eine Excel Liste uns speichert diese unter dem "filename"

Code:

xl = actxserver('Excel.Application');
xl.Visible = 1;
xl.DisplayAlerts = 0;

wb = xl.workbooks.Open(filename);
% ...
wb.SaveAs(newfilename);
 


Die Excel Liste mit dem Namen "newfilename" ist somit beschrieben und soll am besten geöffnet bleiben.

Mit der zweiten Funktion möchte ich diese bereits geöffnete Liste weiterbearbeiten. Jedoch schaffe ich es nicht aus Matlab heraus, die bereits geöffnete Liste auszuwählen.

Bisher schließe ich die Liste und öffne diese mit der zweiten Funktion neu.

Kann mir jemand weiterhelfen?

Vielen Dank schonmal
Private Nachricht senden Benutzer-Profile anzeigen


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.08.2014, 14:32     Titel:
  Antworten mit Zitat      
Hallo,

letztlich musst du wohl dafür sorgen, dass die 2. Funktion auf wb Zugriff hat? Dazu siehe
http://www.mathworks.de/de/help/mat.....data-among-callbacks.html

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Felix_123
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 16.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.08.2014, 08:19     Titel:
  Antworten mit Zitat      
Danke Harald,

ich hab nun mit
Code:

setappdata(handles.fgr,'excel',xl);
setappdata(handles.fgr,'workbook',wb);
 


xl und wb in meine zweite Funktion gebracht

Code:

old_xl = getappdata(handles.fgr,'excel);
old_wb = getappdata(handles.fgr,'workbook)
 


Wenn ich nun old_wb anwednen will mit beispielsweise
Code:

dann funktioniert das nicht. Es kommt nur der Fehler 'Undefined variable "old_wb" or class "old_wb.Save".'

Kann mir da jemand weiterhelfen?

Danke
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 24.08.2014, 09:45     Titel:
  Antworten mit Zitat      
Hallo,

was wird als Datentyp von wb angezeigt, wenn du den Debugger verwendest?
Ein komplett reproduzierbares Beispiel könnte helfen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Felix_123
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 16.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 03.09.2014, 09:40     Titel:
  Antworten mit Zitat      
Hallo Harald,

sorry für die späte Antwort.

also ich habe ein GUI.m in dem die GUI geöffnet wird mit 2 Buttons
Jeder dieser Buttons hat eine Callback Funktion, die jeweils wieder in Funktion1.m und Funktion2.m definiert sind.

Code:

% ... Figure öffnen mit 2 buttons
handles.button_1 = uicontrol(...)
handles.button_2 = uicontrol(...)

set(handles.button_1,'CallBack',{@Funktion1,handles});
set(handles.button_2,'CallBack',{@Funktion2,handles});



 


Mit Funktion1.m öffne ich eine Excel Vorlage, beschreibe diese mit Daten und speicher diese (die Liste bleibt geöffnet)

Code:

function Funtion1 (~,~,handles)

xl = actxserver('Excel.Application');
xl.Visible = 1;
Vorlage = 'C\...\Excel_Vorlage.xlsx'; % unbeschriebene Vorlage-ExcelListe
wb = xl.workbooks.Open('Vorlage')
neues_excel_file = 'C\...\Liste_1.xlsx'; % die Liste die von beiden Funktionen beschrieben werden soll

wb.SaveAs(neues_excel_file);

xl.ActiveWorkBook.Sheets.Item(1).Activate;
Select(Range(xl,'A1'));
set(xl.selection,'Value','Test1');

wb.Save

save('info.mat','neues_excel_file','xl','wb'); % Damit speicher ich den Namen der Excel liste und die Variablen für die Funktion 2

end
 




In Funktion 2 möchte ich nun die geöffnete Excelliste aufrufen und

Code:

function Funktion2 (~,~,handles)

load('info.mat')

% und dann kann ich nicht mehr darauf zugreifen

%% meine Workaround-Lösung: Excel Liste mit dem Namen 'neues_excel_file' erneut öffnen analog zu Funktion1

end
 


Wenn mir jemand einen Vorschlag machen könnte, wie ich in Funktion2 die bereits offene ExcelListe direkt wieder ansprechen und weiterbeschreiben kann würde mir das extrem weiterhelfen
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.499
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 03.09.2014, 09:49     Titel:
  Antworten mit Zitat      
Hallo,

bitte auf die Frage eingehen.
Zitat:
was wird [in der zweiten Funktion] als Datentyp von wb angezeigt, wenn du den Debugger verwendest?


Mit "komplett reproduzierbar" meine ich an sich kein "..." usw., sondern eine Datei, die man direkt verwenden kann. Das macht es deutlich einfacher.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Felix_123
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 8
Anmeldedatum: 16.11.13
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 05.09.2014, 14:47     Titel:
  Antworten mit Zitat      
Hallo Harald,

Datentyp von wb in der zweiten Funktion: 1x1 handle.

Im folgenden ein Funktionierendes Beispiel:
die ExcelListe 'Vorlage' muss noch erstellt werden
Und die Pfade des Vorlage-files sowie der in Funktion1 gespeicherten Excelliste müssen in Funktion 1 noch angepasst werden

Code:

function GUI
clc
close all
clear

fh =  figure;

handles.button_1 = uicontrol('Style','Pushbutton','String','FUNKTION1','Position',[50, 20, 150, 40]);
handles.button_2 = uicontrol('Style','Pushbutton','String','FUNKTION2','Position',[50, 120, 150, 40]);

set(handles.button_1,'CallBack',{@Funktion1,handles});
set(handles.button_2,'CallBack',{@Funktion2,handles});


end
 


Code:

function Funktion1 (~,~,handles)

xl = actxserver('Excel.Application');
xl.Visible = 1;

Vorlage = 'C:\Users\...\Dokumente\Vorlage'; % unbeschriebene Vorlage-ExcelListe
wb = xl.workbooks.Open(Vorlage);
neues_excel_file = 'C:\Users\...\Dokumente\Liste_1.xlsx'; % die Liste die von beiden Funktionen beschrieben werden soll

wb.SaveAs(neues_excel_file);

xl.ActiveWorkBook.Sheets.Item(1).Activate;
Select(Range(xl,'A1'));
set(xl.selection,'Value','Test1');

wb.Save

save('info.mat','neues_excel_file','xl','wb'); % Damit speicher ich den Namen der Excel liste und die Variablen für die Funktion 2

end
 


Code:

function Funktion2 (~,~,handles)
%%
load('info.mat') % neues_excel_file = Name der Datei

% und dann kann ich nicht mehr darauf zugreifen

%% meine Workaround-Lösung: Excel Liste mit dem Namen 'neues_excel_file' erneut öffnen analog zu Funktion1

xl2 = actxserver('Excel.Application');
xl2.Visible = 1;

wb2 = xl2.workbooks.Open(neues_excel_file);



xl2.ActiveWorkBook.Sheets.Item(1).Activate;
Select(Range(xl2,'A2'));
set(xl2.selection,'Value','Test2');

wb2.Save


end
 



Ich hoffe das hilft weiter
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

Du kannst Beiträge in dieses Forum schreiben.
Du kannst auf Beiträge in diesem Forum antworten.
Du kannst deine Beiträge in diesem Forum nicht bearbeiten.
Du kannst deine Beiträge in diesem Forum nicht löschen.
Du kannst an Umfragen in diesem Forum nicht mitmachen.
Du kannst Dateien in diesem Forum posten
Du kannst Dateien in diesem Forum herunterladen
.





 Impressum  | Nutzungsbedingungen  | Datenschutz | FAQ | goMatlab RSS Button RSS

Hosted by:


Copyright © 2007 - 2025 goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks

MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.