Domanda

Sto lavorando con C ++ non gestito ed Excel 2007. Sto usando una chiamata all'API Excel4 per ottenere l'intervallo di celle selezionato dall'utente.

Quando l'utente seleziona ciò che chiamo un " comune " intervallo, questa chiamata restituisce un intervallo come questo " R1C1: R4C3 " ;, che è esattamente il formato di cui ho bisogno per fare altre operazioni nella mia applicazione.

Tuttavia, quando l'utente decide di selezionare intere colonne, questa chiamata API restituisce un intervallo solo con colonne, qualcosa del genere "C1: C3", che ovviamente è un intervallo Excel valido, ma significa per me che devi modificarlo in modo che assomigli all'intervallo sopra; in altre parole, devo aggiungerlo manualmente all'intervallo di righe.

Quindi prendo questo intervallo "C1C3" e cambiarlo in "R1C1: R65534C3".

Forse a questo punto hai già notato il mio problema, come puoi vedere sto codificando l'intervallo di righe per essere il numero massimo di righe supportate da Excel 2003 (l'applicazione funziona anche con questa versione di Excel).

Questo ovviamente non è quello che sto cercando, perché una volta ottenuto l'intervallo selezionato, leggo le informazioni in quell'intervallo e le utilizzo per effettuare una query sul server, quindi immagina che l'utente abbia inserito solo i dati fino alla riga 534 e ancora la mia query avrà 65000 righe senza nulla.

Quindi la mia domanda è come posso ottenere l'ultima cella in cui l'utente ha inserito i dati, penso che sia chiamata l'ultima cella attiva, quindi posso delimitare il mio intervallo fino a quella riga e per favore ricorda che sto lavorando con non gestito codice.

È stato utile?

Soluzione

L'API di Excel 4? Davvero?

C'è un comando xlcSelectEnd che puoi usare per saltare all'ultima cella con il testo inserito in qualsiasi direzione da una determinata cella.

Altri suggerimenti

Prova a lanciare range.selection su un oggetto Range.

regione Ottieni l'ultima riga utilizzata

     Excel.ApplicationClass app = new Excel.ApplicationClass();
        Excel.Workbook workBook = app.Workbooks.Open(_PathFile,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value,
                 System.Reflection.Missing.Value);
        // Get the active worksheet using sheet name or active sheet
        Excel.Worksheet workSheet = (Excel.Worksheet)workBook.ActiveSheet;
        // Find the last real row
        int _InLastRow = workSheet.Cells.Find("*",System.Reflection.Missing.Value,
            System.Reflection.Missing.Value, System.Reflection.Missing.Value, Excel.XlSearchOrder.xlByRows,Excel.XlSearchDirection.xlPrevious, false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Row;
#endregion
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top