2013-07-02 67 views
7

Tôi có đối tượng Microsoft.Office.Interop.Excel.Range và muốn ước tính tọa độ cuối của phạm vi đó (cột cuối cùng, hàng cuối cùng).Nhận ô cuối cùng (cột, hàng) của đối tượng phạm vi Excel

Không có bất động sản nào như LastCol, LastRow. Các thuộc tính duy nhất là Column và , trong đó chỉ định ô đầu tiên. Nhưng làm thế nào tôi có thể nhận được các tế bào cuối cùng của phạm vi?

+1

Columns.Count, Rows.Count – user2140261

+1

Columns.Count và Rows .Count sẽ làm việc cho một phạm vi tiếp giáp. Đối với phạm vi không tiếp giáp (ví dụ: "D1: E3, A1: B3"), bạn sẽ cần phải sử dụng thuộc tính Khu vực. – Joe

Trả lời

6

Điều này sẽ giúp các tế bào đầu tiên và cuối cùng đầu tiên của dãy núi này:

  1. Tiến Excel.

  2. Mở sổ làm việc.

  3. Chọn phạm vi của bạn, trong trường hợp này, tôi đã nhận dải ô được sử dụng của trang tính hiện hoạt.

  4. Gọi phương thức get_address của dải ô.

  5. Chia kết quả của get_address trên dấu hai chấm.

  6. Giá trị đầu tiên của mảng kết quả từ phần tách sẽ có ô bắt đầu.

  7. Giá trị thứ hai của mảng kết quả từ phần tách sẽ có ô kết thúc.

  8. Thay thế các ký hiệu đô la không có gì và bạn sẽ có các ô bắt đầu và kết thúc cho dải ô.

    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(); 
    

Nếu bạn muốn cột cuối cùng và hàng cuối cùng liên quan đến đầu của dãy bạn có thể làm như sau:

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

có hai cách để làm điều này:

  1. Sử dụng Worksheet.UsedRange để xác định phạm vi. Điều này sẽ cung cấp cho bạn một phạm vi như A1: F10 hoặc sử dụng Worksheet.UsedRange.SpecialCells(IExcel.XlCellType.xlCellTypeLastCell) để nhận được F10.

  2. Với thuộc tính Range.End[IExcel.XlDirection], nó sẽ trả về ô không trống không liên tục cuối cùng theo hướng được chỉ định. Lưu ý rằng nếu phạm vi trống, nó sẽ trả lại ô không trống đầu tiên hoặc ô cuối cùng (khi excel đạt đến ranh giới của nó) theo hướng đã cho. Ex: toàn bộ cột A là trống rỗng, Range["A1"].End[IExcel.XlDirection.xlDown] sẽ A65535 (hàng cuối cùng trong excel 97-2003, A1048576 cho excel 2007)

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

0

Sử dụng Excel 2013, chúng tôi đã có rất nhiều trường hợp trong đó UsedRangexlCellTypeLastCell chỉ đơn giản là đưa ra các giá trị sai lầm khủng khiếp.

Ví dụ: chúng tôi sẽ có một trang tính chỉ chứa 7 cột và đôi khi hai chức năng này sẽ cho mã C# của chúng tôi biết rằng có hơn 16.000 cột dữ liệu.

Phương pháp duy nhất tôi thấy đó thực sự làm việc ra các tế bào dưới bên phải chứa dữ liệu là sử dụng những lời khuyên trong đề nghị này:

sheet.Cells.Find()

+1

Tôi cũng đã gặp điều này. Các giá trị dường như bị tắt vì '.SpecialCells (XlCellType.xlCellTypeLastCell)' trả về ô 'đã sử dụng' cuối cùng của thuộc tính 'UsedRange' của đối tượng trang tính, không phải là ô cuối cùng của đối tượng Range mà nó được gọi. – TheAtomicOption

Các vấn đề liên quan