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);