2013-12-12 9 views
5

Jestem generowanie arkusza Excel z Delphi, ale problem mam skierowane jest to, że kiedy używam tego kodu:Jak dodać arkusz po ostatnim arkuszu skoroszytu?

Workbook.Sheets.Add; 

nowy arkusz jest dodawany przed aktualnie wybranego arkusza:

enter image description here

Czy ktoś wie, jak dodać arkusz po ostatnim arkuszu skoroszytu?

+2

FYI, przycisk [ 'Worksheets.Add Metoda '] (http://msdn.microsoft.com/en-us/library/microsoft.office.interop.excel.worksheets.add.aspx) ma 4 opcjonalne parametry. – TLama

+1

'Workbook.Sheets.Add.After;' Czy załatwi sprawę? – joostmakaay

+3

Może być podobny do 'Workbook.Sheets.Add (NULL, Workbook.Sheets.Count)'. – TLama

Odpowiedz

5

Metoda przyjmuje parametry do wskazania miejsca wstawienia nowego arkusza, w szczególności parametru After. Powinien to być odnośnik do arkusza, aby wstawić nowy arkusz po. W twoim przypadku chcesz ostatni arkusz. Worksheets jest tablicą opartą na 1, więc ostatni arkusz jest podany przez Worksheets[Worksheets.Count]. Składając to wszystko razem, otrzymujemy w ten sposób:

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

Aby dodać nowy arkusz musimy użyć metoda .Sheets.Add, posiada pięć parametrów (arkusz przed nim arkusz po nim, i inne 3 , tylko Bóg wie) w tym przypadku użyłem (NULL, aSheet, NULL, NULL, 0), gdzie aSheet do wstawienia go po ostatnim. 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

Witamy w przepełnieniu stosu. Generalnie wolimy, aby odpowiedzi zawierały * zdania * odpowiadające na pytanie, wraz z pewnym kodem do zademonstrowania, jeśli to konieczne. Kod sam w sobie nie odpowiada na pytanie, ponieważ zmusza czytelników do dokładnego sprawdzenia kodu, aby dokładnie zrozumieć, która część kodu jest rzeczywiście istotna dla danego pytania. –

+0

ok .. dziękuję za komentarz – Pericles

+0

To jest wcześnie związane. Asker używa późnego wiązania. –

-1

Używanie po parametr jest poprawny, ale jestem również stwierdzenia, że ​​muszę korzystać Type.Missing dla innych parametrów, które nie jestem określający

Powiązane problemy