2015-08-12 17 views
5

Verileri kullanarak excel dosyalarına veri yazmaya çalışıyorum. Bu yüzden sayı sütununu excel mektup sütunlarına dönüştüren işlevim.Numaraları Excel Mektup Sütununa Dönüştürme vb.net

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 

İşlev, başka numaralarla birlikte çalışır. Örneğin

,

  • 1 => bir
  • 2 => B
  • ...
  • 26 => Z
  • 27 => AA
  • ...
  • 51 => AY
  • 52 => t (Ve işte burada başladı yanlış) AZ'YI iade etmek için varsayalım, ama geri döndü.

Hangi kısımda hata yaptığımı anlayamadım. Birisi bana yardımcı olabilir veya bana etc.net kullanarak mektup sütunları excel dönüştürmek için uygun bir işlevi kod nasıl gösterebilirim.

cevap

6

İstediğinizi yapmalı.

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 
+0

Teşekkür ederiz. Bu benim için çalışıyor. – bill

0

Mantıkta birkaç hata vardır, ikinci başka madde gerekli değildir ve işlemler sıfır tabanlı olmalıdır.

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 
+0

Teşekkürler. Sağladığınız kod, Z dönüşü 26 için çalışmaz. Ancak, AA – bill

+0

@bill teşekkürler. Kod düzeltildi. – wdosanjos

0

Bu Yan not 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 

kadar çalışacak, sen XLSX .Net aracılığıyla EPPlus ile dosyalarını doğrudan yazabilirsiniz. İsterseniz sütunlar için harf gösterimini kullanabilir veya sayıları kullanabilirsiniz.

+0

Teşekkürler. Ama ben daha fazla sayıları excel sütunlarına dönüştürme genel kuralını arıyorum – bill