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

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

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

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步:使一个单元格数组包含重复的文件名(与要合并的页数相同的数字),以及一个单元格数组和单元格数。 然后使用cellfun阅读所有表。

第2步:定义您想要写入数据的列。 你读的第一张纸应该是从'A'列写的。 你可能想从第一行开始,所以第一次(即k = 1range是A1,你将数据写入到你的新文件中。 对于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