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

Matlab:复制Excel工作表并保存工作簿,excel,matlab,activex,Excel,Matlab,Activex,我想将多张工作表从现有工作簿复制到新工作簿。 这是我的代码,我可以复制工作表,但无法正确保存工作簿 在下面的代码中,我复制了前三张工作表并保存工作簿,但当我打开它时,它是空的。我想我的工作簿句柄错了 Excel = actxserver('Excel.Application'); Excel.Visible = true; WB = invoke(Excel.Workbooks,'open','C:\Example.xlsx'); SHS = WB.Sheets; %sheets of tem

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

在下面的代码中,我复制了前三张工作表并保存工作簿,但当我打开它时,它是空的。我想我的工作簿句柄错了

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栏开始写的。您可能希望从第一行开始,因此
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
用于图纸的垂直拼接

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

解决方案:

% 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

用于图纸的水平拼接

第1步:制作一个单元格数组,其中包含文件名的重复项(与要组合的图纸数量相同),并制作一个单元格数组,其中包含图纸数量。然后使用
cellfun
阅读所有表格

步骤2:定义要从哪个列写入数据。我想你读的第一页应该是从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
用于图纸的垂直拼接

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

解决方案:

% 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