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 = './CHJ整車控制部加班考勤名單 (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 = './CHJ整車控制部加班考勤名單 (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);