Tôi đang cố gắng lấy hàng cuối cùng của một bảng tính excel bằng cách sử dụng Thư viện Microsoft.interop.Excel và C#. Tôi muốn làm điều đó, bởi vì tôi bị tính phí với lặp qua tất cả các hồ sơ của một bảng tính excel và thực hiện một số loại hoạt động trên chúng. Cụ thể, tôi cần số thực tế của hàng cuối cùng, vì tôi sẽ ném số này vào một hàm. Bất cứ ai có bất kỳ ý tưởng làm thế nào để làm điều đó?Lập trình nhận hàng excel được điền cuối cùng bằng cách sử dụng C#
Trả lời
cách Couple,
using Excel = Microsoft.Office.Interop.Excel;
Excel.ApplicationClass excel = new Excel.ApplicationClass();
Excel.Application app = excel.Application;
Excel.Range all = app.get_Range("A1:H10", Type.Missing);
HOẶC
Excel.Range last = sheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
Excel.Range range = sheet.get_Range("A1", last);
int lastUsedRow = last.Row;
int lastUsedColumn = last.Column;
Đây là sự cố thường gặp trong Excel.
Dưới đây là một số mã C#:
// Find the last real row
nInLastRow = oSheet.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;
// Find the last real column
nInLastCol = oSheet.Cells.Find("*", System.Reflection.Missing.Value, System.Reflection.Missing.Value,System.Reflection.Missing.Value, Excel.XlSearchOrder.xlByColumns,Excel.XlSearchDirection.xlPrevious, false,System.Reflection.Missing.Value,System.Reflection.Missing.Value).Column;
tìm thấy here
hoặc sử dụng SpecialCells
Excel.Range last = sheet.Cells.SpecialCells(Excel.XlCellType.xlCellTypeLastCell, Type.Missing);
Excel.Range range = sheet.get_Range("A1", last);
[EDIT] Hiện chủ đề tương tự:
Điều này đang hoạt động, tôi đang cố gắng để có được hàng chính xác. – NWessel
Đối với câu hỏi liên quan đến mô hình đối tượng Excel, nó thường dễ dàng hơn để thử nó ra trong VBA đầu tiên, sau đó được dịch ra là C# là khá tầm thường.
Trong trường hợp này một cách để làm điều đó trong VBA là:
Worksheet.UsedRange.Row + Worksheet.UsedRange.Rows.Count - 1
Pryank's answer là những gì làm việc gần gũi nhất đối với tôi. Tôi đã thêm một chút vào cuối (.Row
) vì vậy tôi không chỉ trả về một số range
mà còn là integer
.
int lastRow = wkSheet.Cells.SpecialCells(XlCellType.xlCellTypeLastCell, Type.Missing).Row;
Cách duy nhất tôi có thể làm cho nó làm việc trong tất cả các kịch bản (trừ tấm bảo vệ):
Nó hỗ trợ:
quét Hidden Row/Cột
bỏ qua ô được định dạng không có dữ liệu/công thức
Code:
// Unhide All Cells and clear formats
sheet.Columns.ClearFormats();
sheet.Rows.ClearFormats();
// Detect Last used Row - Ignore cells that contains formulas that result in blank values
int lastRowIgnoreFormulas = sheet.Cells.Find(
"*",
System.Reflection.Missing.Value,
InteropExcel.XlFindLookIn.xlValues,
InteropExcel.XlLookAt.xlWhole,
InteropExcel.XlSearchOrder.xlByRows,
InteropExcel.XlSearchDirection.xlPrevious,
false,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value).Row;
// Detect Last Used Column - Ignore cells that contains formulas that result in blank values
int lastColIgnoreFormulas = sheet.Cells.Find(
"*",
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value,
InteropExcel.XlSearchOrder.xlByColumns,
InteropExcel.XlSearchDirection.xlPrevious,
false,
System.Reflection.Missing.Value,
System.Reflection.Missing.Value).Column;
// Detect Last used Row/Column - Including cells that contains formulas that result in blank values
int lastColIncludeFormulas = sheet.UsedRange.Columns.Count;
int lastColIncludeFormulas = sheet.UsedRange.Rows.Count;
Câu trả lời rõ ràng (và câu trả lời duy nhất có hiệu quả đối với tôi). –
Các ActiveSheet.UsedRange.Value trả về một chiều mảng 2 đối tượng của [hàng, cột]. Kiểm tra độ dài của cả hai chiều sẽ cung cấp chỉ mục LastRow và chỉ mục LastColumn. Ví dụ bên dưới đang sử dụng C#.
Excel.Worksheet activeSheet;
\t \t Excel.Range activeRange;
public virtual object[,] RangeArray {
\t \t \t get { return ActiveRange.Value; }
\t \t }
\t \t public virtual int ColumnCount {
\t \t \t get { return RangeArray.GetLength(1); }
\t \t }
\t \t public virtual int RowCount {
\t \t \t get { return RangeArray.GetLength(0); }
\t \t }
\t \t public virtual int LastRow {
\t \t \t get { return RowCount; }
\t \t }
Vấn đề này thậm chí còn tồi tệ hơn khi có thể ô trống. Nhưng bạn phải đọc một hàng ngay cả khi chỉ có một giá trị được lấp đầy. Có thể mất một thời gian khi có rất nhiều ô không được lấp đầy nhưng nếu đầu vào gần đúng thì nó khá nhanh.
Giải pháp của tôi bỏ qua hàng hoàn toàn trống rỗng và trả về số cột dài nhất của dãy:
private static int GetLastRow(Worksheet worksheet)
{
int lastUsedRow = 1;
Range range = worksheet.UsedRange;
for (int i = 1; i < range.Columns.Count; i++)
{
int lastRow = range.Rows.Count;
for (int j = range.Rows.Count; j > 0; j--)
{
if (lastUsedRow < lastRow)
{
lastRow = j;
if (!String.IsNullOrWhiteSpace(Convert.ToString((worksheet.Cells[j, i] as Range).Value)))
{
if (lastUsedRow < lastRow)
lastUsedRow = lastRow;
if (lastUsedRow == range.Rows.Count)
return lastUsedRow - 1;
break;
}
}
else
break;
}
}
return lastUsedRow;
}
Đối với những người sử dụng phương pháp SpecialCells (Tôi không chắc chắn về những người khác), Xin lưu ý trong trường hợp ô cuối cùng của bạn là sáp nhập, bạn sẽ không thể lấy số hàng và cột cuối cùng bằng cách sử dụng Range.Row và Range.Column để nhận hàng và cột cuối cùng dưới dạng số. trước tiên bạn cần phải Hủy hợp nhất phạm vi của bạn và sau đó lại nhận được ô cuối cùng. Tôi mất rất nhiều chi phí.
private int[] GetLastRowCol(Ex.Worksheet ws)
{
Ex.Range last = ws.Cells.SpecialCells(Ex.XlCellType.xlCellTypeLastCell, Type.Missing);
bool isMerged = (bool)last.MergeCells;
if (isMerged)
{
last.UnMerge();
last = ws.Cells.SpecialCells(Ex.XlCellType.xlCellTypeLastCell, Type.Missing);
}
return new int[2] { last.Row, last.Column };
}
- 1. Tìm hàng cuối cùng trong bảng tính Excel
- 2. Nhận ô không trống cuối cùng trong cột Excel
- 3. PLSQL JDBC: Cách nhận ID hàng cuối cùng?
- 4. In Excel bằng cách sử dụng Interop
- 5. Nhận ô cuối cùng (cột, hàng) của đối tượng phạm vi Excel
- 6. Cách lấy giá trị từ hàng được chèn cuối cùng?
- 7. Sử dụng lập trình "lập trình C" (Tìm hiểu theo cách thức C)
- 8. Nhận lỗi Javascript cuối cùng
- 9. Lập trình tạo tệp Excel trong C++
- 10. XSLT nhận được yếu tố cuối cùng
- 11. Làm cách nào để lấy id được chèn cuối cùng bằng cách sử dụng api JS?
- 12. zend framework nhận id chèn cuối cùng của chèn nhiều hàng bằng cách thực hiện
- 13. Làm cách nào tôi có thể nhận Phạm vi các hàng được lọc bằng cách sử dụng Excel Interop?
- 14. Nhận giá trị chèn vào cuối cùng từ MySQL bằng cách sử dụng SQLAlchemy
- 15. Lưu Bảng tính Excel bằng cách sử dụng Interop C#
- 16. Lấy hàng cuối cùng của bảng bằng jQuery?
- 17. Jquery Nhận hàng cuối cùng của bảng trong yếu tố cuối cùng trong một loạt
- 18. Cách nhấn nút Windows bằng lập trình bằng cách sử dụng C# SendKeys
- 19. Làm thế nào để lấy lại nút cuối cùng bằng cách sử dụng XPath trong C#?
- 20. Chuyển đổi ngày Excel bằng cách sử dụng PHP Excel
- 21. Cách lấy chỉ mục cột cuối cùng đọc tệp excel?
- 22. Cách thức lập trình bằng cách sử dụng F #
- 23. Nhận mã quá trình ứng dụng excel
- 24. Lập trình ListItemVersion bằng cách sử dụng mô hình đối tượng khách hàng SharePoint 2010
- 25. Làm thế nào để có được ngày cuối cùng của tháng bằng cách sử dụng php
- 26. hàng xóa từ một file excel sử dụng C#
- 27. Làm cách nào để tìm hàng cuối cùng chứa dữ liệu trong trang tính Excel bằng macro?
- 28. Lập trình (C#) chuyển đổi Excel sang hình ảnh
- 29. Lấy id được chèn cuối cùng cho nhiều hàng
- 30. Làm cách nào để chọn hàng con cuối cùng của mối quan hệ cha/con bằng cách sử dụng SQL
Không chắc chắn cách thức tùy chọn đầu tiên sẽ hoạt động ... Nhưng tùy chọn thứ hai có vẻ thú vị. Làm thế nào tôi có thể dịch nó thành Giá trị int? – SoftwareSavant
Tôi đã chỉnh sửa mã của mình, tôi chưa thử nghiệm mã đó nhưng hy vọng sẽ cung cấp cho bạn ý tưởng về những gì bạn muốn đạt được. – Priyank
Câu trả lời này cung cấp cho bạn ô cuối cùng trong UsedRange của trang tính. Vấn đề, mặc dù, là UsedRange không bao giờ hợp đồng. Nếu bạn có một giá trị trong A1 và AA100, sau đó xóa nội dung của AA100, UsedRange sẽ vẫn là A1: AA100. AA100 vẫn sẽ được coi là ô cuối cùng. – CtrlDot