2013-07-02 3 views
7

Ho un oggetto Microsoft.Office.Interop.Excel.Range e voglio stimare le coordinate finali di tale intervallo, ad esempio (ultima colonna, ultima riga).Ottieni l'ultima cella (colonna, riga) di un oggetto intervallo Excel

Non ci sono immobili come LastCol, LastRow. Le sole proprietà sono Column e , che specificano la prima cella. Ma come posso ottenere l'ultima cella dell'intervallo?

+1

Columns.Count, Rows.Count – user2140261

+1

Columns.Count e righe .Count funzionerà per un intervallo contiguo. Per un intervallo non contiguo (ad esempio "D1: E3, A1: B3") sarà necessario utilizzare la proprietà Aree. – Joe

risposta

6

Questo dovrebbe ottenere il primo primo e l'ultimo cellulare della gamma:

  1. Iniziato Excel.

  2. Aprire la cartella di lavoro.

  3. Selezionare l'intervallo, in questo caso ho ottenuto l'intervallo utilizzato del foglio attivo.

  4. Chiamare il metodo get_address dell'intervallo.

  5. Dividere il risultato di get_address sul colon.

  6. Il primo valore dell'array risultante dalla divisione avrà la cella iniziale.

  7. Il secondo valore dell'array risultante dalla divisione avrà la cella finale.

  8. Sostituisci i simboli del dollaro con nulla e avrai le celle di inizio e fine per l'intervallo.

    Microsoft.Office.Interop.Excel.Application excel = new Application(); 
    Microsoft.Office.Interop.Excel.Workbook workBook = 
        excel.Workbooks.Open(fileLocation); 
    Microsoft.Office.Interop.Excel.Worksheet sheet = workBook.ActiveSheet; 
    Microsoft.Office.Interop.Excel.Range range = sheet.UsedRange; 
    string address = range.get_Address(); 
    string[] cells = address.Split(new char[] {':'}); 
    string beginCell = cells[0].Replace("$", ""); 
    string endCell = cells[1].Replace("$", ""); 
    workBook.Close(true); 
    excel.Quit(); 
    

Se si desidera che l'ultima colonna e ultima riga relativa all'inizio della gamma è possibile effettuare le seguenti operazioni:

int lastColumn = range.Columns.Count; 
    int lastRow = range.Rows.Count; 
8

ci sono due modo per farlo:

  1. Utilizzare Worksheet.UsedRange per determinare l'intervallo. Ciò fornirà un intervallo come A1: F10 oppure utilizzare Worksheet.UsedRange.SpecialCells(IExcel.XlCellType.xlCellTypeLastCell) per ottenere F10.

  2. Con la proprietà Range.End[IExcel.XlDirection], restituisce l'ultima cella continua non vuota nella direzione specificata. Notare che se l'intervallo è vuoto, restituirà la prima cella non vuota o l'ultima cella (quando Excel raggiunge i propri limiti) nella direzione specificata. Es: l'intera colonna A è vuota, Range["A1"].End[IExcel.XlDirection.xlDown] sarà A65535 (ultima riga in Excel 97-2003, A1048576 per Excel 2007)

//Just In case if you are wondering what IExcel is
using IExcel = Microsoft.Office.Interop.Excel;

0

Utilizzando Excel 2013 abbiamo avuto molti casi in cui UsedRange e xlCellTypeLastCell davano semplicemente valori errati.

Ad esempio, avremmo un foglio di lavoro contenente solo 7 colonne e a volte queste due funzioni direbbero al nostro codice C# che c'erano oltre 16.000 colonne di dati.

L'unico metodo che ho trovato che veramente ha funzionato alla cella in basso a destra che contiene i dati è stato quello di utilizzare i suggerimenti in questo suggerimento:

sheet.Cells.Find()

+1

Ho incontrato anche questo. I valori sembrano essere molto lontani perché '.SpecialCells (XlCellType.xlCellTypeLastCell)' restituisce l'ultima cella 'usata' della proprietà 'UsedRange' dell'oggetto foglio, non l'ultima cella dell'oggetto Range su cui è chiamato. – TheAtomicOption