2013-03-12 27 views
6

Tôi đang sử dụng EPPlus trong dự án .Net để xuất một số dữ liệu vào trang tính Excel.EPPlus - Làm việc với nhiều cột theo chỉ mục thay vì Biểu diễn theo thứ tự chữ cái

Giả sử tôi muốn định dạng Cột E-G với định dạng cụ thể. Sử dụng EPPlus, tôi biết tôi có thể làm điều đó như sau:

wks.Cells("E:G").Style.Numberformat.Format = ... 

Bây giờ, tôi đang tự hỏi, giả sử tôi muốn làm như vậy, nhưng bằng cách tham khảo các cột bằng số chỉ mục của họ chứ không phải là đại diện chữ cái của họ - Trong lý thuyết một cái gì đó trông như thế này:

wks.Columns("5:7").Style.Numberformat.Format = ... 

Bây giờ, tôi biết rằng nó sẽ làm việc nếu tôi đã làm một cái gì đó như thế này:

wks.Cells(1,5,wks.Dimension.End.Row,7).Style.Numberformat.Format = ... 

Nhưng tôi hy vọng có một cách tốt hơn/đẹp hơn để làm điều này trong EPPlus. Bất kỳ suy nghĩ/đề nghị?

Cảm ơn !!

+0

Bạn đã cân nhắc tạo một enum để chuyển đổi giữa các chữ cái và số? –

+0

Tôi thực sự có một chức năng làm điều đó, tôi chỉ tự hỏi nếu đó là cách duy nhất –

+1

Tôi đã làm việc với EPPlus một số lượng vừa phải và tôi chưa bao giờ thấy bất cứ điều gì như thế, nhưng đó là không đảm bảo nó không tồn tại. Hầu hết những gì tôi học được abiout nó, tôi nhận được từ tải mẫu mã ở đây: http://epplus.codeplex.com/releases/view/89923 –

Trả lời

4

Như một câu trả lời cho câu hỏi của riêng tôi vì lợi ích của việc giúp đỡ bất cứ ai đến bởi điều này, tôi đã kết thúc tạo riêng Phương pháp mở rộng của tôi Columns rằng sẽ chuyển đổi số cột vào một đối tượng ExcelRange:

''' <summary> 
''' Allows you to reference a column by its numeric index rather than its alphabetic representation 
''' </summary> 
''' <param name="colNum">The index of the column to reference on in the worksheet.</param> 
<System.Runtime.CompilerServices.Extension()> _ 
Public Function Columns(ByVal wks As ExcelWorksheet, ByVal colNum As Integer) As ExcelRange 
    Dim ColName As String = ReturnColumnName(colNum) 

    Return wks.Cells(ColName & ":" & ColName) 
End Function 


''' <summary> 
''' Allows you to reference a column by its numeric index rather than its alphabetic representation 
''' </summary> 
''' <param name="StartColNum">The start col num.</param> 
''' <param name="EndColNum">The end col num.</param> 
<System.Runtime.CompilerServices.Extension()> _ 
Public Function Columns(ByVal wks As ExcelWorksheet, ByVal StartColNum As Integer, ByVal EndColNum As Integer) As ExcelRange 
    Dim StartColName As String = ReturnColumnName(StartColNum) 
    Dim EndColName As String = ReturnColumnName(EndColNum) 

    Return wks.Cells(StartColName & ":" & EndColName) 
End Function 



Private Function ReturnColumnName(ByVal colNum As Integer) As String 
    Dim d As Integer 
    Dim m As Integer 
    Dim Name As String 

    d = colNum 
    Name = "" 

    Do While (d > 0) 
     m = (d - 1) Mod 26 
     Name = Chr(65 + m) + Name 
     d = Int((d - m)/26) 
    Loop 

    Return Name 
End Function 
1

tôi viết lại câu trả lời được đưa ra bởi @ John Bustos trong C# và sau đó nhận ra tôi muốn làm việc với các cột chính họ chứ không phải là một phạm vi ô. Phương thức của John đã được đổi tên thành 'GetColumnCells' trong mã bên dưới.

public static List<ExcelColumn> GetColumns(ExcelWorksheet wks, int startColNum, int endColNum) { 
    int d = startColNum; 
    List<ExcelColumn> cols = new List<ExcelColumn>(); 

    while (d <= endColNum) { 
     cols.Add(wks.Column(d)); 
     d++; 
    } 

    return cols; 
} 

public static ExcelRange GetColumnCells(ExcelWorksheet wks, int startColNum, int endColNum) { 
    string startColName = GetColumnName(startColNum); 
    string endColName = GetColumnName(endColNum); 

    return wks.Cells[startColName + ":" + endColName]; 
} 

public static string GetColumnName(int colNum) { 
    int d, m; 
    string name = String.Empty; 

    d = colNum; 
    while (d > 0) { 
     m = (d - 1) % 26; 
     name = ((char)(65 + m)) + name; 
     d = (d - m)/26; 
    } 

    return name; 
} 
Các vấn đề liên quan