【问题标题】:Formatting a column to use a phone number format in EPPlus在 EPPlus 中格式化列以使用电话号码格式
【发布时间】:2014-09-21 19:06:19
【问题描述】:

我将电话号码存储为一串数字,例如:6028035615,但在查询时将它们转换为整数。我想以正确的电话号码格式格式化单元格中的数据,例如 Excel 中的 (602) 803-5615。但是我该如何声明我想要使用的格式类型呢? 如果我使用:

  objData.Columns.Add("HPhone", GetType(Integer))
  wshUS.Column(i).Width = 15 ' PhoneH
  wshUS.Column(i).Style.Numberformat.Format = "###-###-####"

 wshUS.Column(i).Style.Numberformat.Format = "(###) ###-####"

空白单元格显示为 -- 在前一种情况下或 ()- 在后一种情况下。 是否有一种格式类型可以放在 = 之后以像 Excel 那样获取电话号码? 我将如何使用条件格式来克服这个问题? 我正在用 VB.NET 编写网页代码隐藏。

【问题讨论】:

    标签: asp.net excel vba vb.net epplus


    【解决方案1】:

    objData 是什么?一般来说,您不需要在工作表中添加列 - 当您第一次引用单元格时,EPPlus 会自动执行此操作。我的 VB 有点生锈,但这对我来说很好:

    <TestMethod> _
    Public Sub PhoneNumberFormatTest()
        Dim file = New FileInfo("c:\temp\temp.xlsx")
        If file.Exists Then
            file.Delete()
        End If
    
        Dim pck = New ExcelPackage(file)
        Dim workbook = pck.Workbook
        Dim worksheet = workbook.Worksheets.Add("newsheet")
    
        Const number As String = "6028035615"
        Const format As String = "(###) ###-####"
    
        Dim startcell = worksheet.Cells(1, 1)
    
        startcell.Value = Int64.Parse(number)
        startcell.Offset(1, 0).Value = Int64.Parse(number) + 1
    
        worksheet.Column(1).Width = 15
        worksheet.Column(1).Style.Numberformat.Format = format
    
        pck.Save()
    
    End Sub
    

    我下载了 EPPlus 3 (stable) 的源代码解决方案并将其作为单元测试运行...


    编辑:添加字符串操作:

    <TestMethod> _
    Public Sub PhoneNumberFormatTest()
        Dim file = New FileInfo("c:\temp\temp.xlsx")
        If file.Exists Then
            file.Delete()
        End If
    
        Dim pck = New ExcelPackage(file)
        Dim workbook = pck.Workbook
        Dim worksheet = workbook.Worksheets.Add("newsheet")
    
        Const number As String = "6028035615"
        Const format As String = "(###) ###-####"
    
        Dim startcell = worksheet.Cells(1, 1)
    
        'Directly to numbers with parse
        startcell.Value = Int64.Parse(number)
        startcell.Offset(1, 0).Value = Int64.Parse(number) + 1
    
        'OR as a string back to a number.
        Dim stringcell = startcell.Offset(2, 0)
        stringcell.Value = number
        stringcell.Value = Int64.Parse(DirectCast(stringcell.Value, String))
        stringcell.Style.Numberformat.Format = "(###) ###-####"
    
        'As string - does not work as number
        stringcell.Offset(0, 1).Value = number
        stringcell.Offset(0, 1).Style.Numberformat.Format = "(###) ###-####"
    
        worksheet.Column(1).Width = 15
        worksheet.Column(1).Style.Numberformat.Format = format
    
        pck.Save()
    
    End Sub
    

    【讨论】:

    • 可以忽略objData部分;我意识到现在通过代码时我不需要那个。
    • 可以忽略objData部分;我意识到现在通过代码时我不需要那个。但密切相关的是我正在使用数据表'wshUS.Cells("A1").LoadFromDataTable(objTable, True)'将数据加载到工作表中,因此您的 Parse 建议似乎不适用于此处。电话号码的数据被读取为整数,因此它已经是一个数字。在您的示例中,如果数字字符串为空,单元格中会产生什么?
    • 我明白你的意思。请参阅我的编辑。我不认为作为字符串会起作用,因为excel会这样看待它(你在单元格角落得到的那个小错误三角形)。我认为您唯一的选择是在它转储后使用循环将其转换为一个数字。或者如果可能的话,在数据表中更改它。
    猜你喜欢
    • 1970-01-01
    • 2015-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    相关资源
    最近更新 更多