How to export several xlsx files in Matlab

5 views (last 30 days)
Tatjana Mü
Tatjana Mü on 22 Feb 2022
Commented: Ive J on 29 Mar 2022
Hi @ all,
I am struggling with my last part of the script- the export of the data. My script import several csv files, then i do some calculation and in the end I want to export this csv files with the same filename as a xlsx file. But I can't find a way to export more than one file. Maybe somebody of you has an idea. I added my test file to import.
My code (most of it is for calculation):
directory_name=uigetdir('','Ordner mit Messungen auswählen'); %Öffnet die Ordnerauswahl am PC
[nur_file_name,pfad]=uigetfile({'*.csv','csv-files (*.csv)';'*.*','all Files'},'Die csv-Files der Proben oeffnen (probe_001.csv=',[directory_name '/'], 'Multiselect', 'on'); %uigetfile öffnet die DateienAuswahl bei der mehrere ausgewählt werden können
nur_file_name=cellstr(nur_file_name); %cellstr konvertiert die Zellen in cell arrays. In diesem array entspricht das erste Element dem letzten eingelesenen File. Deshalb muss nun sortiert werden
nur_file_name=sort(nur_file_name);
filename=strcat(pfad,nur_file_name); %Strcat speichert strings horizontal
anzahl_files=size(filename,2); %Anzahl der eingelesenen files
for xy=1:anzahl_files
[fid_in,m]=fopen(char(filename(xy)),'r'); %Filenames werden aus Matrix gelesen
if fid_in==-1 %zeige Fehlermeldung, danach nochmal probieren
error ('Datei nicht gefunden!',m)
end
%--------------------------Import data------------------------------------
clear element_RL
clear intens_RL
Tabelle_element_RL=importfileSPE(filename{xy},[1,Inf]); %liest Elementnamen ein
element_RL=Tabelle_element_RL{1,:};
[anzahl_zeile,anzahl_elemente]=size(element_RL); %gibt Grösse von element_RL wieder
clearvars Tabelle_element_RL
Tabelle_intens_RL=importfileSPI(filename{xy},[2,Inf]); %liest Intensitäten ein
intens_RL=Tabelle_intens_RL{:,:};
[anzahl_runs,anzahl_elemente]=size(intens_RL);
clearvars Tabelle_intens_RL
%---------------Mittelwert und Standardabweichung berechnen----------------
for k=1:anzahl_elemente
Background(k)=mean(intens_RL(:,k)); %Berechnet den Mittelwert der Spalten
Sigma(k)=std(intens_RL(:,k)); %Berechnet die Standardabweichung der Spalten
end
%-----------------------Ausreisser-Definition------------------------------
SP_limit=Background+(4*Sigma); %Hier legen wir das Limit der Ausreisser fest, Faktor vor Sigma kann verändert werden
%-----------------Ausreisser suchen und ersetzen (1/0)---------------------
is_SP = intens_RL > SP_limit;
intens_RL(is_SP)=1; %ersetzt Ausreisser durch 1
intens_RL(~is_SP)=0; %ersetzt alle anderen Werte durch 0
%------------Ausreisser (1) suchen und ersetzen (Elementname)--------------
intens_RL_str=string(intens_RL);
for n=1:anzahl_elemente %ersetzt die Ausreisser durch Elementnamen
intens_RL_str(intens_RL_str(:,n)=="1",n)=element_RL(:,n);
end
%-------------------Nullen löschen und mit x ersetzen----------------------
r = intens_RL_str=="0"; %ersetzt die Null durch x
intens_RL_str(r)="x";
intens_RL_str=regexprep(intens_RL_str,'\[',''); %die Befehle sollen die Klammer und das plus entfernen
intens_RL_str=regexprep(intens_RL_str,'\]','');
intens_RL_str=regexprep(intens_RL_str,'\+','');
intens_RL_str=sortrows(intens_RL_str,'ascend'); %sortiert die Werte absteigend
intens_RL_str(:,all(intens_RL_str == "x"))=[]; %löscht Spalten mit nur 0
intens_RL_str=intens_RL_str.'; %Transponiert, damit Spalten gelöscht werden mit nur Nullen
intens_RL_str(:,all(intens_RL_str == "x"))=[];
intens_RL_str=intens_RL_str.';
intens_RL_final=sort(intens_RL_str,2);
intens_RL_final(:,all(intens_RL_final == "x"))=[];
%-----------------------Export of the data------------------------------
for p=1:anzahl_files
[nur_file_name_out]=uiputfile('*xlsx','Single Particles save as',nur_file_name(:,p))
  1 Comment
Ive J
Ive J on 22 Feb 2022
I cannot follow your script, but based on what you explained, it seems to me you have a problem like this:
csvfiles = ["file1.csv", "file2.csv"]; % a set of csv files to be read into MATLAB
for i = 1:numel(csvfiles)
thisfile = readtable(csvfiles(i)); % read each file into matlab in form of table
% do whatever on thisfile
% write it to an Excel file
writetable(thisfile, replace(csvfiles(i), ".csv", ".xslx"))
end

Sign in to comment.

Answers (1)

Prince Kumar
Prince Kumar on 29 Mar 2022
  1 Comment
Ive J
Ive J on 29 Mar 2022
xlswrite is deprecated.
xlswrite is not recommended. Use writetable, writematrix, or writecell instead. For more information, see Compatibility Considerations.

Sign in to comment.

Categories

Find more on MATLAB Report Generator in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!