2013-06-13 11 views
7

To, co mam, to arkusz z danymi i chcę zdefiniować nieciągły zakres, na którym można na przykład utworzyć wykres.Delphi - Excel: Zdefiniuj nieciągły zakres

Dopóki zasięg jest prostokątny, bardzo łatwo określa zakres.

range := ASheet.Range['A1', 'B10']; 

Stwarza to szereg prostokątny z lewym górnym rogu na A1 i prawym dolnym rogu w B10. Problem polega na tym, że dane nie są zdefiniowane, aby można je było wybrać za pomocą jednego prostokąta.

Jako przykład mamy te dane:

+-------+------+------+------+------+ 
| Time | Col1 | Col2 | Col3 | Col4 | 
+-------+------+------+------+------+ 
| 01:20 | 5 | 1 | 101 | 51 | 
| 01:21 | 6 | 1 | 101 | 51 | 
| 01:22 | 5 | 0 | 101 | 51 | 
| 01:23 | 5 | 0 | 101 | 51 | 
| 01:24 | 5 | 0 | 101 | 55 | 
| 01:25 | 5 | 1 | 101 | 55 | 
| 01:26 | 6 | 1 | 101 | 15 | 
| 01:27 | 7 | 2 | 101 | 15 | 
| 01:28 | 7 | 2 | 101 | 15 | 
+-------+------+------+------+------+ 

Jeśli na przykład chcesz utworzyć wykres dla czasie Col1 i COL2 następnie zakres jest po prostu ASheet.Range['A1', 'C10']. Jeśli chcę utworzyć wykres dla Time, Col1, Col3 i Col4, nie można utworzyć zakresu w ten sposób (ponieważ Col2 nie powinno być dołączone).

W VBA możliwe jest utworzenie żądanego zakresu za pomocą po prostu .Range("A1:B10,D1:E10"). Niestety nie ma podobnego sposobu definiowania zakresu w Delphi (Excel2010), w rzeczywistości wydaje się, że obsługuje tylko zakres w formacie .Range[topLeft, bottomRight].

Moje pytanie brzmi: Jak zdefiniować nieciągły zakres w Delphi?

Odpowiedz

9

Po godzinach i godzinach szukania w serwisie internetowym natknąłem się na kluczową część: Application.Union, po raz pierwszy czytając numer documentation for Range object.

Rozwiązaniem jest użycie metody obiektowej Excel o nazwie Union, aby utworzyć połączenie dwóch sąsiednich zakresów w celu zdefiniowania nowego zakresu, który może być nieciągły.

przykład:

ExcelApp := TExcelApplication.Create(..); 
... 
Range1 := Sheet.Range['A1', 'B10']; 
Range2 := Sheet.Range['D1', 'E10']; 

Range := ExcelApp.Union(Range1, Range2); 
+2

+1; dobre rozwiązanie. Mogę odnieść się do frustracji związanej z wyszukiwaniem (: –

+0

Linki do innych wersji programu Excel tej samej funkcji: [Excel 2013 Application.Union] (http://msdn.microsoft.com/en-us/library/office/ff834621 (v = office.15) .aspx); [Excel 2010 Application.Union] (http://msdn.microsoft.com/en-us/library/office/ff834621 (v = office.14) .aspx); [Aplikacja Excel 2007 .Union] (http://msdn.microsoft.com/en-us/library/office/bb178176 (v = office.12) .aspx); [Excel 2003 Application.Union] (http://msdn.microsoft. com/en-us/library/office/aa213609 (v = office.11) .aspx); –

Powiązane problemy