Matlab:复制Excel工作表并保存工作簿

时间:2016-04-15 07:26:01

标签: excel matlab activex

我想将现有工作簿中的多个工作表复制到新工作簿。 这是我的代码,我可以复制工作表,但我无法正确保存工作簿。

在我的下面的代码中,我复制了前三张并保存了工作簿,但是当我打开它时,它是空的。我认为我的工作簿处理是错误的。

Excel = actxserver('Excel.Application');
Excel.Visible = true;

WB = invoke(Excel.Workbooks,'open','C:\Example.xlsx');
SHS = WB.Sheets; %sheets of template Workbook
SH = WB.Worksheets.Item(3); 
invoke(SH,'Copy');
SH = Excel.ActiveSheet; 
SH1 = WB.Worksheets.Item(2);
SH2 = WB.Worksheets.Item(1);
invoke(SH2,'Copy',SH);
invoke(SH1,'Copy',SH);
SH = Excel.ActiveSheet;
nWB = Excel.ActiveWorkbook;
nWB.SaveAs('C:\TEST.xlsx',1)
Excel.Quit()

1 个答案:

答案 0 :(得分:2)

对于工作表的水平连接

步骤1:制作一个包含文件名重复的单元格数组(与要合并的工作表数相同的数字),以及一个包含工作表数量的单元格数组。然后使用cellfun阅读所有表格。

第2步:定义您要从哪个列写入数据。您阅读的第一张表格应写在“A' A'我想。您可能希望从第一行开始,因此range是' A1'第一次(即k = 1)您将数据写入新文件。对k > 1来说,它有点棘手。您需要跟踪所读取的所有工作表的列数,以便在新文件中写入工作表2,3,...,n时知道新范围的位置。将您的计数转换为Excel列名称。这可以使用char命令完成。确保照顾包装(Z后来AA)。

<强>解决方案:

% STEP 1
n = 3; %number of sheets you want to combine
filename = strcat(cell(1,n), 'C:\Example.xlsx');
sheets = num2cell(1:n);
combinedSheets = cellfun(@xlsread,filename, sheets,'un',0);

% STEP 2
range = {'A1'};
cols = 0;
for k = 1:n
    xlswrite('C:\TEST.xlsx',combinedSheets{k},1, cell2mat(range))
    cols = cols + size(combinedSheets{k},2);
    q = floor(cols/26);
    d = mod(cols,26);
    range = strcat(cell(1,q+1), 'A');
    range{end} = [char(d+'A'),'1'];
end

垂直连接工作表

这有点简单,因为我们不需要处理列名和包装等。

<强>解决方案:

n = 3; %number of sheets you want to combine
filename = strcat(cell(1,n), 'C:\Example.xlsx');
sheets = num2cell(1:n);
combinedSheets = cellfun(@xlsread,filename, sheets,'un',0);

range = 'A1';
rows = 1;
for k = 1:n
    xlswrite('C:\TEST.xlsx',combinedSheets{k},1, range)
    rows = rows + size(combinedSheets{k},1);
    range = sprintf('A%s', num2str(rows));
end