7

.Net プロジェクトで EPPlus を使用して、一部のデータを Excel ワークシートに出力しています。

Columns 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でこれを行うためのより良い/より良い方法があることを願っています. ご意見/ご提案はありますか?

ありがとう!!

4

2 に答える 2

4

これに来る人を助けるための私自身の質問への答えとして、列番号をオブジェクト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
于 2013-03-12T19:45:15.397 に答える
2

@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;
}
于 2013-04-09T09:12:47.667 に答える