MATLAB中如何将循环内fprintf输出的结果导出至Excel?
把MATLAB输出导出到Excel的两种实用方法
嘿,我来帮你搞定这个问题!其实不用纠结是用xlswrite还是fopen——两种方法都能实现,不过我更推荐先把数据整理成结构化格式再导出,比直接捕获fprintf的输出要高效得多。下面给你具体的解决方案:
方法一:用writetable(MATLAB官方推荐)
这是最简单的方式,适合处理表格类数据。你可以先把名字、分数和结果整合成一个表格,然后直接写入Excel:
names = ["Carlos",'Sara','Sinead','Kai','Ali','Chen','Julia','Tom']; marks = [23,45,67,90,45,61,14,84]; result = strings(size(marks)); % 初始化结果数组 % 先计算所有结果 for i = 1:length(marks) if marks(i) < 39 result(i) = "Fail"; elseif marks(i) < 69 result(i) = "Pass"; else result(i) = "Distinction"; end end % 创建表格并写入Excel T = table(names', marks', result', 'VariableNames', {'Names', 'Marks', 'Result'}); writetable(T, 'student_results.xlsx');
运行后会生成一个名为student_results.xlsx的文件,里面的格式和你fprintf输出的完全一致,表头自动设置好。
方法二:用fopen写CSV文件(兼容性强)
如果你不想依赖MATLAB的Excel写入工具,或者需要一个更小、更通用的文件格式,可以直接写CSV文件(Excel完全支持打开CSV):
names = ["Carlos",'Sara','Sinead','Kai','Ali','Chen','Julia','Tom']; marks = [23,45,67,90,45,61,14,84]; % 打开CSV文件准备写入 fid = fopen('student_results.csv', 'w'); if fid == -1 error('无法创建文件,请检查路径权限'); end % 写入表头 fprintf(fid, 'Names,Marks,Result\n'); % 循环写入每一行数据 for i = 1:length(marks) if marks(i) < 39 res = "Fail"; elseif marks(i) < 69 res = "Pass"; else res = "Distinction"; end fprintf(fid, '%s,%d,%s\n', names(i), marks(i), res); end % 关闭文件 fclose(fid);
这个方法生成的CSV文件可以直接用Excel打开,而且不需要MATLAB有Excel的COM支持,跨平台性更好。
关于xlswrite的说明
xlswrite其实也能实现,但MATLAB的新版本已经不推荐使用它了,官方建议用writetable、writematrix等替代函数。如果你一定要用xlswrite,可以这样写:
names = ["Carlos",'Sara','Sinead','Kai','Ali','Chen','Julia','Tom']; marks = [23,45,67,90,45,61,14,84]; result = strings(size(marks)); for i = 1:length(marks) if marks(i) < 39 result(i) = "Fail"; elseif marks(i) < 69 result(i) = "Pass"; else result(i) = "Distinction"; end end % 整理成单元格数组 data = [names' num2cell(marks) result']; % 写入表头和数据 xlswrite('student_results.xlsx', {'Names', 'Marks', 'Result'}, 1, 'A1'); xlswrite('student_results.xlsx', data, 1, 'A2');
不过还是优先推荐writetable,代码更简洁,维护性更好。
内容的提问来源于stack exchange,提问作者juhyun jung
相关产品推荐
相关产品推荐

