Matlab输出数组为excel或具有特定名称的其他文件格式
我有一个Excel文件的目录,我需要作为一个数组读取到Matlab,转置数组,然后导出回到Excel文件。 Excel文件数组是32626×153,所以我不认为我可以输出到一个Excel文件。 我正在考虑输出到*.txt
或*.csv
文件,然后在Excel中打开它。 我写的当前代码试图写入一个*.csv
文件
我需要输出文件的名称来包含部分input文件的名称。 例如,input文件名是data.xlsx
,我需要将ouyput文件的名称设置为data_transposed.csv
。
以下是我已经写入的代码来读取目录中的*.xlsx
文件,并将数据保存到数组,然后转置数组,然后将转置数组写入*.csv
文件。
files = dir('*.xlsx'); for i = 1:length(files) filename = files(i).name; [path, name, extention] = fileparts(filename); array = xlsread(filename); transposearray = transpose(array); csvwrite('outputfile.csv' , transposearray) end
这个代码有几个问题:
- 输出文件的名字是
'outputfile'
而不是'inputfilename_transpose'
一部分,因为我需要它。 (见上面的解释) - 输出文件的名字是
'outputfile'
而不是'inputfilename_transpose'
一部分,因为我需要它。 (请参阅上面的解释)此代码仅将目录中的第一个*.xlsx
文件写入输出文件。 我知道循环遍历目录中的所有*.xlsx
文件,因为当我从其他所有行中取出分号并将csvwrite
行注释掉时,Matlab正在摄取正确的信息。
编辑:下面的代码工作输出每个input文件的文件,以及输出文件名称中包括input文件的名称
files = dir('*.xlsx'); for i = 1:length(files) filename = files(i).name; [path, name, extention] = fileparts(filename); array = xlsread(filename); transposearray = transpose(array); csvwrite(['outputfile',name,'.csv'] , transposearray) end
Excel仍然不会读取输出文件,因为它具有Excel可以打开的列数的两倍。 我怎样才能把前半部分的转置列parsing为表1,将后半部分的转换后的列parsing成同一个excel工作簿的表2? 我假设这意味着我现在必须使用xlswrite()
而不是csvwrite()
。
编辑:有太多的Excel列读取文件。 因此,我必须在一个工作表中将数据parsing成两张单独的表格。 第一个xlswrite需要第一个16,384列(所有153行),并将值从A1开始放在Excel Sheet 1中。 第二个xlswrite需要将列号16,385添加到最后一列(所有153行),并将值放在Excel表格2中从A1开始。 我该怎么做呢?
该代码写入目录中的所有文件都具有相同的名称,它们将被覆盖。 尝试这个
files = dir('*.xlsx'); for i = 1:length(files) filename = files(i).name; [path, name, extention] = fileparts(filename); array = xlsread(filename); transposearray = transpose(array); csvwrite([path,'\',name,'_transpose','.csv'] , transposearray) end
请注意, dir
按操作系统提供的顺序读取文件,即使您在文件夹中查看文件时按名称对文件进行sorting,该文件也可能不总是按名称sorting
编辑部分
files = dir('*.xlsx'); for i = 1:length(files) filename = files(i).name; [path, name, extention] = fileparts(filename); array = xlsread(filename); transposearray = transpose(array); n = ceil(size(transposearray,2)/2); transportarray_part1 = transposearray(:,1:n); transposearray _part2 = transposearray(:,n+1:end); xlswrite([path,'\',name,'_transpose','.csv'], transposearray_part1,1); xlswrite([path,'\',name,'_transpose','.csv'], transposearray_part2,2); end