Skip to content

Commit 99c2ecd

Browse files
committed
fixed wrong excel column name calculation
old/wrong: ExcelColumnName(77) >> "C@" correct: "BZ"
1 parent f73946d commit 99c2ecd

2 files changed

Lines changed: 22 additions & 11 deletions

File tree

ExcelOps/ExcelCommons/ExcelCell.vb

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -201,11 +201,16 @@
201201
Get
202202
If columnIndex < 0 Then Throw New ArgumentOutOfRangeException(NameOf(columnIndex), "Must be a positive value")
203203
Dim x As Integer = columnIndex + 1
204-
If x >= 1 And x <= 26 Then
204+
If x <= 26 Then
205205
Return Chr(x + 64)
206-
Else
207-
Return ExcelColumnName(CType(((x - x Mod 26) / 26), Integer) - 1) & Chr((x Mod 26) + 64)
208206
End If
207+
Dim quotient As Integer = x \ 26
208+
Dim remainder As Integer = x Mod 26
209+
If remainder = 0 Then
210+
remainder = 26
211+
quotient -= 1
212+
End If
213+
Return ExcelColumnName(quotient - 1) & Chr(remainder + 64)
209214
End Get
210215
End Property
211216

ExcelOpsTest/DataTests/TextTableTest.vb

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -177,14 +177,20 @@ Namespace DataTests
177177
End Sub
178178

179179
<Test> Public Sub ExcelColumnName()
180-
Assert.AreEqual("A", TextTable.ExcelColumnName(0))
181-
Assert.AreEqual("Z", TextTable.ExcelColumnName(25))
182-
Assert.AreEqual("AA", TextTable.ExcelColumnName(26))
183-
Assert.AreEqual("XFD", TextTable.ExcelColumnName(16383))
184-
Assert.AreEqual("A", ExcelOps.ExcelCell.ExcelColumnName(0))
185-
Assert.AreEqual("Z", ExcelOps.ExcelCell.ExcelColumnName(25))
186-
Assert.AreEqual("AA", ExcelOps.ExcelCell.ExcelColumnName(26))
187-
Assert.AreEqual("XFD", ExcelOps.ExcelCell.ExcelColumnName(16383))
180+
Assert.Multiple(
181+
Sub()
182+
Assert.AreEqual("A", TextTable.ExcelColumnName(0))
183+
Assert.AreEqual("Z", TextTable.ExcelColumnName(25))
184+
Assert.AreEqual("AA", TextTable.ExcelColumnName(26))
185+
Assert.AreEqual("XFD", TextTable.ExcelColumnName(16383))
186+
Assert.AreEqual("A", ExcelOps.ExcelCell.ExcelColumnName(0))
187+
Assert.AreEqual("Z", ExcelOps.ExcelCell.ExcelColumnName(25))
188+
Assert.AreEqual("AA", ExcelOps.ExcelCell.ExcelColumnName(26))
189+
Assert.AreEqual("XFD", ExcelOps.ExcelCell.ExcelColumnName(16383))
190+
Assert.AreEqual("BY", ExcelCell.ExcelColumnName(76)) 'Not: "C@"
191+
Assert.AreEqual("BZ", ExcelCell.ExcelColumnName(77)) 'Not: "C@"
192+
Assert.AreEqual("CA", ExcelCell.ExcelColumnName(78)) 'Not: "C@"
193+
End Sub)
188194
End Sub
189195

190196
<Test> Public Sub CellAddress()

0 commit comments

Comments
 (0)