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

Exceltabelle bearbeiten

 

Sc@r
Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2016, 13:01     Titel: Exceltabelle bearbeiten
  Antworten mit Zitat      
Hallo zusammen,

leider stehe ich gerade etwas auf dem Schlauch. Ich habe eine Excel-Tabelle wie im folgendem Beispiel:

    other
    Achim; Müllerweg 31; Frankfurt; D -545445
    Bernd; Karl-Friedhelm Str 12; Köln; D-354533
    Hans; Universitätsweg 6; Berlin; D-465364
    Hubert; Hellweg 4; München; D-345465
    Peter; ABC Str 1; London; GB- 35543



Alle Angaben stehen in der ersten Spalte der Tabelle.


Wenn ich jetzt einen Namen auswähle, werden alle Dateien in Matlab verarbeitet und später in einer anderen Zelle ausgegeben.
Wenn man other auswählt, soll ein neuer Kunde am Ende der Liste angelegt werden und diese anschließend sortiert werden.

Bisher habe ich nur eine Abfrage in der ich einen neuen Kunden für den aktuellen Durchlauf definiere.

Code:


...
        prompt_auftraggeber = 'Kundenname eingeben';
        defAns_tmp{1} = table2cell(r_file(1,1));
        defAns = defAns_tmp{1,1};
        Kundendaten = readtable('C:...KundenDB.xls');
        Kundendaten = table2cell(Kundendaten);
        [prompt_auftraggeber,stat] = listdlg('ListString',Kundendaten(:,1),'SelectionMode','single','Name','Kundenname');
        Kunde_str = Kundendaten{prompt_auftraggeber,1};

if    strcmp(Kunde_str,'other')
            prompt_auftraggeber = 'Kundenname eingeben';
            defAns_tmp{1} = table2cell(file(1,1));    %Firma
            defAns = defAns_tmp{1,1};
            prompt_auftraggeber_TMP = inputdlg(prompt_auftraggeber,'Eingabeparameter',1,defAns);
            auftraggeber_firma = prompt_auftraggeber_TMP{1,1};
            file{1,1} = {auftraggeber_firma};
           
            prompt_strasse = 'Straße eingeben';
            defAns_tmp{1} = table2cell(file(2,1));    %Straße
            defAns = defAns_tmp{1,1};
            prompt_strasse_TMP = inputdlg(prompt_strasse,'Eingabeparameter',1,defAns);
            auftraggeber_strasse = prompt_strasse_TMP{1,1};
            file{2,1} = {auftraggeber_strasse};
       
            prompt_stadt = 'Land/PLZ/Stadt eingeben';
            defAns_tmp{1} = table2cell(file(3,1));    %Land/PLZ/Stadt
            defAns = defAns_tmp{1,1};
            prompt_stadt_TMP = inputdlg(prompt_stadt,'Eingabeparameter',1,defAns);
            auftraggeber_stadt = prompt_stadt_TMP{1,1};
            file{3,1} = {auftraggeber_stadt};

...  
   end

....


Die Daten werden aber nur für den nächsten Durchlauf aufgenommen und dann verworfen.
Wie kann ich die eingetragenen Daten dauerhaft in die Liste einfügen? Also an das Ende der Liste und diese dann sortieren.

Also mein Problem ist eigentlich nur der Befehl die Daten in die letzte unbeschriftete Zeile zu schreiben.

Hoffe mir kann jemand sagen, wie ich diese Zeile finde.

Grüße Sc@r

Zuletzt bearbeitet von Sc@r am 23.05.2016, 14:27, insgesamt einmal bearbeitet
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 23.05.2016, 13:38     Titel: Re: Exceltabelle bearbeiten
  Antworten mit Zitat      
Hallo Sc@r,

Ich verstehe die Frage nicht. Geht es um Excel, ein table oder ein uitable?
Stehen wirklich alle Angaben in der ersten Spalte? Das wäre eine seltsame Tabelle.

Zitat:
Wenn ich jetzt einen Namen auswähle,

Wo wählst Du wie einen Namen aus?

Zitat:
werden alle Dateien in Matlab verarbeitet

Welche Dateien werden verarbeitet?

Zitat:
und später in einer anderen Zelle ausgegeben.

Wie kann man Dateien in einer Zelle ausgeben und was genau meinst Du mit "Zelle"? Excel, ein Cell-Array oder ein UITABLE?

Zitat:
Wenn man other auswählt, soll ein neuer Kunde am Ende der Liste angelegt werden

Welche Liste?

Zitat:
und diese anschließend sortiert werden.

Nach welchem Kriterium soll sortiert werden?

Bitte poste mehr Details und beschränke Dich dabei auf die eigentliche Frage. Alle Details, die für eine Lösung irrelevant sind, verwirren nur.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
Sc@r
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2016, 14:09     Titel:
  Antworten mit Zitat      
Es geht um Excel und das eintragen von Daten.

Alle Daten stehen in einer Spalte, da ich sonst nicht alle Angaben für einen Kunden in die listdlg bekommen habe. Einiger meiner Kunden sind nämlich doppelt mit unterschiedlichen Adressen vorhanden. Als ich alle Daten in unterschiedlichen Spalten hatte, hatte ich die listdlg nur so aufstellen können, dass er mir zuerst alle Namen (Spalte A), dann alle Strassen (Spalte B), dann alle Orte (Spalte C) und zuletzt alle PLZ (Spalte D) ausgegeben hat.

Also zum Beispiel:
Hans
Hans
Universitätsweg 6
Nordring 5
Berlin
Köln
...


Aus diesem Grund habe ich alles in einer Spalte gelassen und dann die einzelnen Elemente wie Name, Strasse, Ort und PLZ in Matlab über die regexp(...) Funktion aufgesplittet. Die aufgesplitteten Elemente sind dann in

file{1,1} = {auftraggeber_firma}; --> Hans
file{2,1} = {auftraggeber_strasse}; --> Universitätsweg 6
file{3,1} = {auftraggeber_stadt}; --> D-465364 Berlin

hinterlegt.


Ich lade also die unten angehängte Excel-Tabelle mit den angegebenen Daten in Matlab ein:

    other
    Achim; Müllerweg 31; Frankfurt; D -545445
    Bernd; Karl-Friedhelm Str 12; Köln; D-354533
    Hans; Universitätsweg 6; Berlin; D-465364
    Hubert; Hellweg 4; München; D-345465
    Peter; ABC Str 1; London; GB- 35543


Das sind meine Kunden. Alle Werte stehen in Spalte A.
Diese Tabelle wird in deiner listdlg dargestellt, in der ich einen der Kunden auswählen kann.


Der ausgewählte Kunde wird dann aufgeteilt/verarbeitet und die einzelnen Bestandteile in verschiedene Zellen geschrieben.


Auswahl: Hans; Universitätsweg 6; Berlin; D-465364

file{1,1} = {auftraggeber_firma}; --> Hans
file{2,1} = {auftraggeber_strasse}; --> Universitätsweg 6
file{3,1} = {auftraggeber_stadt}; --> D-465364 Berlin

Wenn man einen neuen Kunden anlegen möchte, wählt man other aus. Über inputdlg trägt man dann alle gewünschten Daten ein.

Mein neuer Kunde heißt dann zum Beispiel

Franz
Himmelsweg 5
D- 345564 Bonn

die Eingaben sind dann vorerst in

file{1,1} = {auftraggeber_firma}; --> Franz
file{2,1} = {auftraggeber_strasse}; --> Himmelsweg 5
file{3,1} = {auftraggeber_stadt}; --> D- 345564 Bonn

hinterlegt.
In meinem Programm ist der neue Kunde dann aber nur für den aktuellen Durchlauf vorhanden.

Ich würde den neuen Kunden nun gerne in die Excel-Tabelle der Kunden einfügen.
Sprich:

    other
    Achim; Müllerweg 31; Frankfurt; D -545445
    Bernd; Karl-Friedhelm Str 12; Köln; D-354533
    Franz; Himmelsweg 5; Berlin; D-465364
    Hans; Universitätsweg 6; Berlin; D-465364
    Hubert; Hellweg 4; München; D-345465
    Peter; ABC Str 1; London; GB- 35543


Der neue Kunde Franz wird also zuerst in die letzte unbeschriftete Zeile geschrieben und dann wird die Excel-Tabelle ab der zweiten Zeile nach other alphabetisch neu sortiert. Wenn man nun das Programm neu ausführt bekommt man also direkt die listdlg:

    other
    Achim; Müllerweg 31; Frankfurt; D -545445
    Bernd; Karl-Friedhelm Str 12; Köln; D-354533
    Franz; Himmelsweg 5; Berlin; D-465364
    Hans; Universitätsweg 6; Berlin; D-465364
    Hubert; Hellweg 4; München; D-345465
    Peter; ABC Str 1; London; GB- 35543


Wenn man nun erneut other auswählt erweitert man die Excel-Tabelle erneut um einen Kunden.

Beispiel:

Martin
Schulweg 51
D- 89854 Lünen

Diesen schreibt man dann erneut in die Excel-Tabelle die dann wie folgt aussehen soll:

    other
    Achim; Müllerweg 31; Frankfurt; D -545445
    Bernd; Karl-Friedhelm Str 12; Köln; D-354533
    Franz; Himmelsweg 5; Berlin; D-465364
    Hans; Universitätsweg 6; Berlin; D-465364
    Hubert; Hellweg 4; München; D-345465
    Martin; Schulweg 51; Lünen; D- 89854
    Peter; ABC Str 1; London; GB- 35543



Mein Problem ist es also den neuen Kunden in die bestehende Excel einzufügen.
Ich brauche Hilfe bei der Erstellung einer variablen Abfrage, bei der alle Einträge/neue Kunden immer an das Ende der Tabelle geschrieben und dann sortiert werden.
Meine Kundendatenbank wird also mit jedem neuen Eintrag größer und so muss der neue Kunde immer weiter unten in der Excel-Tabelle angelegt werden.

Grüße Sc@r

Test1.xls
 Beschreibung:
Hier die Tabelle die eingelesen wird und dann um einen neuen Kunden erweitert werden soll

Download
 Dateiname:  Test1.xls
 Dateigröße:  35.5 KB
 Heruntergeladen:  267 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.501
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 23.05.2016, 22:42     Titel:
  Antworten mit Zitat      
Hallo,

ich hatte dir ja auf die PN geschrieben:

Zitat:
Hier dürfte es am einfachsten sein, die Excel-Datei mit readtable einzulesen, den Eintrag in den Table anzufügen, sortrows anzuwenden, und dann mit writetable die Excel-Tabelle wieder rauszuschreiben.

Hast du das versucht? Welche Probleme sind dabei aufgetreten?

Versuch das Problem doch mal separat von der GUI zu sehen. Die Romane um das an sich recht überschaubare Problem herum lenken eher ab als dass sie zur Lösung beitragen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sc@r
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2016, 10:22     Titel:
  Antworten mit Zitat      
So blöd es klingt, aber ich bekomme es gerade nicht hin die eingegebenen Daten an das Ende der Tabelle anzufügen Embarassed


bekomme immer nur Hinweise wie:
-All variables must have the same number of rows.
-S must be a scalar structure, or a structure Array with one column or one row.

...

Ich habe den angegebene Workspace:
Name , Value

Kundendaten, 9x1 table
neuerKunde, 'Hans;Müllerweg 5;Köln;D-165'

Wie schaffe ich es neuerKunde in Kundendaten einzutragen, dass ich eine 10x1 Tabelle erhalte?
Das Sortieren müsste ich hinbekommen. Nur bei der Anbindung an die Tabelle habe ich meine Probleme. Das ist wahrscheinlich nur ein kleiner Befehl, aber diesen sehe ich gerade einfach nicht Confused

Grüße Sc@r
Private Nachricht senden Benutzer-Profile anzeigen
 
Sc@r
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2016, 10:37     Titel:
  Antworten mit Zitat      
ahhhhhh....
Ich glaube ich habe es. Ich probiere es gerade indem ich mit den Zellen und der cat Funktion arbeite. Ich teile euch gleich mein Ergebnis mit Wink

Grüße Sc@r
Private Nachricht senden Benutzer-Profile anzeigen
 
Sc@r
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 5
Anmeldedatum: 23.05.16
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 24.05.2016, 11:44     Titel:
  Antworten mit Zitat      
Es funktioniert alles. Wink

Habe jetzt alle Angaben des neuen Kunden in einen cellstr gepackt,
die Arrays dann über die cat Funktion verbunden,
mit sortrows sortiert,
über array2table zu einer Tabelle gemacht
und anschließend über writetable die Tabelle als .xls ausgegeben Smile


schwere Geburt aber es geht.

Danke für eure Hilfe Wink

Grüße Sc@r
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.