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

Bearbeiten von Excel Dateien

 

Maxx_BMT
Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 12.06.2014, 17:51     Titel: Bearbeiten von Excel Dateien
  Antworten mit Zitat      
Hallo liebes Forum,

ich habe eine Frage zu Excel Dateien. Ich verfolge gerade ein Uniprojekt bei dem Messwerttabellen im Excelformat aufgenommen werden. Die Verarbeitung der Daten ist mir bereits gelungen, allerdings stehe ich jetzt vor einem neuen Problem.

Die Dateien sollen nach der Visualisierung noch archiviert werden, dafür wollte ich ebenfalls Matlab nutzen. Genauer gesagt möchte ich mit Matlab den Dateinamen ändern nach einem bestimmten Schema. Das heißt ich möchte von Matlab nach den Eingaben gefragt werden.

Z.B:

Soll der Dateiname geändert werden? Antwort: Nein
Dann soll das Programm beendet werden.

Soll der Dateiname geändert werden? Antwort: Ja
Dann soll beispielhaft folgende Abfragroutine laufen.
(Schön wäre es ebenfalls wenn die folgenden Informationen im Header der Tabelle gespeichert werden)

Welche Hunderasse wurde untersucht? Antwort: Schäferhund
Wie alt war der Hund? Antwort: 8
War der Hund männlich oder Weiblich? Antwort: weiblich

Dann soll der Dateiname lauten: Schäferhund_8_weiblich

Unter diesem Dateinamen soll die Messwerttabelle dann abgespeichert werden.

Ich hoffe ich konnte mein Problem gut darstellen und würde mich über Hilfe dabei sehr freuen.

Liebe Grüße Maxx_BMT
Private Nachricht senden Benutzer-Profile anzeigen


markuman
Forum-Guru

Forum-Guru


Beiträge: 320
Anmeldedatum: 14.12.12
Wohnort: ---
Version: 2013a/2013b, Octave 3.6.4, 3.7.7
     Beitrag Verfasst am: 12.06.2014, 20:02     Titel:
  Antworten mit Zitat      
Code:

change_file=input('Soll der Dateiname geändert werden? ','s');

if strcmp(change_file, 'Ja')
    dog=input('Welche Hunderasse wurde untersucht? ','s');
    age=input('Wie alt war der Hund? ','s');
    gender=input('War der Hund männlich oder Weiblich? ','s');
    newfilename=[dog '_' age '_' gender '.xlsx'];
    xlswrite(newfilename, deineMatrix)
end
 


Zum debuggen einfach das Semikolon am Ende entfernen.
_________________

DIY OR DIE Cool

entropie=char(floor(94*rand(1, round(100.*rand)) + 32))
https://github.com/markuman
Private Nachricht senden Benutzer-Profile anzeigen
 
Maxx_BMT
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 15.06.2014, 20:14     Titel:
  Antworten mit Zitat      
Hallo,

vielen vielen Dank markuman, das ist echt genial!!

Ein schönes Wochenende noch!
Private Nachricht senden Benutzer-Profile anzeigen
 
Maxx_BMT
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 18.06.2014, 17:01     Titel:
  Antworten mit Zitat      
Hallo,

ich hatte bereits gefragt wie es funktioniert den Dateinamen zu ändern, das hat alles wunderbar geklappt. Jetzt wollte ich noch diesen Dateinamen als Header in die Tabelle einfügen und wollte es folgendermaßen lösen:


Code:
change_file = input('Soll der Dateiname geändert werden? j/n ','s');

if strcmp(change_file, 'j')
     dog = input('Welche Hunderasse wurde untersucht? ','s');
     age = input('Wie alt war der Hund? ','s');
     gender = input('War der Hund männlich oder Weiblich? ','s');
     newfilename = [dog '_' age '_' gender '.xlsx'];
     header = [dog '_' age '_' gender];
     xlswrite(newfilename, [header; data]);
end



Leider kommt dann folgende Fehlermedlung:

Zitat:
??? Error using ==> vertcat
CAT arguments dimensions are not consistent.

Error in ==> Beisskraft at 23
xlswrite(newfilename, [header; data]);



Leider weiß ich nicht wirklich wie ich das ändern kann bzw. wo der Fehler herkommt ich hoffe hier kann mir jemand helfen.

Eine weitere Frage schließe ich noch an:

Wenn ich die umgewandelte Datei auswähle mit folgendem Code:

Code:

[xlsfile,path2xls] = uigetfile('*.xlsx','Bitte Datei auswählen');
[x] = xlsread(fullfile(path2xls,xlsfile));  


Gibt er mir die Tabelle als leere ungefüllte Tabelle aus, obwohl da Daten darinstehen.

Ich würde hier mal meinen kompletten Code posten evtl. Habe ich irgendwo einen grundlegenden Fehler gemacht bei der ganzen Sache, da ich momentan nicht mehr richtig weiterkomme. Ein weiteres Problem besteht auch bei den Kanälen a,b,c,d da ich in meiner Tabelle einen Header habe, den ich natürlich nicht mitlesen will und erst ab Zeile 4 in Spalte 2 bis zu Ende lesen möchte z.B. in kanal a. Die dazugehörige Messwerttabelle habe ich angehängt.

Code:
clear all; clc; close all;

%% *.txt Datei in *.xls umwandeln

Messwerte = uigetfile('*.txt','Bitte Datei auswählen');
Messwerte = fopen (Messwerte);
data = textscan(Messwerte, repmat('%s', 1, 5),'delimiter', '\t') ;
data = [data{:}];
 
xlswrite('change.xlsx', data);


%% Dateinamen ändern

change_file = input('Soll der Dateiname geändert werden? j/n ','s');

if strcmp(change_file, 'j')
     dog = input('Welche Hunderasse wurde untersucht? ','s');
     age = input('Wie alt war der Hund? ','s');
     gender = input('War der Hund männlich oder Weiblich? ','s');
     newfilename = [dog '_' age '_' gender '.xlsx'];
     header = [dog '_' age '_' gender];
     xlswrite(newfilename, [header; data]);
end


%% Auswahl der *.xls Datei  

[xlsfile,path2xls] = uigetfile('*.xlsx','Bitte Datei auswählen');
[x] = xlsread(fullfile(path2xls,xlsfile));  

[~,fa] = xlsread(xlsfile,'Tabelle1','B4');
fa = str2double (fa);

N = length (x);
t = (0:(N-1))/fa;

[~,scale] = xlsread(xlsfile,'Tabelle1','B5');
scale = str2double (scale);

a = x(1:end, 2)*scale;
b = x(1:end, 3)*scale;
c = x(1:end, 4)*scale;
d = x(1:end, 5)*scale;


%% Plotten der Kanäle

figure(1)

% Kanal 1
subplot(2,2,1);
plot(t,a);
grid on;
title ('Kanal 1');
xlabel('Zeit in Sekunden');
ylabel ('Kraft in Newton');

%Kanal 2
subplot(2,2,2);
plot(t,b);
grid on;
title ('Kanal 2');
xlabel('Zeit in Sekunden');
ylabel ('Kraft in Newton');

%Kanal 3
subplot(2,2,3);
plot(t,c);
grid on;
title ('Kanal 3');
xlabel('Zeit in Sekunden');
ylabel ('Kraft in Newton');

%Kanal 4
subplot(2,2,4);
plot (t,d);
grid on;
title ('Kanal 4');
xlabel('Zeit in Sekunden');
ylabel ('Kraft in Newton');


%% Aufsummieren und Auswertung
s = a+b+c+d;

figure(2);
plot(t,s);
title ('Summation der Kanäle');
xlabel('Zeit in Sekunden');
ylabel ('Kraft in Newton');
 


Ich hoffe mir kann jemand helfen, momentan bin ich etwas entgeistert, da es nicht vorwärts und auch nicht rückwärts geht!

Vielen dank schon mal!!

Liebe Grüße,

Maxx_BMT

Messwerte.xls
 Beschreibung:

Download
 Dateiname:  Messwerte.xls
 Dateigröße:  1.3 MB
 Heruntergeladen:  773 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.06.2014, 17:07     Titel:
  Antworten mit Zitat      
Hallo,


Zitat:
Leider weiß ich nicht wirklich wie ich das ändern kann bzw. wo der Fehler herkommt ich hoffe hier kann mir jemand helfen.

header und data passen nicht zusammen. Um dir helfen zu können müssten wir wissen, was data ist.

Zitat:
Gibt er mir die Tabelle als leere ungefüllte Tabelle aus, obwohl da Daten darinstehen.

Dasselbe Problem wie in deinem anderen Beitrag.
http://www.gomatlab.de/wert-aus-excel-zelle-auslesen-t33859.html
Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Maxx_BMT
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 18.06.2014, 18:13     Titel:
  Antworten mit Zitat      
Hallo,

ah das hat mir schon sehr weitergeholfen, es war etwas viel Matlab in letzter Zeit, da sieht man nicht mehr alles von alleine Wink

Also data sind die Dateien die ich aus einer *.txt bekomme und dann in die Tabelle schreibe. Da sind sowohl Text als auch Zahlen dabei z.B. Informationen zum Messverstärker und eben auch die Messwerte, das ist data und das wird dann in die Tabelle Change.xlsx geschrieben.

Und über diese ganzen Inforamtionen wollte ich gerne noch einen Header setzen. Dieser soll genau wie der Dateiname aus den vorherigen Fragen bestehen.

Desweiteren sollen dann die Daten geplottet werden, da möchte ich aber nur die Messwerte wählen (Kanäle a,b,c,d im Code). Deshalb will ich beim wählen der Länge der Tabelle und der Messwerte den Header ignorieren.

Vielen Dank im Voraus.

Grüße,
Maxx_BMT
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.06.2014, 20:23     Titel:
  Antworten mit Zitat      
Hallo,

data hat 5 Spalten, header nicht. Somit passt das in dieser Form nicht in eine Matrix.

Ansonsten sehe ich z.Z. keine konkrete Frage, bei der ich helfen könnte.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 18.06.2014, 23:09     Titel:
  Antworten mit Zitat      
Hallo,

bald hab ich es Smile

Ich brauch nur noch den Befehl wie ich aus der eingelesenen Tabelle ab einer bestimmten Zelle anfange.

Code:
%% Auswahl der *.xls Datei  

[xlsfile,path2xls] = uigetfile('*.xlsx','Bitte Datei auswählen');
[~,x] = xlsread(fullfile(path2xls,xlsfile));  

[~,fa] = xlsread(xlsfile,'Tabelle1','B4');
fa = str2double (fa);

N = length (x)-7;
t = (0:(N-1))/fa;

[~,scale] = xlsread(xlsfile,'Tabelle1','B5');
scale = str2double (scale);

a = x(7:end, 2)*scale;
b = x(7:end, 3)*scale;
c = x(7:end, 4)*scale;
d = x(7:end, 5)*scale;


bei a = möchte ich in der .xls Datei in Zeile 7 Spalte B anfanegn zu lesen und dann die komplette Spalte bis zum Ende.

Vielen Dank im Voraus.

Grüße,
Maxx_BMT
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.06.2014, 00:18     Titel:
  Antworten mit Zitat      
Hallo,

und was klappt an diesem Code nun nicht wie gewünscht?

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 19.06.2014, 00:33     Titel:
  Antworten mit Zitat      
Hallo,

Dank erstmal für die Antwort habe das Problem lösen können.

Doch jetzt ist noch ein anderes Problem aufgetaucht. Matlab kann mit Kommazahlen nicht umgehen. Aus der *.txt Datei habe ich Kommazahlen in eine *.xlsx Datei geschrieben.

Meine Fragen sind jetzt:

-Sollte ich das in der txt Datei ändern ? (Problem ist dann wenn ich es mit der Funktion comma2point ändere, dann schreibt er in meine neue *.xlsx Tabelle völlig andere Potenzen und nicht diese, die in dem Originalfile stehen)

-Oder kann ich die Kommas durch Punkte in der *.xlsx Datei ändern?

Das ist im nachfolgenden Code zu sehen:

Code:
%% *.txt Datei in *.xls umwandeln

change_format = input ('Soll das Dateiformat geändert werden? j/n: ','s');

if strcmp (change_format, 'j');
     
    Messwerte = uigetfile('*.txt','Bitte Datei auswählen');
    Messwerte = fopen (Messwerte);
    data = textscan(Messwerte, repmat('%s', 1, 5),'delimiter', '\t') ;
    data = [data{:}];
 
    xlswrite('change.xlsx', data);

% Dateinamen ändern

    change_file = input('Soll der Dateiname geändert werden? j/n: ','s');

    if strcmp(change_file, 'j')
        dog = input('Welche Hunderasse wurde untersucht? ','s');
        age = input('Wie alt war der Hund? ','s');
        gender = input('War der Hund männlich oder Weiblich? ','s');
        newfilename = [dog '_' age '_' gender '.xlsx'];
        xlswrite(newfilename, data);
        delete ('change.xlsx')
    end
end

%% Auswahl der *.xls Datei  

[xlsfile,path2xls] = uigetfile('*.xlsx','Bitte Datei auswählen');
[~,x] = xlsread(fullfile(path2xls,xlsfile));  

[~,fa] = xlsread(xlsfile,'Tabelle1','B4');
fa = str2double (fa);

N = length (x)-6;
t = (0:(N-1))/fa;

[~,scale] = xlsread(xlsfile,'Tabelle1','B5');
scale = str2double (scale);

a = x(7:end, 2);
b = x(7:end, 3);
c = x(7:end, 4);
d = x(7:end, 5);


Vielen Dank im Voraus

Grüße,
Maxx_BMT

16_06_14-16_20_22.txt
 Beschreibung:

Download
 Dateiname:  16_06_14-16_20_22.txt
 Dateigröße:  839.53 KB
 Heruntergeladen:  757 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


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

ich würde die Kommata nach dem Einlesen verarbeiten. Also in jeder Zelle von data (cellfun)
1. Komma durch Punkte ersetzen und dann
2. schauen, ob sich das mit str2double in eine sinnvolle Zahl umwandeln lässt.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 19.06.2014, 10:09     Titel:
  Antworten mit Zitat      
Hallo,

um das Problem noch etwas besser darzustellen. Nach dem Einlesen der Textdatei hab ich folgende angehängte *.xls Datei.
Hier sieht man, das viele Messwerte sehr klein sind mit dem Exponent -5 angeziegt werden und diese will ich auch dahin überführen, aber weder Excel noch Matlab machen es richtig und überführen die Zahlen mit der völlig falschen Zehnerpotenz.

Wie kann ich das lösen ? Ich bin etwas Ideenlos! Vielleicht ist mein Ansatz im vorigen Post schon falsch und jemand kann mir hier helfen. Die daten schreibe ich aus der *.txt Datei aus dem vorigen Post in eine Excel-Tabelle, das Eregbnis ist dann die hier angehängte Datei. Dabei entstehen die angesprochenen Probleme.

Vielen dank im Voraus.

Grüße,
Maxx_BMT

test2_tes2_test2.xls
 Beschreibung:

Download
 Dateiname:  test2_tes2_test2.xls
 Dateigröße:  1.3 MB
 Heruntergeladen:  708 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Maxx_BMT
Themenstarter

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 19.06.2014, 10:22     Titel:
  Antworten mit Zitat      
Hallo,

danke Harald.

Code:
   Messwerte = uigetfile('*.txt','Bitte Datei auswählen');
    Messwerte = fopen (Messwerte);
    data = textscan(Messwerte, repmat('%s', 1, 5),'delimiter', '\t') ;
    data = [data{:}];
    [data] = cellfun (data, 'delimiter', ',','.');


Leider muss ich zugeben, das mir kein bisschen klar ist wie ich
Code:
zum ändern von Kommas in Punkte verwende. Der obige Code ist eher ein verzweifelter Versuch und aus der doc werd ich auch nicht so wirklich schlau. Vielleicht könntest du mir dabei helfen?

Vielen Dank!

Grüße,
Maxx_BMT
Private Nachricht senden Benutzer-Profile anzeigen
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 19.06.2014, 10:31     Titel:
  Antworten mit Zitat      
Hallo,

bitte lies dir die Doku zu cellfun mal wirklich sorgfältig durch und schau dir die Beispiele an. Das hier ist z.B. hilfreich
Code:
days = {'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday'};
abbrev = cellfun(@(x) x(1:3), days, 'UniformOutput', false)


Als Funktion wirst du in deinem Fall etwas brauchen, das Komma durch Punkt ersetzt --> strrep.

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

Forum-Fortgeschrittener

Forum-Fortgeschrittener



Beiträge: 75
Anmeldedatum: 09.10.13
Wohnort: Ilmenau
Version: R2011a, R2016a
     Beitrag Verfasst am: 19.06.2014, 10:55     Titel:
  Antworten mit Zitat      
Hallo,

ja das hab ich ich denke ich bin auf dem richtigen weg, hoffe ich zumindest Wink

Code:
   Messwerte = uigetfile('*.txt','Bitte Datei auswählen');
    Messwerte = fopen (Messwerte);
    data = textscan(Messwerte, repmat('%s', 1, 5),'delimiter', '\t') ;
    data = [data{:}];  
    data2 = cellfun (@(x) x(strrep(data, ',', '.')),data);


Das ist bisher mein erster Ansatz ich hoffe ich bin auf dem richtigen Weg, aber dabei kommt folgende Fehlermeldung:

Zitat:
??? Error using ==> subsindex
Function 'subsindex' is not defined for values of class 'cell'.


Wo ist da mein Denkfehler ? Ich Versuche es grade an das Beipiel mit den Tagen anzupassen.

Vielen Dank.

Grüße,
Max_BMT
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen

Gehe zu Seite 1, 2  Weiter

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