Asp.net 在EPPlus中格式化列以使用电话号码格式

Asp.net 在EPPlus中格式化列以使用电话号码格式,asp.net,excel,vba,vb.net,epplus,Asp.net,Excel,Vba,Vb.net,Epplus,我将电话号码存储为一串数字,例如:6028035615,但在查询时将其转换为整数。我想将手机中的数据格式化为正确的电话号码格式,如Excel中的(602)803-5615。但是我如何声明我想要使用的格式类型呢? 如果我使用: objData.Columns.Add("HPhone", GetType(Integer)) wshUS.Column(i).Width = 15 ' PhoneH wshUS.Column(i).Style.Numberformat.Format = "##

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

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

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

什么是
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
_
公用子电话号码格式集()
Dim文件=新文件信息(“c:\temp\temp.xlsx”)
如果文件
file.Delete()
如果结束
Dim pck=新的ExcelPackage(文件)
Dim workbook=pck.workbook
Dim工作表=工作簿.工作表.添加(“新闻表”)
常量编号为String=“6028035615”
常量格式为String=“(####)###-###”
Dim startcell=工作表单元格(1,1)
startcell.Value=Int64.Parse(数字)
startcell.Offset(1,0).Value=Int64.Parse(number)+1
工作表。列(1)。宽度=15
工作表.列(1).Style.Numberformat.Format=格式
pck.Save()
端接头
我下载了EPPlus 3(稳定版)的源代码解决方案,并将其作为单元测试运行


编辑:添加字符串操作:

<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
_
公用子电话号码格式集()
Dim文件=新文件信息(“c:\temp\temp.xlsx”)
如果文件
file.Delete()
如果结束
Dim pck=新的ExcelPackage(文件)
Dim workbook=pck.workbook
Dim工作表=工作簿.工作表.添加(“新闻表”)
常量编号为String=“6028035615”
常量格式为String=“(####)###-###”
Dim startcell=工作表单元格(1,1)
'使用parse直接指向数字
startcell.Value=Int64.Parse(数字)
startcell.Offset(1,0).Value=Int64.Parse(number)+1
'或作为返回数字的字符串。
Dim stringcell=起始单元格偏移量(2,0)
stringcell.Value=number
stringcell.Value=Int64.Parse(DirectCast(stringcell.Value,String))
stringcell.Style.Numberformat.Format=“(####)、###-###”
'作为字符串-不作为数字使用
stringcell.Offset(0,1)。值=数字
stringcell.Offset(0,1).Style.Numberformat.Format=“(#######-##”
工作表。列(1)。宽度=15
工作表.列(1).Style.Numberformat.Format=格式
pck.Save()
端接头

您可以忽略objData部分;我意识到当我现在浏览代码时,我不需要它;我意识到当我现在读代码的时候我不需要它。但与此密切相关的是,我正在使用datatable“wshUS.Cells(“A1”).LoadFromDataTable(objTable,True)”将数据加载到工作表中,因此您的解析建议似乎不适用于这里。电话号码的数据被读取为整数,因此它已经是一个数字。在您的示例中,如果数字字符串为空,单元格中会产生什么?我明白您的意思。请参阅我的编辑。我不认为使用字符串是可行的,因为excel会将其视为字符串(单元格角落中的小错误三角形)。我认为您唯一的选择是在它转储后使用循环将其转换为一个数字。或者在数据表中更改它(如果可能)。
<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