【发布时间】:2014-06-20 23:47:19
【问题描述】:
我有一个 excel 文件目录,我需要将其作为数组读入 Matlab,转置数组,然后导出回 excel 文件。 excel文件数组是32626 x 153,所以我认为我不能先输出到excel文件。我正在考虑输出到 *.txt 或 *.csv 文件,然后在 excel 中打开它。我写的当前代码正在尝试写入*.csv 文件
我需要输出文件的名称来包含输入文件名称的一部分。比如输入文件名是data.xlsx,我需要输出文件名是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 行)并将值放在从 A1 开始的 Excel 工作表 1 中。 第二个 xlswrite 需要将列号 16,385 带到最后一列(所有 153 行),并将值从 A1 开始放在 Excel 工作表 2 中。 我该怎么做?
【问题讨论】:
-
关于您的编辑:您需要分解要导出的数组。将整个数组导出到两个单独的工作表不会比一张工作表上的完整数组更好。您不必在 excel 中指定要导出到的单元格范围,指定您的数据范围和工作表。如果不指定范围,则默认从 A1 开始。阅读the documentation。