我有一个excel文件目录,我需要将其作为数组读入Matlab,转置数组然后导出回excel文件。 excel文件数组是32626 x 153所以我认为我不能先输出到excel文件。我想输出到*.txt
或*.csv
文件,然后在excel中打开它。我写的当前代码是尝试写入*.csv
文件
我需要输出文件的名称以包含输入文件名称的一部分。例如,输入文件名为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正在摄取正确的信息。 编辑: 下面的代码用于为每个输入文件输出文件,并在输出文件名
中包含输入文件名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可以打开的列数的两倍。如何将转换列的前半部分解析为表1,将转换列的后半部分解析为同一个excel工作簿的表2?我认为这意味着我现在必须使用xlswrite()
而不是csvwrite()
。
编辑:excel的列太多,无法读取文件。因此,我必须将数据解析为一个工作表中的两个单独的工作表。 第一个xlswrite需要占用前16,384列(所有153行)并将值放在excel表1中,从A1开始。 第二个xlswrite需要将列号16,385带到最后一列(所有153行)并将值放在excel表2中,从A1开始。 我该怎么做?
答案 0 :(得分:1)
代码写入目录中的所有文件,然后它们被覆盖的名称相同。试试这个
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
按操作系统给出的顺序读取文件可能并不总是按名称排序,即使您在文件夹中查看文件时按名称对文件进行了排序< / p>
编辑部分
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