【问题标题】:Looping in Matlab to batch process Excel files在 Matlab 中循环以批处理 Excel 文件
【发布时间】:2016-11-10 01:19:22
【问题描述】:

我知道如何读取多个 Excel 文件,但我很难对所有这些文件进行相同的分析。分析需要我平均不同列中的一些值,然后将这些平均值打印到单独的 Excel 表中。我可以用一个 Excel 文件做到这一点,但无法弄清楚如何在输出 Excel 文件的不同行中打印每个平均值。这是我为一个文件工作的代码(读取它,在第 4 列中取平均值,然后打印到一个单独的 Excel 文件):

 data = xlsread('test_1.xlsx');
 average_values_1 = data(:,4);
 a = [average_values_1];
 data_cells = num2cell(a);
 column_header ={'Average Value 1'};
 row_header(1,1) ={'File 1'}
 output = [{' '} column_header; row_header data_cells];
 xlswrite('Test Averages.xls', output);

在将输出文件中每个文件的值打印为自己的表时,我该如何一遍又一遍地执行此操作?我怀疑嵌套循环在我的未来。

提前致谢。

【问题讨论】:

  • 对于循环中的大数 k,使用 xlswrite 的时间效率非常低,因为 xlswrite 必须调用 matlab VBA 服务器、打开 excel,然后关闭 excel 文件会产生很大程度的开销.也许考虑将整个平均值列表存储到矩阵/向量中,并在 1 步中将它们全部写入。
  • 感谢您的建议。我最终会在大量 Excel 文件中使用它,所以我会考虑到这一点。

标签: excel matlab


【解决方案1】:

这是您可能想要对 xlswrite[‍1] 做什么的工作示例:

filename = 'testdata.xlsx';  % Filename to save average values in
for k = 1:10                 % Looping for 10 iterations
    sheet = 2;               % Selecting sheet2
    Avg = randi([1 10],1,1); % Generating a random average each time the loop is run
    xlRange = char(64+k);    % 65 is the ASCII value of A
    xlswrite(filename,Avg,sheet,xlRange); % Writing the excel file
end

此代码给出以下输出 [‍2]


图 1:数值保存在单行 excel 文件中

如果您想在单列中获取输出,请改用 xlRange = ['A',num2str(k)];。它会给你以下输出 [‍2]


图 2:数值保存在 excel 文件的单列中


[‍1]:请阅读xlswrite 的文档了解更多详情。
[‍2]:输出值可能会有所不同,因为生成的是随机整数。

【讨论】:

  • 这很有用。为了进一步补充我的问题,我如何指定在循环的第一次迭代中,我希望将值存储在第一行,然后第二行用于第二次迭代,依此类推?我认为这与您的回答相结合将帮助我解决我的问题。
  • @Mickey 例如,如果您想在每次迭代中保存 4 个数字,逐行将 xlRange 更改为:xlRange = ['A',num2str(k),':', 'D',num2str(k)];
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-21
  • 2023-03-23
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多