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 Datei einlesen

 

SebF.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2012, 15:45     Titel: Excel Datei einlesen
  Antworten mit Zitat      
Hallo Leute!

Ich möchte eine Exceldatei einlesen, bei der:
- ich die Ausmaße nicht kenne
- ich nicht weiß, welche Spalten Zahlen und welche Strings enthalten
- die dritte Zeile aber der 2.Spalte die Bezeichner der Spalten enthält

Das Ziel ist es, ein Struct zu erhalten, das:
- "für jede" Zeile der Exceltabelle ein Element hat
- "jede" Spalte der Exceltabelle soll ein Feld für jedes Element werden
- die Fieldnames aus der dritten Zeile bekommt.

Beispiel:
Excel-Datei:

-------- header -----------------
---- unw. Zeile ------------------
ID - X - Y - Z
1 - 2 - 'hi' - 3
2 - 4 - 'oh' - 4

=>
Struct(1).X = 2
Struct(1).Y = {'hi'}
Struct(1).Z = 3
Struct(2).X = 4
Struct(2).Y = {'oh'}
Struct(2).Z = 4


Das ganze soll dynamisch passieren, u.a. kommen die Fieldnames aus Zeile 3!!

Mein bisheriger Code:
Code:

function  WP = testing()

%%read in the data from the file specified by the user:
[FileName,PathName] = uigetfile('*.xlsx','Select excel file to load the data from');

if(~strcmp(num2str(FileName),'0') && ~strcmp(num2str(PathName),0))
    %% read in data
    [~,~,raw] = xlsread(strcat(PathName,FileName),'sheet');
    paramNames = raw(3,2:end);   %hier kriegen wir die Namen der Fields!
    data = cutData(raw); %die ersten drei Zeilen und die Identifierspalte werden weggeschnitten
   
   
     if(~isempty(data))     %the excel sheet was not empty
     %transform data into the desired struct
     WP =  struct(paramNames{1}, data(:,1));    
    % wie füge ich Fields hinzu, ohne vorher den Namen zu kennen und zu wissen wie viele?  
  else                  
         WP = [];
     end
end
end


Die Frage steht eigentlich schon im Code. Wie kriege ich unter diesen Voraussetzungen mein Struct WP am besten effizient gebaut, ohne die Fieldnames direkt zu kennen und ohne zu wissen wie viele Fields es geben wird (bzw. das steht erst in der Excelfile)? Wie füge ich fields hinzu?

Ich hoffe das Szenario ist verstädnlich Smile

Seb


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 13.02.2012, 17:00     Titel: Re: Excel Datei einlesen
  Antworten mit Zitat      
Hallo SebF,

Ich nehme ann CELL2STRUCT wird weiter helfen. Eine Schleife mit "dynamic fieldnames" wäre wohl auch möglich.
Code:
F = {'A', 'B'};
D = {1, rand(4)};
for i = 1:2
  WP.(F{i}) = D{i};
end

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
SebF.

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 13.02.2012, 18:25     Titel:
  Antworten mit Zitat      
Hallo Jan,

cell2struct hat perfekt funktioniert - danke! Smile

Seb
 
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.