【问题标题】:Converting Numbers to Excel Letter Column vb.net将数字转换为 Excel 字母列 vb.net
【发布时间】:2015-08-12 20:14:24
【问题描述】:

我正在尝试使用 vb.net 将数据写入 excel 文件。所以我的函数将数字列转换为 excel 字母列。

Public Function ConvertToLetter(ByRef iCol As Integer) As String

    Dim Reminder_Part As Integer = iCol Mod 26
    Dim Integer_Part As Integer = Int(iCol / 26)

    If Integer_Part = 0 Then
        ConvertToLetter = Chr(Reminder_Part + 64)
    ElseIf Integer_Part > 0 And Reminder_Part <> 0 Then
        ConvertToLetter = Chr(Integer_Part + 64) + Chr(Reminder_Part + 64)
    ElseIf Integer_Part > 0 And Reminder_Part = 0 Then
        ConvertToLetter = Chr(Integer_Part * 26 + 64)
    End If


End Function

该函数适用于任何其他数字。

例如,

  • 1 => 一个
  • 2 => 乙
  • ...
  • 26 => Z
  • 27 => AA
  • ...
  • 51 => 是的
  • 52 => t(这是它开始出错的时候)假设返回 AZ,但它返回了 t。

我无法弄清楚我犯了哪一部分错误。有人可以帮助我或向我展示如何使用 vb.net 编写将数字转换为 excel 字母列的正确函数。

【问题讨论】:

    标签: vb.net excel chr


    【解决方案1】:

    这应该做你想做的。

    Private Function GetExcelColumnName(columnNumber As Integer) As String
        Dim dividend As Integer = columnNumber
        Dim columnName As String = String.Empty
        Dim modulo As Integer
    
        While dividend > 0
           modulo = (dividend - 1) Mod 26
           columnName = Convert.ToChar(65 + modulo).ToString() & columnName
           dividend = CInt((dividend - modulo) / 26)
       End While
    
       Return columnName
    End Function
    

    【讨论】:

      【解决方案2】:

      这将工作到 52。

      Public Function ConvertToLetterA(ByRef iCol As Integer) As String
      
              Select Case iCol
                  Case 1 To 26
                      Return Chr(iCol + 64)
      
                  Case 27 To 52
                      Return "A" & Chr(iCol - 26 + 64)
      
              End Select
      
      End Function
      

      附带说明,您可以通过 .Net 直接使用 EPPlus 编写 XLSX 文件。如果您愿意,可以对列使用字母表示法,也可以使用数字。

      【讨论】:

      • 谢谢。但我正在寻找将数字转换为 excel 列的更一般规则
      【解决方案3】:

      逻辑上有几个缺陷,第二个 else 子句不是必需的,操作应该从零开始。

      Public Function ConvertToLetter(ByRef iCol As Integer) As String
          Dim col As Integer = iCol - 1
          Dim Reminder_Part As Integer = col Mod 26
          Dim Integer_Part As Integer = Int(col / 26)
      
          If Integer_Part = 0 Then
              ConvertToLetter = Chr(Reminder_Part + 65)
          Else
              ConvertToLetter = Chr(Integer_Part + 64) + Chr(Reminder_Part + 65)
          End If
      
      
      End Function
      

      【讨论】:

      • 谢谢。您提供的代码不适用于应该返回 Z 的 26。但它返回 AA
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多