Myślę, że to pytanie podsumowuje. Biorąc pod uwagę dwie liczby całkowite dla wiersza i kolumny lub cztery liczby całkowite dla wiersza i kolumny dla dwóch wierzchołków zakresu, jak uzyskać obiekt zakresu dla tego zakresu.Jak uzyskać zakres programu Excel za pomocą numerów wierszy i kolumn w VSTO/C#?
Odpowiedz
Jeżeli zasięg jest wiele komórek:
Excel.Worksheet sheet = workbook.ActiveSheet;
Excel.Range rng = (Excel.Range) sheet.get_Range(sheet.Cells[1, 1], sheet.Cells[3,3]);
Jeżeli zakres jest jedna komórka:
Excel.Worksheet sheet = workbook.ActiveSheet;
Excel.Range rng = (Excel.Range) sheet.Cells[1, 1];
Doskonała odpowiedź Pomógł mi bardzo. +1 – Barun
Ja też, chociaż musiałem zrobić to samo (jedno-komórkowe etui) w VBA: 'Dim rng As Range' i 'Set rng = ActiveSheet.Cells (1, 1)' – Hephaestus
"Workbook.ActiveSheet;" może być 'oExcel.ThisWorkbook.ActiveSheet;', w którym 'oExcel' jest instancją Excel, tak? –
znalazłem dobrą krótki sposób, który wydaje się działać dobrze ...
Dim x, y As Integer
x = 3: y = 5
ActiveSheet.Cells(y, x).Select
ActiveCell.Value = "Tada"
W tym przykładzie wybieramy 3 kolumny powyżej i 5 wierszy w dół, a następnie umieszczając "Tada" w komórce.
można odzyskać wartość jak ten
string str = (string)(range.Cells[row, col] as Excel.Range).Value2 ;
wybrać cały używane zakresie
Excel.Range range = xlWorkSheet.UsedRange;
źródło:
http://csharp.net-informations.com/excel/csharp-read-excel.htm
płonące
Podana odpowiedź spowoduje zgłoszenie błędu, jeśli jest używana w bibliotece obiektów programu Microsoft Excel 14.0. Obiekt nie zawiera definicji dla get_range. Zamiast używać
int countRows = xlWorkSheetData.UsedRange.Rows.Count;
int countColumns = xlWorkSheetData.UsedRange.Columns.Count;
object[,] data = xlWorkSheetData.Range[xlWorkSheetData.Cells[1, 1], xlWorkSheetData.Cells[countRows, countColumns]].Cells.Value2;
Używam wersji 15.0 i również nie mam get_range, dzięki tic, ten kod działa świetnie dla mnie –
pracy UsedRange grzywny z „panien” komórek, ale jeśli komórki są wypełnione w przeszłości, wtedy UsedRange dostarczać Ci starą wartość.
Na przykład:
"Myśl w arkuszu Excel, które mają komórki A1 do A5 wypełnione tekstem". W tym scenariuszu UsedRange muszą być realizowane jako:
Long SheetRows;
SheetRows = ActiveSheet.UsedRange.Rows.Count;
Zegarek do zmiennej SheetRows muszą posiadać wartość 5 po wykonaniu tej pary linii.
Pytanie 1: Co się stanie, jeśli wartość A5 zostanie usunięta?
A1: Wartość SheetRows byłoby 5
Q2: Dlaczego?
A2: Ponieważ właściwości UsedRange MSDN zdefiniować jako:
Pobiera obiekt Microsoft.Office.Interop.Excel.Range reprezentujący wszystkie komórki, które zawierały wartość w dowolnym momencie.
Więc pytanie jest: Istnieją/dowolny obejście tego problemu?
myślę w 2 Alternatywy:
- uniknąć usuwania zawartości komórki, preferując usunięcie całego wiersza (kliknij prawym przyciskiem myszy numer wiersza, a następnie „Usuń wiersz”
- Zastosowanie CurrentRegion zamiast. mienia UsedRange jak postępować:
Long SheetRows;
SheetRows = ActiveSheet.Range("A1").CurrentRegion.Rows.Count;
Jeśli chcesz jak Cells(Rows.Count, 1).End(xlUp).Row
, możesz to zrobić.
wystarczy użyć następującego kodu:
using Excel = Microsoft.Office.Interop.Excel;
string xlBk = @"D:\Test.xlsx";
Excel.Application xlApp;
Excel.Workbook xlWb;
Excel.Worksheet xlWs;
Excel.Range rng;
int iLast;
xlApp = new Excel.Application();
xlWb = xlApp.Workbooks.Open(xlBk, 0, true, 5, "", "", true,
Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "\t", false, false, 0, true, 1, 0);
xlWs = (Excel.Worksheet)xlWb.Worksheets.get_Item(1);
iLast = xlWs.Rows.Count;
rng = (Excel.Range)xlWs.Cells[iLast, 1];
iLast = rng.get_End(Excel.XlDirection.xlUp).Row;
obliczu tego samego problemu znalazłem najszybszym rozwiązaniem było rzeczywiście skanować rzędy komórek chciałem uporządkować określić ostatni wiersz z nie pustego elementu a następnie wybierz i sortuj na tym grupowaniu.
Dim lastrow As Integer
lastrow = 0
For r = 3 To 120
If Cells(r, 2) = "" Then
Dim rng As Range
Set rng = Range(Cells(3, 2), Cells(r - 1, 2 + 6))
rng.Select
rng.Sort Key1:=Range("h3"), order1:=xlDescending, Header:=xlGuess, DataOption1:=xlSortNormal
r = 205
End If
Next r
- 1. Jak mogę uzyskać zakres filtrowanych wierszy za pomocą Excel Interop?
- 2. Jak uzyskać datę z programu Excel za pomocą biblioteki PHPExcel
- 3. Eksportuj tabelę HTML do programu Excel za pomocą programu ASP.NET
- 4. Jak dowiedzieć się, ile wierszy i kolumn można odczytać z pliku Excel za pomocą PHPExcel?
- 5. Drukowanie programu Excel za pomocą Interop
- 6. Usuwanie zdjęć za pomocą programu Excel VBA
- 7. Edytowanie arkuszy programu Excel za pomocą Pythona
- 8. Tworzenie plików programu Excel za pomocą C#
- 9. za pomocą znaku ":" w XDocument dla generowania programu Excel - C#
- 10. Jak zastosować kolor tła dla wierszy w arkuszu programu Excel za pomocą Apache POI?
- 11. Otwieranie dokumentu Excel za pomocą programu EPPlus
- 12. Aktualizacja za pomocą CTE i numerów wierszy jako sekwencji lub zapytania aktualizacji TSQL za pomocą ROW_NUMBER()
- 13. Odczytywanie danych z połączonych kolumn/wierszy programu Excel przy użyciu C#
- 14. Excel vba: Zakres i komórka
- 15. Jak zapisać/zastąpić istniejący plik programu Excel za pomocą programu Excel Interop - C#
- 16. Jak znaleźć wiersz początkowy i końcowy scalonych komórek w programie Excel za pomocą programu VBSCript?
- 17. Jak uzyskać liczbę wierszy z duplikatami kolumn?
- 18. Jak uzyskać zakres widocznych wierszy po zastosowaniu zaawansowanego filtru w programie Excel (VBA)
- 19. Zamiana wierszy i kolumn
- 20. Jak zmodyfikować istniejący skoroszyt programu Excel za pomocą języka Perl?
- 21. Jak uruchomić makro programu Excel za pomocą zadania harmonogramu?
- 22. Jak odczytać dane z programu Excel za pomocą z PHPExcel
- 23. Tworzenie i zmienianie tabel Excel za pomocą Apache POI
- 24. bash dla pętli: zakres numerów
- 25. Jak uzyskać wartość pustej komórki programu Excel w apache POI?
- 26. Jak zmniejszyć odstępy między projektowaniem wierszy za pomocą programu startowego
- 27. Wykonaj polecenie w wierszu polecenia za pomocą programu excel VBA
- 28. Jak mogę przedefiniować nazwany zakres za pomocą VBA?
- 29. Błąd podczas otwierania skoroszytu programu Excel za pomocą kodu C#
- 30. Czy istnieje sposób automatycznego dostosowania szerokości kolumn programu Excel za pomocą pandas.ExcelWriter?
Zacznę klikać znacznik wyboru na odpowiedziach, które pomogły. Ludzie są mniej skłonni do pomocy, jeśli twój procent jest niski. –
Wybierz odpowiedź + Dan Crowther. Ludzie zasługują na punkty. – Kristopher
@Wartickler Jeśli spojrzysz na jego stronę profilu, zobaczysz, że był ostatnio widziany na SO w 2010 roku. Uważam za mało prawdopodobne, że przyjmie on jakiekolwiek odpowiedzi w przewidywalnej przyszłości :-( –