2016-04-15 17 views
0

Ich möchte mehrere Arbeitsblätter aus einer vorhandenen Arbeitsmappe in eine neue Arbeitsmappe kopieren. Hier ist mein Code, ich kann die Blätter kopieren, aber ich kann die Arbeitsmappe nicht richtig speichern.Matlab: Excel-Arbeitsblatt kopieren und Arbeitsmappe speichern

In meinem folgenden Code kopiere ich die ersten drei Blätter und speichern Sie die Arbeitsmappe, aber wenn ich es öffne, ist es leer. Ich denke, mein Arbeitsbuch-Handle ist falsch.

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

Antwort

2

Für horizontale Verkettung von Blättern

Schritt 1: Stellen ein Zellenfeld Wiederholungen Ihrer Dateinamen (gleiche Anzahl wie Anzahl der Blätter zu kombiniere) enthält, und ein Zellenfeld mit Anzahl der Blätter. Dann verwenden Sie cellfun, um alle Blätter zu lesen.

Schritt 2: Definieren Sie, aus welcher Spalte Sie Daten schreiben möchten. Das erste Blatt, das Sie gelesen haben, sollte aus der Spalte "A" stammen, nehme ich an. Sie möchten wahrscheinlich in der ersten Zeile beginnen, also range ist 'A1' zum ersten Mal (d. H. k = 1) Sie schreiben Daten in Ihre neue Datei. Für k > 1 ist es ein bisschen schwieriger. Sie müssen die Anzahl der Spalten aller Blätter, die Sie gelesen haben, verfolgen, um zu wissen, wo sich der neue Bereich befindet, wenn Sie Blatt 2, 3, ..., n in Ihre neue Datei schreiben. Konvertieren Sie Ihre Anzahl in Excel-Spaltennamen. Dies kann mit dem Befehl char erfolgen. Achten Sie auf die Verpackung (Nach Z kommt AA).

Lösung:

% 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 

Für vertikale Verkettung von Blättern

Das ist ein bisschen einfacher, da wir nicht brauchen, Spaltennamen und Verpackung usw.

Lösung zu handhaben :

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 
Verwandte Themen