重命名xlswrite的工作表标题

时间:2017-09-18 04:56:34

标签: matlab

我需要一些帮助来重命名xlswrite的表格。我尝试使用下面的代码,只要标题名称不同,它就可以工作。但是,当我必须使用相同的标题时,如表1和表格#39;在这个例子中它不会起作用。如何搜索标题字符串,如果两个相同,则给它们一个额外的数字,这样我的标题数组变为Title = {' table1(1)&#39 ;; '表2&#39 ;; '表3&#39 ;; '表4&#39 ;; ' table1(2)&#39 ;;}。

这是我的代码

Title={'table1'; 'table2'; 'table3'; 'table4'; 'table1';}
[FileNameBodeWrite,PathNameBodeWrite] = uiputfile({'*.xls'},'Save As', [ '.xls']);
filename=[PathNameBodeWrite FileNameBodeWrite];
t=1/numel(Table);
for ii = 1:numel(Table)
    sheet=ii;
    xlswrite(filename,Table{ii},sheet,'A1');
    e = actxserver('Excel.Application'); % # open Activex server
    ewb = e.Workbooks.Open(filename); % # open file (enter full path!)
    ewb.Worksheets.Item(ii).Name = Title{ii,1} % # rename sheets
    ewb.Save % # save to the same file
    ewb.Close(false)
    e.Quit 
end

2 个答案:

答案 0 :(得分:1)

最简单的方法是在R2014a之前使用matlab.lang.makeUniqueStrings(或genvarname):

Title = {'table1'; 'table2'; 'table3'; 'table4'; 'table1'};
Title = matlab.lang.makeUniqueStrings(Title)

Title =

  5×1 cell array

    'table1'
    'table2'
    'table3'
    'table4'
    'table1_1'

答案 1 :(得分:0)

一种简单的方法是查看标题字符串数组并重命名那些重复的字符串。

例如:

Title = {'table1'; 'table2'; 'table3'; 'table4'; 'table1'};

[unique_titles, ia, ic] = unique(Title, 'stable');  % Stable to retain order
counts = accumarray(ic, 1);  % Count occurrence of each title

% Iterate only over titles that occur more than once
for ii = ia(counts > 1)
    titleidx = find(ic == ii);  % Find where titles occur
    for jj = 1:counts(ii)
        Title{titleidx(jj)} = sprintf('%s (%u)', unique_titles{ii}, jj);
    end
end

返回:

Title =

  5×1 cell array

    'table1 (1)'
    'table2'
    'table3'
    'table4'
    'table1 (2)'