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 = './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);




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章