2016-04-15 172 views
0

既存のブックから新しいブックに複数のシートをコピーしたいと思います。 ここに私のコードですが、シートをコピーできますが、ブックを正しく保存することができません。Matlab:Excelシートをコピーしてブックを保存

私の次のコードでは、最初の3枚をコピーしてブックを保存しますが、開いたときには空です。私はワークブックの取り扱いが間違っていると思う。シートの水平方向の連結のために

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() 

答えて

2

ステップ1: 1つのセル・アレイは、(あなたが結合したい枚数と同じ数)あなたのファイル名の繰り返しを含む作成し、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 
関連する問題