EPPlus – 通过索引而不是字母表示法处理多个列

我在.Net项目中使用EPPlus将一些数据输出到Excel工作表中。

假设我想用特定的格式来格式化列EG。 使用EPPlus,我知道我可以这样做:

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

现在,我想知道,假设我想要做同样的事情,但是通过索引号而不是字母表示来引用列 – 理论上看起来像这样:

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

现在,我知道,如果我做了这样的事情,它会工作:

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

但是我希望在EPPlus中有一个更好/更好的方法来做到这一点。 任何想法/build议?

谢谢!!

作为我自己的问题的答案,以帮助任何人来这个,我结束了创build我自己的扩展方法Columns ,将列号转换成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 

我重新编写了@John Bustos在c#中给出的答案,然后意识到我想使用列而不是单元格范围。 John的方法在下面的代码中被重命名为“GetColumnCells”。

 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; }