2013-12-12 23 views
5

che sto generando un foglio di Excel con Delphi, ma il problema che sto affrontando è che quando uso questo codice:Come aggiungere il foglio di lavoro dopo l'ultimo foglio della cartella di lavoro?

Workbook.Sheets.Add; 

è aggiunto il nuovo foglio prima che il foglio di lavoro attualmente selezionato:

enter image description here

Qualcuno sa come aggiungere un foglio di lavoro dopo l'ultimo foglio della cartella di lavoro?

+2

Cordiali saluti, il [ 'Worksheets.Add '] (http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.worksheets.add.aspx) metodo ha 4 parametri opzionali. – TLama

+1

'Workbook.Sheets.Add.After;' Farebbe il trucco? – joostmakaay

+3

Forse come 'Workbook.Sheets.Add (NULL, Workbook.Sheets.Count)'. – TLama

risposta

5

Il metodo Add accetta parametri per indicare dove inserire il nuovo foglio, in particolare il parametro After. Dovrebbe essere un riferimento al foglio per inserire il nuovo foglio dopo. Nel tuo caso, vuoi l'ultimo foglio. Worksheets è un array basato su 1, quindi l'ultimo foglio è dato da Worksheets[Worksheets.Count]. Mettere tutto insieme, otteniamo questo:

Workbook.Worksheets.Add(After := Workbook.Worksheets[Workbook.Worksheets.Count]); 
1

Per aggiungere un nuovo foglio abbiamo bisogno di usare il metodo .Sheets.Add, ha cinque parametri (il foglio prima che, il foglio dopo che, e altri 3 , solo dio lo sa) in questo caso ho usato (NULL, aSheet, NULL, NULL, 0) dove aSheet per inserirlo dopo l'ultimo. bye

uses 
     ... OleServer, ExcelXP ... 
    type 
     TForm1 = class(TForm) 
     Button1: TButton; 
     ExcelApplication1: TExcelApplication; 
     procedure Button1Click(Sender: TObject); 
     private 
     { Private declarations } 
     public 
     { Public declarations } 
     end;  
    ...  
    procedure TForm1.Button1Click(Sender: TObject); 
    var 
    Excelfile:OleVariant; 
    aBook: _WORKBOOK; 
    aSheet: _WORKSHEET; 
    begin 
    Excelfile:='c:\plantilla.xls'; 
    ExcelApplication1.connect; 
    aBook:= ExcelApplication1.workbooks.add(Excelfile,0);   

    aSheet:= ExcelApplication1.sheets[aBook.Sheets.Count] as _WORKSHEET; 
    aBook.Sheets.Add(NULL,aSheet,NULL,NULL,0); 

    aSheet:= ExcelApplication1.sheets[aBook.Sheets.Count] as _WORKSHEET; 
    asheet.Name:='Test last position'; 

    ExcelApplication1.visible[0]:=true; 
    ExcelApplication1.disconnect; 
    end; 
+0

Benvenuto in Stack Overflow. Generalmente preferiamo che le risposte includano alcune * frasi * che rispondono alla domanda, insieme ad alcuni codici da dimostrare, se necessario. Il codice da solo fa uno scarso lavoro di risposta a una domanda perché costringe i lettori a ispezionare il codice con molta attenzione per capire esattamente quale parte del codice è realmente rilevante per la domanda in questione. –

+0

ok .. grazie per il commento – Pericles

+0

Questo è presto vincolato. Asker usa il late bound. –

-1

Uso del dopo parametro è corretto, ma sto anche scoprendo che ho bisogno di usare Type.Missing per gli altri parametri che non sto specificando

Problemi correlati