Làm thế nào tôi có thể lấy địa chỉ di động từ excel cho một hàng và cột số ví dụLàm thế nào tôi có thể lấy địa chỉ di động từ excel
dòng 2 và col 3 nên trở C2 ... Xin vui lòng giúp
Làm thế nào tôi có thể lấy địa chỉ di động từ excel cho một hàng và cột số ví dụLàm thế nào tôi có thể lấy địa chỉ di động từ excel
dòng 2 và col 3 nên trở C2 ... Xin vui lòng giúp
Tôi không phải là người dùng lớn của VSTO C# - tôi thường chọn VBA. Tuy nhiên, cặp chức năng sau đây có thể hữu ích cho bạn. Không chắc chắn nếu chúng có thể được sắp xếp hợp lý hơn nữa:
public string RangeAddress(Excel.Range rng)
{
return rng.get_AddressLocal(false, false, Excel.XlReferenceStyle.xlA1,
missing, missing);
}
public string CellAddress(Excel.Worksheet sht, int row, int col)
{
return RangeAddress(sht.Cells[row, col]);
}
RangeAddress
sẽ lấy bất kỳ phạm vi Excel nào và đưa bạn trở lại địa chỉ. Nếu bạn muốn kiểu tuyệt đối (với các ký hiệu đô la, ví dụ: $ C $ 3) thì bạn phải thay đổi hai thông số đầu tiên của lệnh gọi get_AddressLocal thành true, true.
Để lấy địa chỉ ô từ cặp hàng/col, bạn có thể sử dụng CellAddress
. Nó cần một tờ để có được địa chỉ. Tuy nhiên, bạn có thể hoán đổi trong (Excel.Worksheet)ActiveSheet
nếu bạn không muốn cung cấp một trang tính (điều này có thể hoặc có thể không hoạt động, tùy thuộc vào những gì bạn đã mở trong phiên VSTO của bạn).
Bạn bằng cách nào đó có thể gọi các công thức hoặc hàm gốc của Excel trùng lặp chức năng của chúng? Nó sẽ chỉ
=CELL("address")
public string GetCellAddress(int row, int col) {
return (char)((int)'A' + (row - 1)) + col.ToString();
}
Cái này (chưa được kiểm tra) cũng nên làm việc với các địa chỉ cột trên đó là hơn 26:
using System.Text;
public string GetCellAddress(int row, int col) {
StringBuilder sb = new StringBuilder();
col--;
do {
sb.Insert(0, (char)('A' + (col % 26)));
col /= 26;
} while (col > 0);
sb.Append(row);
return sb.ToString();
}
Corrected: địa chỉ cột là ngược
Điều này sẽ trả về BA1 cho col 27 thay vì AA1. –
tế bào (2, 3) .Thêm
Chỉ cần một sự cải tiến, các col-- là tại địa điểm sai
static string GetCellAddress(int row, int col)
{
StringBuilder sb = new StringBuilder();
do
{
col--;
sb.Insert(0, (char)('A' + (col % 26)));
col /= 26;
} while (col > 0);
sb.Append(row);
return sb.ToString();
}
Tôi đang sử dụng không dựa trên hàng và cột chỉ mục. Vì vậy, tôi đã phải thích ứng với mã của câu trả lời trước cho sau đây. Mất một số thử và sai để có được quyền này cho tất cả các địa chỉ có thể có. I.E. A1, Z2, AA2, ZZ10, ...
public string GetAddress(int col, int row)
{
col++;
StringBuilder sb = new StringBuilder();
do
{
col--;
sb.Insert(0, (char)('A' + (col % 26)));
col /= 26;
} while (col > 0);
sb.Append(row + 1);
return sb.ToString();
}
Xem thêm: http://stackoverflow.com/questions/181596/how-to-convert-a-column-number-eg-127-into- an-excel-column-eg-aa – Graham