3.1. 利用matlab实现word中文字自动替换

本程序记录了2020年学院工程认证中,附件材料替换的小程序。由于比较简单,不做详细解释,仅留作记录,供未来工作中参考。

3.1.1. 1. 附录编号自动提取

附录编号提取2
data2={};
Num=0;
for i =1:length(data)
    expression ='[0-9]-[0-9]-[0-9]{1,2}'
    matchStr = regexp(data{i,1},expression,'match')
    if length(matchStr) > 0
        Num=Num+1;
        data2{Num,1}=matchStr{1};

    end
end

data=data2;

3.1.2. 2. 含多附录编号的快速提取

data2={};
Num=0;
for i =1:length(data)
    expression ='[0-9]-[0-9]-[0-9]{1,2}'
    matchStr = regexp(data{i,1},expression,'match')
    if length(matchStr) > 1
        Num=Num+1
       for jj=1:length(matchStr)
           data2{Num,jj}=matchStr{jj};
       end
       end
end

data=data2;

3.1.3. 3.添加括号

加括号
data=cellfun(@black_add,data)


function [x] = black_add(x)
%BLACK_ADD 此处显示有关此函数的摘要
%   此处显示详细说明
if x ~=0
    x=[x,')'];
else
    x=x;
end
end

3.1.4. 4.利用冒泡法合并求解元素集合

%元素去重--方法3
%将data转化为字符串数组--非常关键
data=cellfun(@string,data,'UniformOutput',false);
data2={};
for i =1:size(data,1)
    data2{i}=[data{i,1},data{i,2}];
end


% for i=length(data2):-1:2
%     cont1=data2{i};
%     de=false
%    for jj=i-1:-1:1
%        if ~isempty(intersect(cont1,data2{jj}))
%            data2{jj}=union(cont1,data2{jj})
%            de=true
%        end
%    end
%    if de==true
%    data2(i)=[];
%    end
% end

for i=1:10
    data2 = Union_xia(data2);
end

save xia.mat data2

for i=1:length(data2)
    xlswrite('xia2.xlsx',data2{i},'Sheet1',['A',num2str(i)]);
end

3.1.5. 4.word中内容替换(核心)

tic
w=actxserver('Word.Application');
w.Visible = 0;
w.DisplayAlerts = 0;
doc = w.Documents.Open('F:\天津科技大学\日常工作\2020\1月份\工程认证\最终材料\2020-7-29 版本\报告正文\自评报告正文-20200729--夏梦雷修订.docx');
w.Selection.Find.ClearFormatting();
w.Selection.Find.Replacement.ClearFormatting();
for i=1:size(data,1)
    for jj=2:5
        if data{i,jj} ~=0
        w.Selection.Find.Execute(data{i,jj}, false, false, false, false, false, true, 1, true, data{i,1}, 2);
        disp(sprintf('%s%s:替换完毕',data{i,jj},data{i,1}))
        end
    end
end
doc.SaveAs2('F:\天津科技大学\日常工作\2020\1月份\工程认证\最终材料\2020-7-29 版本\报告正文\自评报告正文-20200729--夏梦雷修订.docx');
doc.Close();
w.Quit();
toc

3.1.6. 5.编号自动排列

% 确保第一项是从1开始的
cont1=data{1};
po1=strfind(cont1,'-');
if strcmp(cont1(po1(2)+1:end),'1')
    data{1}=[cont1(1:po1(2)),'1'];
end

Num=1
for i =2:length(data)
    cont1=data{i-1};
    cont2=data{i};
    po1=strfind(cont1,'-');
    po2=strfind(cont2,'-');

    if strcmp(cont1(1:po1(2)),cont2(1:po2(2)))
        Num=Num+1;
    else
        Num=1;
    end
     data{i}=[cont2(1:po2(2)),num2str(Num)]
end

3.1.7. 6. 本技术介绍视频

用户留言