Matlab输出数组为excel或具有特定名称的其他文件格式

时间:2014-06-20 14:28:50

标签: arrays excel matlab csv

我有一个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

此代码存在一些问题:

  1. 输出文件名是'outputfile',而不是'inputfilename_transpose'的一部分,因为我需要它。 (见上面的解释)
  2. 输出文件名是'outputfile',而不是'inputfilename_transpose'的一部分,因为我需要它。 (见上面的解释) 此代码仅将目录中的第一个*.xlsx文件写入输出文件。我知道循环正在迭代目录中的所有*.xlsx文件,因为当我从所有其他行中取出分号并注释掉csvwrite行时,Matlab正在摄取正确的信息。
  3. 编辑: 下面的代码用于为每个输入文件输出文件,并在输出文件名

    中包含输入文件名
    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开始。 我该怎么做?

1 个答案:

答案 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