matlab之m语言自动填充Excel文本

matlab之m语言自动填充Excel文本

一、前言

此task要求:
(1)根据加班填写表,自动填充到加班汇总表中
(2)人名,加班日期,对应的加班时长要一一对应
具体要求如下代码:

二、具体步骤如下 ,直接见代码

 

clear;
clc;
%% 取出所有的姓名ALLNameTotalTable.xlsx
filename_read_Table = './控制部人力资源管理.xlsx';
sheet_read_Table= '部门考勤-1月';
xlrange_read_Table= 'E4:E57'; %部门总人数:从E4到E57  后续优化!!!
[~,ALLNameTotalTable] = xlsread(filename_read_Table,sheet_read_Table,xlrange_read_Table);  % 第一个是data不需要获取,第二个是文本型数据

%% 现在开始批量提取姓名,加班日期,和加班时长  这里是取出循环的最大值
filename_temp = './控制部加班考勤名单 (3).xlsx';
sheet_temp = '主表';
xlrange_temp= 'A:A';
total_number = xlsread(filename_temp,sheet_temp,xlrange_temp); 
max_total_number = max(total_number);
% disp(max_total_number); % 取出一共有多少行,但是要加上1,因为第一行是序号

filename_read = './控制部加班考勤名单 (3).xlsx';
sheet_read = '主表';

process_show=waitbar(0,'检查进度'); %显示初始界面
for Xlrange_name_temp =2:(max_total_number+1)
    %% 取出名字
    xlrange_Name = strcat('C',num2str(Xlrange_name_temp));
    [~,Name] =  xlsread(filename_read,sheet_read,xlrange_Name);
    %% 取出加班日期
    xlrange_Date = strcat('D',num2str(Xlrange_name_temp));
    [~,Date_temp] =  xlsread(filename_read,sheet_read,xlrange_Date);
    Date_temp = char(Date_temp);
    Date= Date_temp(end-1:end);
    %% 取出加班时长
    xlrange_Over_Time = strcat('E',num2str(Xlrange_name_temp));
    [~,~,Over_Time_temp] =  xlsread(filename_read,sheet_read,xlrange_Over_Time); %希望以后改进只取出数字
    
    str=char(Over_Time_temp);
    true_overtime=regexp(str,'^([1-9]\d*\.\d*|0\.\d*[1-9]\d*$)|(\d+)','match'); %从一组字符串中提取数字,2.5也有问题
    disp(true_overtime);
    
    %% 根据名字去配行数,根据日期去配列数
    test_name = Name;
    temp_column = 1;
   
    for temp_column=1:57  %后续可以适当更改!!!
        if strcmp(ALLNameTotalTable(temp_column),test_name)
            ture_column = temp_column + 3; %后续程序优化进行循环的优化
            break; 
        end
    end
    if (temp_column == 57) && ~isempty(strcmp(ALLNameTotalTable(temp_column),test_name))
        fprintf('error人名:%s不在规定列表内,已跳过\n',Name);
        continue;
    end

    
    test_date_row = round(str2double(Date));
    % Excel对应的列数
    mapObj=containers.Map({1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31},{'G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z','AA','AB','AC','AD','AE','AF','AG','AH','AI','AJ','AK'});
    
    
    try   % 进行错误判断
        ture_date_row  = mapObj(test_date_row);
    catch   
        fprintf('error日期:%s不在规定列表内,已跳过\n',Date_temp);
        continue;
    end
    %% 把加班的时间写入到对应的行和列中
    filename_write= './控制部人力资源管理.xlsx';
    add_column_and_cow = strcat(char(ture_date_row),num2str(ture_column)); 
   
    
    sheet_write = '部门考勤-1月'; %以后需要手动更改,要进行优化!!
    xlRange_write = add_column_and_cow;
    xlswrite(filename_write,true_overtime,sheet_write,xlRange_write);
    
    Percentage = Xlrange_name_temp/(max_total_number+1);
    waitbar(Percentage,process_show,['已完成'  (num2str(round(100*Percentage)))  '%']); %进度条,进度增加情况 后面有判断是否关闭
    
end
close(process_show);




  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值