How to export several xlsx files in Matlab
    10 views (last 30 days)
  
       Show older comments
    
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
      
 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
Answers (1)
  Prince Kumar
    
 on 29 Mar 2022
        Hi,
Please refer to the following answers, these might help :
- https://www.mathworks.com/matlabcentral/answers/344767-exporting-multiple-excel-files
- https://www.mathworks.com/matlabcentral/answers/434479-trying-to-get-matlab-to-export-multiple-files-on-to-different-sheets
Hope this helps!!
1 Comment
  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.
See Also
Categories
				Find more on Variables 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!

