可以通过Matlab快速实现以上两个目标,涉及的主要函数如下:
xlsread
/xlswrite
actxserver
其中,
xlsread
/ xlswrite
分别读取和写入excel(csv)文件;而 axtxserver
可以创建windows的COM组件,从而操作该对象,例如:exl = axtxserver('excel.application')
可以创建一个Excel对象。以下给出通过Matlab为Excel单元格添加超链接的实现示例:exl = actxserver('excel.application');
exlWkbk = exl.Workbooks;
exlFile = exlWkbk.Open([pwd '/' filename]);
exlSheet1 = exlFile.Sheets.Item('Sheet1');
rngObj = exlSheet1.get('Cells', row, col);
exlSheet1.Hyperlinks.Add(rngObj, 'somelink');
exlFile.Save()
exlFile.Close()
exl.Quit
exl.delete
在创建Excel对象后,可以调用Excel VBA中的方法对Excel单元格进行访问,而其中添加超链接的方式即:
exlSheet1.Hyperlinks.Add(rngObj, 'somelink');
值得注意的是以R1C1
方式访问Excel单元格的方式为:rngObj = exlSheet1.get('Cells', row, col);
完整代码如下所示:function SelectInterestTags(export, filename, savepath)
%% Select interested tags from IEEE Xplore export file
% and generate an excel file which contains hyperlink for each entry to
% locate the downloaded file
%
% export: csv file downloaded from IEEE Xplore
% filename: saved excel filename
% savepath: path for downloaded pdf files
%
clc
%% initial
switch(nargin)
case 2
savepath = pwd;
case 3
% do nothing
otherwise
error('Wrong for number of inputs.')
end
%% load csv file
[raw_numerical, raw_text, RAW] = xlsread(export);
NameList = raw_text(3:end, 1);
YearList = raw_numerical(1:end, 2);
pat = '[\\/:*?"<>|]';
NameList = regexprep(NameList, pat, ' ');
%% disp all tags and choose interest tags
Tags = raw_text(2, :);
for k = 1 : length(Tags)
fprintf('\t%d\t%s\n', k, Tags{k});
end
prompt = 'Please Select Your Interest Tags (-1 for all, 0 for default): ';
interestTags = input(prompt);
%% parameter check
if interestTags == -1
interestTags = 1:length(Tags);
else
if interestTags == 0 % default selection
interestTags = [1, 22, 4, 6, 11, 17, 24, 2];
end
end
disp('The following tags are selected: ')
disp(Tags(interestTags)')
%% write xls file
InterestArray = RAW([2:end], interestTags);
xlswrite(filename, InterestArray);
%% add hyperlink for each paper
exl = actxserver('excel.application');
exlWkbk = exl.Workbooks;
exlFile = exlWkbk.Open([pwd '/' filename]);
exlSheet1 = exlFile.Sheets.Item('Sheet1');
for k = 1 : length(InterestArray) - 1
pdfFile = [savepath '/' num2str(YearList(k)) ' ' NameList{k} '.pdf'];
if exist(pdfFile, 'file') == 2
rngObj = exlSheet1.get('Cells', k + 1, 1);
exlSheet1.Hyperlinks.Add(rngObj, pdfFile);
end
end
disp([filename ' generated!'])
%% save file and close activex excel com
exlFile.Save()
exlFile.Close()
exl.Quit
exl.delete