鱼C论坛

 找回密码
 立即注册
查看: 425|回复: 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文件中的数据。然后,您可以使用循环遍历每个文件,并将相同年份的数据求和。

以下是一个基本的代码示例,展示了如何实现您的需求:
% 定义文件夹路径和输出文件夹路径
folderPath = '文件夹路径';
outputFolderPath = '输出文件夹路径';

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

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

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

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

% 将每个年份的总和写入单独的Excel文件
outputFileName = fullfile(outputFolderPath, 'sum_output.xlsx');
for k = 1:length(uniqueYears)
    year = uniqueYears(k);
    worksheetName = sprintf('sum_%d', year);
    xlswrite(outputFileName, yearlySum.(worksheetName), worksheetName);
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 文件并将数据存储到表格中,然后对表格进行处理。以下是修改后的代码示例:
folderPath = '文件夹路径';
outputFolderPath = '输出文件夹路径';

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

if ~exist(outputFolderPath, 'dir')
    mkdir(outputFolderPath);
end

for i = 1:length(fileList)
    filePath = fullfile(folderPath, fileList(i).name);
    
    try
        % 使用 readtable 函数读取 Excel 文件中的数据
        rawData = readtable(filePath);
        
        % 获取年份列和前三列数据
        years = rawData.年份;
        data = [rawData.时间, rawData.次数, rawData.量级];
        
        uniqueYears = unique(years);
        for j = 1:length(uniqueYears)
            yearIndex = years == uniqueYears(j);
            yearlySum.(sprintf('sum_%d', uniqueYears(j))) = sum(data(yearIndex, :));
        end
    catch
        fprintf('无法读取文件:%s\n', fileList(i).name);
    end
end

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

for k = 1:length(uniqueYears)
    year = uniqueYears(k);
    worksheetName = sprintf('sum_%d', year);
    % 将每个年份的总和写入单独的 Excel 工作表
    writetable(struct2table(yearlySum.(worksheetName)), outputFileName, 'Sheet', worksheetName);
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-12-27 22:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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