鱼C论坛

 找回密码
 立即注册
查看: 84|回复: 5

[已解决]matlab

[复制链接]
发表于 2024-4-11 23:54:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
文件夹内有多个excel文件,第五列是年份,前三列是时间,次数,量级,将每个excel相同年份的前三列数据求和并输出到excel到一个文件夹内
最佳答案
2024-4-11 23:58:26
12345678zltsy 发表于 2024-04-11 23:58
>> MK
错误: 文件: MK.m 行: 21 列: 25
文本字符无 ...


这个错误通常是由于剪贴板中的文本字符格式不正确导致的。在 MATLAB 中,粘贴文本时,要确保没有非法字符或特殊字符。您可以尝试将代码手动输入,而不是从其他地方粘贴。此外,还需要确认代码中没有使用非 ASCII 字符,并确保代码中所有的引号和其他特殊字符都是标准的 ASCII 字符。请仔细检查代码中字符的格式和内容,并确保它们没有错误或特殊符号。如果问题仍然存在,请提供更多信息,以便我们更好地帮助您解决问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2024-4-11 23:54:35 | 显示全部楼层
首先,您需要使用MATLAB中的函数来读取和处理Excel文件。您可以使用`xlsread`函数来读取Excel文件中的数据。然后,您可以使用循环遍历每个文件,并将相同年份的数据求和。

以下是一个基本的代码示例,展示了如何实现您的需求:

  1. % 定义文件夹路径和输出文件夹路径
  2. folderPath = '文件夹路径';
  3. outputFolderPath = '输出文件夹路径';

  4. % 获取文件夹中的所有Excel文件名
  5. fileList = dir(fullfile(folderPath, '*.xlsx')); % 假设为.xlsx文件,如为.xls文件,请修改为*.xls

  6. % 初始化一个结构体用于存储每个年份的总和
  7. yearlySum = struct();

  8. % 遍历每个Excel文件
  9. for i = 1:length(fileList)
  10.     % 读取第五列和前三列的数据
  11.     [~, ~, rawData] = xlsread(fullfile(folderPath, fileList(i).name));
  12.     years = cell2mat(rawData(2:end, 5)); % 第五列为年份
  13.     data = cell2mat(rawData(2:end, 2:4)); % 前三列为时间,次数,量级
  14.    
  15.     % 按年份求和
  16.     uniqueYears = unique(years);
  17.     for j = 1:length(uniqueYears)
  18.         yearIndex = years == uniqueYears(j);
  19.         yearlySum.(sprintf('sum_%d', uniqueYears(j))) = sum(data(yearIndex, :));
  20.     end
  21. end

  22. % 创建输出文件夹(如果不存在)
  23. if ~exist(outputFolderPath, 'dir')
  24.     mkdir(outputFolderPath);
  25. end

  26. % 将每个年份的总和写入单独的Excel文件
  27. outputFileName = fullfile(outputFolderPath, 'sum_output.xlsx');
  28. for k = 1:length(uniqueYears)
  29.     year = uniqueYears(k);
  30.     worksheetName = sprintf('sum_%d', year);
  31.     xlswrite(outputFileName, yearlySum.(worksheetName), worksheetName);
  32. end
复制代码


请注意,此代码假设文件夹中只包含Excel文件,并且文件名以".xlsx"结尾。如果文件名不同或者文件格式不同,请相应地修改代码。

此外,您需要将`文件夹路径`和`输出文件夹路径`替换为您实际的文件夹路径。

希望这能帮助到您!祝您编程愉快!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-11 23:56:57 | 显示全部楼层
FishC 发表于 2024-4-11 23:54
首先,您需要使用MATLAB中的函数来读取和处理Excel文件。您可以使用`xlsread`函数来读取Excel文件中的数据 ...

警告: 计算侦听器回调时出错。
> 位置:openExcelWorkbook (第 27 行)
位置: xlsreadCOM (第 13 行)
位置: xlsread (第 256 行)
位置: MK (第 14 行)
错误使用 xlsread
无法激活 Excel 工作表。

出错 MK (第 14 行)
    [~, ~, rawData] = xlsread(fullfile(folderPath, fileList(i).name));
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-11 23:57:14 | 显示全部楼层
12345678zltsy 发表于 2024-04-11 23:56
警告: 计算侦听器回调时出错。
> 位置:openExcelWo ...


这个错误通常是由于您的计算机上没有安装 Microsoft Excel 或者没有正确设置 Excel 的 COM 服务器引起的。这会导致 MATLAB 无法与 Excel 直接通信,进而导致 `xlsread` 函数出错。

解决此问题的一种方法是通过修改 `xlsread` 函数的调用方式来使用基于 Java 的替代方案。您可以使用 `readtable` 函数来读取 Excel 文件并将数据存储到表格中,然后对表格进行处理。以下是修改后的代码示例:

  1. folderPath = '文件夹路径';
  2. outputFolderPath = '输出文件夹路径';

  3. fileList = dir(fullfile(folderPath, '*.xlsx'));
  4. yearlySum = struct();

  5. if ~exist(outputFolderPath, 'dir')
  6.     mkdir(outputFolderPath);
  7. end

  8. for i = 1:length(fileList)
  9.     filePath = fullfile(folderPath, fileList(i).name);
  10.    
  11.     try
  12.         % 使用 readtable 函数读取 Excel 文件中的数据
  13.         rawData = readtable(filePath);
  14.         
  15.         % 获取年份列和前三列数据
  16.         years = rawData.年份;
  17.         data = [rawData.时间, rawData.次数, rawData.量级];
  18.         
  19.         uniqueYears = unique(years);
  20.         for j = 1:length(uniqueYears)
  21.             yearIndex = years == uniqueYears(j);
  22.             yearlySum.(sprintf('sum_%d', uniqueYears(j))) = sum(data(yearIndex, :));
  23.         end
  24.     catch
  25.         fprintf('无法读取文件:%s\n', fileList(i).name);
  26.     end
  27. end

  28. outputFileName = fullfile(outputFolderPath, 'sum_output.xlsx');

  29. for k = 1:length(uniqueYears)
  30.     year = uniqueYears(k);
  31.     worksheetName = sprintf('sum_%d', year);
  32.     % 将每个年份的总和写入单独的 Excel 工作表
  33.     writetable(struct2table(yearlySum.(worksheetName)), outputFileName, 'Sheet', worksheetName);
  34. end
复制代码


请确保已将文件夹路径和输出文件夹路径替换为实际路径,并确保 Excel 文件在指定的文件夹中存在。由于我们采用了不同的读取方法,在处理不支持的文件或出现其他错误时,代码会打印相应的错误消息而不会中断整个程序的执行。

如果您仍然遇到问题,我建议您检查 MATLAB 和 Excel 的兼容性以及 COM 服务器的设置。另外,您也可以尝试重新安装 MATLAB 或 Excel,以确保软件完全安装且正常工作。希望这可以帮助您解决问题!

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-4-11 23:58:14 | 显示全部楼层
FishC 发表于 2024-4-11 23:57
这个错误通常是由于您的计算机上没有安装 Microsoft Excel 或者没有正确设置 Excel 的 COM 服务器引起 ...

>> MK
错误: 文件: MK.m 行: 21 列: 25
文本字符无效。请检查不受支持的符号、不可见的字符或非 ASCII 字符的粘贴。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2024-4-11 23:58:26 | 显示全部楼层    本楼为最佳答案   
12345678zltsy 发表于 2024-04-11 23:58
>> MK
错误: 文件: MK.m 行: 21 列: 25
文本字符无 ...


这个错误通常是由于剪贴板中的文本字符格式不正确导致的。在 MATLAB 中,粘贴文本时,要确保没有非法字符或特殊字符。您可以尝试将代码手动输入,而不是从其他地方粘贴。此外,还需要确认代码中没有使用非 ASCII 字符,并确保代码中所有的引号和其他特殊字符都是标准的 ASCII 字符。请仔细检查代码中字符的格式和内容,并确保它们没有错误或特殊符号。如果问题仍然存在,请提供更多信息,以便我们更好地帮助您解决问题。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-2 04:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表