将excel文件合并成一个步骤
3视图(30天)
显示旧的评论
Ancalagon8
2022年10月19日
我想运行下面的代码,在每个文件夹中我有一个excel文件(data.xls)我想比较10 excel文件到1。谁能帮我吗?
路径=”医生:“;
S = dir (fullfile(路径,‘*’,“data.xls”))
为k = 1:元素个数(S)
F = fullfile ((k) .folder年代(k) . name);
data = readtable (F);
d = datetime (strcat (table2array((数据(:1))),{' '},table2array((数据(:,2)))));
加速度= table2array((数据(:,3)));
xlswrite (“file.xls”、数据)
结束
1评论
马修•诺伊
2022年10月19日
你好
你必须解释你想要提取的数据,结合并保存。
暂时你做事在for循环中甚至没有保存输出excel文件(r眼下拯救你只是从输入文件加载)
所以你必须解释你的逻辑和可能分享一些输入文件如果我们想要测试的代码
愿一切都好!
接受的答案
马修•诺伊
2022年10月19日
编辑:马修•诺伊
2022年11月9日
所以我relicated相同的文件夹树和文件名称相同(在每个文件夹)
这是一个稍微修改过的代码,试一试:
路径=“2019 D: \”;
S = dir (fullfile(路径,‘*’,“data.xls”))
为k = 1:元素个数(S)
F = fullfile ((k) .folder年代(k) . name);
data = readtable (F);
d = strcat (table2array((数据(:1))),{' '},table2array((数据(:,2))));
= (d数据(:,3)];%日期/时间/加速度
= renamevars (,“Var1”,“日期和时间”);
writetable (,“file.xls”,“表”,k)
结束
46个评论
马修•诺伊
2022年10月19日
我有R2020b
也许你的matlab版本还没有包含这个函数
如果你的评论/删除
= renamevars (,
“Var1”
,
“日期和时间”
);
你只得到一个excel文件,默认第一列的名字是“Var1”,而不是“
日期和时间”
它很重要吗?
马修•诺伊
2022年10月21日
编辑:马修•诺伊
2022年11月9日
没有problemo
给你:
路径=“2019 D: \”;
S = dir (fullfile(路径,‘*’,“data.xls”))
= [];
为k = 1:元素个数(S)
F = fullfile ((k) .folder年代(k) . name);
data = readtable (F);
d = strcat (table2array((数据(:1))),{' '},table2array((数据(:,2))));
tmp = [d数据(:,3)];%日期/时间/加速度
= (,tmp);%垂直连接
% = renamevars (“Var1”,“日期和时间”);
结束
writetable (,“file.xls”)
马修•诺伊
2022年10月24日
编辑:马修•诺伊
2022年11月9日
你好,再一次
你的第一个评论,我也使用
fullfile
确保输出excel文件位于正确的目录
你的第二个要求见下面的代码(包括上面的修改)
如果你想让一个通用的代码,主要部分应该成为一个函数,然后根据多少你会循环输入文件必须为一个excel处理输出文件
路径=“2019 D: \”;
S = dir (fullfile(路径,‘*’,“data.xls”));
% % 1:出口前五(01-01-2019到05-01-2019)
n = 5;
= [];
filename_out =“file1.xls”;
为k = 1: n
F = fullfile ((k) .folder年代(k) . name);
data = readtable (F);
d = strcat (table2array(数据(:1)){' '},table2array(数据(:,2)));
tmp = [d数据(:,3)];%日期/时间/加速度
= (,tmp);%垂直连接
% = renamevars (“Var1”,“日期和时间”);
结束
writetable (, fullfile(路径,filename_out));
% %出口2:其他(06-01-2019到10-01-2019)
= [];
filename_out =“file2.xls”;
为k = n + 1:元素个数(S)
F = fullfile ((k) .folder年代(k) . name);
data = readtable (F);
d = strcat (table2array(数据(:1)){' '},table2array(数据(:,2)));
tmp = [d数据(:,3)];%日期/时间/加速度
= (,tmp);%垂直连接
% = renamevars (“Var1”,“日期和时间”);
结束
writetable (, fullfile(路径,filename_out));
马修•诺伊
2022年10月24日
编辑:马修•诺伊
2022年11月9日
简单地改变启动/停止在for循环指数:
k = 3:7 ....见下文
路径=“2019 D: \”;
S = dir (fullfile(路径,‘*’,“data.xls”));
% %导出文件夹3 - 7所示
= [];
filename_out =“file3to7.xls”;
为k = 3:7%导出文件夹3 - 7所示
F = fullfile ((k) .folder年代(k) . name);
data = readtable (F);
d = strcat (table2array(数据(:1)){' '},table2array(数据(:,2)));
tmp = [d数据(:,3)];%日期/时间/加速度
= (,tmp);%垂直连接
% = renamevars (“Var1”,“日期和时间”);
结束
writetable (, fullfile(路径,filename_out));
马修•诺伊
2022年10月25日
编辑:马修•诺伊
2022年11月9日
你好
excel文件附加在你以前的评论不是日常数据据我已经明白你的问题
对我来说,你的“041 a0259日常文件。xls”文件,这就是我再次使用建议您更好和更verstaile代码
现在您可以很容易地用参数表示:
- 文件夹你想要(第一个和最后一个文件夹数量用于输出excel文件的名字,所以你不需要每次都手动重命名)
- 你想要哪些列的数据(我们也可以把第一/最后一列值在输出excel文件名称如果这对你来说是有趣的)
我还注意到那些不需要两行代码,我们可以删除它们在不改变任何输出数据结构
d = strcat (table2array(数据(:1)){' '},table2array(数据(:,2)));
tmp = [d数据(:,3)];%日期/时间/加速度
这是我的最新版本,看看!
路径=“2019 D: \”;
S = dir (fullfile(路径,‘*’,“data.xls”));
% %导出文件夹下面的定义
% folders_to_export = (1:3);%案例1
folders_to_export = (3:7);%例2
% %选择列(索引)
% columns_to_keep = (1:3);%案例1:只有前三列:日期/时间/加速度
columns_to_keep = (1:13);%例2:只有前13列
% columns_to_keep =(一37);%案例3:所有列
% %主循环
= [];
filename_out = [“file_folders”num2str (folders_to_export (1))”到“num2str (folders_to_export(结束)“xls”];%的excel输出名称包含所选的文件夹
为ci = 1:元素个数(folders_to_export)%根据值向量导出文件夹“folders_to_export”
k = folders_to_export (ci)
F = fullfile ((k) .folder年代(k) . name);
data = readtable (F);
=(;数据(:,columns_to_keep)];%垂直连接
结束
writetable (, fullfile(路径,filename_out));
马修•诺伊
2022年10月25日
你也可以选择这样的列(第四选项):我一直4列:1,2,3,15 th列的数据文件
% %选择列(索引)
% columns_to_keep = (1:3);%案例1:只有前三列:日期/时间/加速度
% columns_to_keep = (1:13);%例2:只有前13列
% columns_to_keep =(一37);%案例3:所有列
columns_to_keep = 15 (1 2 3);%例4:选择特定列
Ancalagon8
2022年11月4日
如果我有365个文件夹和想要合并成月度文件。在这种情况下
folders_to_export =一句子);% 1月
然后
folders_to_export = (32:59);% 2月
但是如果一些日常的文件夹不见了呢?我可以改变folders_to_export变量扫描月文件名吗?(例如:01-01-2019,02-01-2019 ....31-01-2019扫描1 01和分配,01-02-2019,02-02-2019 ....28-02-2019扫描2月02和分配,无论文件夹的总数)
马修•诺伊
2022年11月4日
编辑:马修•诺伊
2022年11月9日
试试这个,我希望它工作正常在你身边
路径=“2019 D: \”;%你
S = dir (fullfile(路径,‘*’,“data.xls”));
% %月导出文件夹
folders_to_export =元素个数(年代);%例“月”
% %选择列(索引)
% columns_to_keep = (1:3);%案例1:只有前三列:日期/时间/加速度
% columns_to_keep = (1:13);%例2:只有前13列
% columns_to_keep =(一37);%案例3:所有列
columns_to_keep = 15 (1 2 3);%例4:选择特定列
% %主循环
month_number_old = 1;
= [];
为ci = 1: folders_to_export%根据值向量导出文件夹“folders_to_export”
folder_name = S (ci) .folder;
file_name = S (ci) . name;
%检测月
month_number = extractBetween (folder_name,“- - -”,“- - -”);
month_number = str2num (month_number {:});
% month_name = datestr (datetime (1 month_number 1),“嗯”);
如果month_number > month_number_old%我们切换到下个月
% 1 /保存前一个月的数据
month_number_old month_name = datestr (datetime (1, 1),“嗯”);
filename_out = [month_name“xls”];%的excel输出名称包含所选的文件夹
writetable (, fullfile(路径,filename_out));
% 2 /启动一个新的数据concat(1日迭代)
month_number_old = month_number;%更新month_number_old
F = fullfile (folder_name file_name);
data = readtable (F);
=(数据(:,columns_to_keep)];%垂直连接
其他的%我们还在同一个月保持concat数据
F = fullfile (folder_name file_name);
data = readtable (F);
=(;数据(:,columns_to_keep)];%垂直连接
结束
%如果我们已经到了最后迭代(最后一个文件夹)
%保存数据(最后一个案子不是覆盖的if / else循环
%以上)
如果ci = = folders_to_export
month_number month_name = datestr (datetime (1, 1),“嗯”);
filename_out = [month_name“xls”];%的excel输出名称包含所选的文件夹
writetable (, fullfile(路径,filename_out));
结束
结束
Ancalagon8
2022年11月6日
没问题谢谢!我有两个问题。我有来自不同传感器的数据,如果我想要每月文件名创建如sensor1_January、sensor1_February……sensor1_December,然后
filename_out = [month_name“xls”];
应该是改性对吧?
我也注意到,在最初的日常文件、一些空白柱和南进口。这可以避免和进口的空白吗?
Ancalagon8
2022年11月7日
@Mathieu诺
谢谢你的回答。与南你是对的,在excel创建空白是不错的!
数据文件不包含传感器参考,所以我试着
filename_out = [“Sensor1_”month_name“xls”];
但我收到错误:
filename_out = [' Sensor1_ ' month_name xls”);
↑
错误:无效的表达式。检查丢失的乘法操作符,缺失或不平衡的分隔符,或其他语法错误。构造矩阵,用括号代替括号。
马修•诺伊
2022年11月7日
编辑:马修•诺伊
2022年11月9日
NB你有两行代码中,我们使用
filename_out
以避免任何错误当你改变传感器名称/数量相比,我更喜欢把一个特定的行一开始这两线同时被修改
传感器=“Sensor1_”
使代码更健壮
路径=“2019 D: \”;%你
S = dir (fullfile(路径,‘*’,“data.xls”));
% %月导出文件夹
folders_to_export =元素个数(年代);%例“月”
% %选择列(索引)
% columns_to_keep = (1:3);%案例1:只有前三列:日期/时间/加速度
% columns_to_keep = (1:13);%例2:只有前13列
% columns_to_keep =(一37);%案例3:所有列
columns_to_keep = 15 (1 2 3);%例4:选择特定列
% %主循环
传感器=“Sensor1_”
month_number_old = 1;
= [];
为ci = 1: folders_to_export%根据值向量导出文件夹“folders_to_export”
folder_name = S (ci) .folder;
file_name = S (ci) . name;
%检测月
month_number = extractBetween (folder_name,“- - -”,“- - -”);
month_number = str2num (month_number {:});
如果month_number > month_number_old%我们切换到下个月
% 1 /保存前一个月的数据
month_number_old month_name = datestr (datetime (1, 1),“嗯”);
month_name filename_out =[传感器“xls”];%的excel输出名称包含所选的文件夹
writetable (, fullfile(路径,filename_out));
% 2 /启动一个新的数据concat(1日迭代)
month_number_old = month_number;%更新month_number_old
F = fullfile (folder_name file_name);
data = readtable (F);
=(数据(:,columns_to_keep)];%垂直连接
其他的%我们还在同一个月保持concat数据
F = fullfile (folder_name file_name);
data = readtable (F);
=(;数据(:,columns_to_keep)];%垂直连接
结束
%如果我们已经到了最后迭代(最后一个文件夹)
%保存数据(最后一个案子不是覆盖的if / else循环
%以上)
如果ci = = folders_to_export
month_number month_name = datestr (datetime (1, 1),“嗯”);
month_name filename_out =[传感器“xls”];
writetable (, fullfile(路径,filename_out));
结束
结束
Ancalagon8
2022年11月7日
编辑:Ancalagon8
2022年11月9日
好的没问题。最后一个误解是,我试着用以下代码连接垂直这12个月创建excel文件,但按字母顺序连接完成。怎么定义从1月开始。xls,然后2月。xls等等?
马修•诺伊
2022年11月7日
试试这个
路径= pwd;
S = dir([路径“\ * . xls”]);
%创建“列表”(数字匹配月位置)
n = 0;
列表= [];
list_month = {“1月”,“2”,“3”,“4”,“可能”,“6月”,“7”,“八月”,“9”,“十月”,11月的,12月的}';
为k = 1:元素个数(S)
tmp =分裂(S (k) . name, {“_”,“。”});%这个月只保留字符串从excel文件中提取文件名(格式:“Sensor1_January.xls”)
如果包含(tmp {1},“传感器”)%只选择有效的xls文件(“传感器”的名称)
n = n + 1;
[tf, idx] = ismember (tmp {2}, list_month);%寻找与月会员名单(idx包含职位列表)
列表(n) = idx;
结束
结束
[newlist、秩序]=排序(列表);
%执行数据连接后“秩序”中列出的数字
= [];
为k = 1:元素个数(顺序)
文件名= S(订单(k)) . name%见命令窗口:现在在正确的顺序处理excel文件
F = fullfile(路径,文件名);
data = readtable (F);
=(;数据);
结束
writetable (,“all_data.xls”);
马修•诺伊
2022年11月7日
好的,我修改的代码文件没有“传感器”。在他们的名字,只是一个月的名字
路径= pwd;
S = dir([路径“\ * . xls”]);
%创建“列表”(数字匹配月位置)
n = 0;
列表= [];
list_month = {“1月”,“2”,“3”,“4”,“可能”,“6月”,“7”,“八月”,“9”,“十月”,11月的,12月的}';
为k = 1:元素个数(S)
tmp =分裂(S (k) . name, {“_”,“。”});%这个月只保留字符串从excel文件中提取文件名(格式:“Sensor1_January.xls”)
[tf, idx] = ismember (tmp {1}, list_month);%寻找与月会员名单(idx包含职位列表)
列表(k) = idx;
结束
=列表(列表> 0);%删除非有效xls文件
[newlist、秩序]=排序(列表);
%执行数据连接后“秩序”中列出的数字
= [];
为k = 1:元素个数(顺序)
文件名= S(订单(k)) . name%见命令窗口:现在在正确的顺序处理excel文件
F = fullfile(路径,文件名);
data = readtable (F);
=(;数据);
结束
writetable (,“all_data.xls”);
Ancalagon8
2022年11月7日
现在我收到错误:
错误使用writetable(第124行)
的数据块从细胞开始“A1”超过板边界的447542行(s)和0列(年代)。
也许你的大小吗
出
变量是
513077 x37表
吗?
马修•诺伊
2022年11月8日
现在我还记得,有一个excel电子表格的最大大小
旧的格式(xls)比新的更有限(xlsx):
Excel版本97 - 2003 (Windows)的XLS文件扩展名和工作表的大小是65536行和256列。
在Excel 2007和2010年默认的文件扩展名是XLSX和工作表大小是1048576行和16384列
所以改变xlsx格式当你在代码中使用writetable(大表)
马修•诺伊
2022年11月8日
也许这是更一个excel的问题——它改变当你力列"小时:分钟"格式?
progressbar是好的——为什么重新发明轮子吗?
通知你,你没有工作目录中所有的功能
我创造了我自己的目录我商店所有的功能我已经创建或下载
你只需要将它添加到matlab路径在任何地方都可以
马修•诺伊
2022年11月9日
你必须迫使细胞excel格式默认根据你想要的,可能不知道如何你想要显示的数据
的日期,我被迫yyyy-mm-dd列单元格格式。额外的时间显示(总是00:00)现在已经消失了
Ancalagon8
2023年3月1日
我是参照的版本合并每日数据:
路径=“D: \”;%你
S = dir (fullfile(路径,‘*’,“data.xls”));
% %月导出文件夹
folders_to_export =元素个数(年代);%例“月”
% %选择列(索引)
% columns_to_keep = (1:3);%案例1:只有前三列:日期/时间/加速度
% columns_to_keep = (1:13);%例2:只有前13列
% columns_to_keep =(一37);%案例3:所有列
columns_to_keep = 15 (1 2 3);%例4:选择特定列
% %主循环
传感器=“Sensor1_”
month_number_old = 1;
= [];
为ci = 1: folders_to_export%根据值向量导出文件夹“folders_to_export”
folder_name = S (ci) .folder;
file_name = S (ci) . name;
%检测月
month_number = extractBetween (folder_name,“- - -”,“- - -”);
month_number = str2num (month_number {:});
如果month_number > month_number_old%我们切换到下个月
% 1 /保存前一个月的数据
month_number_old month_name = datestr (datetime (1, 1),“嗯”);
month_name filename_out =[传感器“xls”];%的excel输出名称包含所选的文件夹
writetable (, fullfile(路径,filename_out));
% 2 /启动一个新的数据concat(1日迭代)
month_number_old = month_number;%更新month_number_old
F = fullfile (folder_name file_name);
data = readtable (F);
=(数据(:,columns_to_keep)];%垂直连接
其他的%我们还在同一个月保持concat数据
F = fullfile (folder_name file_name);
data = readtable (F);
=(;数据(:,columns_to_keep)];%垂直连接
结束
如果ci = = folders_to_export
month_number month_name = datestr (datetime (1, 1),“嗯”);
month_name filename_out =[传感器“xls”];
writetable (, fullfile(路径,filename_out));
结束
结束
在这种情况下我没有数据两个整整一个月,我收到这个错误:
错误使用writetable
不支万博1manbetx持的“双”类型。使用writematrix代替。
错误在第23行
writetable (, fullfile(路径,filename_out));
马修•诺伊
2023年3月1日
我没有问题代码的任何文件夹的数量(现在)有数据文件()
所以我想知道你是否有和我相同的文件夹结构和数据文件名称
文件夹(我的):(年-月-日)
2019-01-01 \ \
2019-01-02 \ \
2019-01-03 \ \
2019-02-01 \ \
2019-02-02 \ \
2019-11-01 \ \
每个文件夹(一天)包含一个文件,a0259.xls总是相同的名称:041
Ancalagon8
2023年3月1日
编辑:Ancalagon8
2023年3月1日
folders_to_export = 275
是的,日期格式是相同的(年-月-日),并且每个文件夹(一天)包含一个文件,总是相同的名称。
马修•诺伊
2023年3月3日
你好
我固定的问题(原始代码假设我们总是开始与1月数据)
现在我只是检查前隔个月存在可用的文件夹,开始第一个月(4月)
否则没有大的变化的主要代码
我测试了它站在我这一边,似乎工作得很好
更新后的代码:
%你
路径=“D: \”;
S = dir (fullfile(路径,‘*’,“data.xls”));
% %月导出文件夹
folders_to_export =元素个数(年代);%例“月”
% %选择列(索引)
% columns_to_keep = (1:3);%案例1:只有前三列:日期/时间/加速度
% columns_to_keep = (1:13);%例2:只有前13列
% columns_to_keep =(一37);%案例3:所有列
columns_to_keep = 15 (1 2 3);%例4:选择特定列
%得到个月列表(独特的)
folders_month_numbers = extractBetween ([S.folder],“- - -”,“- - -”);
folders_month_numbers =独特(str2double (folders_month_numbers));%独特和排序值
% %主循环
%传感器=“Sensor1_”;%这个前缀添加到输出excel文件的名字
传感器=”;%没有前缀
month_number_old = folders_month_numbers (1);%初始化第一个月数量从上面提取(folders_month_numbers)
= [];
为ci = 1: folders_to_export%根据值向量导出文件夹“folders_to_export”
folder_name = S (ci) .folder;
file_name = S (ci) . name;
%检测月
month_number = extractBetween (folder_name,“- - -”,“- - -”);
month_number = str2num (month_number {:});
如果month_number > month_number_old%我们切换到下个月
% 1 /保存前一个月的数据
month_number_old month_name = datestr (datetime (1, 1),“嗯”);
month_name filename_out =[传感器“xls”];%的excel输出名称包含所选的文件夹
writetable (, fullfile(路径,filename_out));
% 2 /启动一个新的数据concat(1日迭代)
month_number_old = month_number;%更新month_number_old
F = fullfile (folder_name file_name);
data = readtable (F);
=(数据(:,columns_to_keep)];%垂直连接
其他的%我们还在同一个月保持concat数据
F = fullfile (folder_name file_name);
data = readtable (F);
=(;数据(:,columns_to_keep)];%垂直连接
结束
如果ci = = folders_to_export
month_number month_name = datestr (datetime (1, 1),“嗯”);
month_name filename_out =[传感器“xls”];
writetable (, fullfile(路径,filename_out));
结束
结束
更多的答案(0)
一个错误发生
无法完成的行动,因为页面所做的更改。重新加载页面更新状态。
你也可以从下面的列表中选择一个网站
表现最好的网站怎么走吗
选择中国网站(中文或英文)最佳站点的性能。其他MathWorks国家网站不优化的访问你的位置。