将 non-standard 日期格式(例如“5 Sep”)转换为 dd/mm(例如 05/09)
Converting non-standard date format (e.g., "5 Sep") to dd/mm (e.g., 05/09)
我有一个 VB.NET 问题,我想将 Excel 电子表格的 header 行中的 non-standard 日期转换为不同的格式。具体来说,工作表带有一个字母数字字符串变量日期和月份(例如,“5 Sep”),但我需要将其转换为另一个字符串“05/09”。
不幸的是,我既没有创建这些工作表,也没有自己定义输出格式应该是什么——所以进退两难。任何帮助将不胜感激,因为到目前为止我已经浪费了两天时间!非常感谢。
Try
xlWorkBook = xlApp.Workbooks.Open(result2)
xlWorkSheet = xlWorkBook.Worksheets("Attendances")
xlWorkBook.Activate()
If xlWorkSheet.Cells(1, 1).Value = "Course" Then
xlWorkSheet.Rows(1 & ":" & 3).Delete()
xlWorkBook.Save()
For t As Integer = 6 To 75
If xlWorkSheet.Cells(1, t).Value <> "" And Len(xlWorkSheet.Cells(1, t).Value) > 25 Then
xlWorkSheet.Cells(1, t).Value = Microsoft.VisualBasic.Left(xlWorkSheet.Cells(1, t).Value, InStr(xlWorkSheet.Cells(1, t).Value, " 20") - 1)
End If
Next
xlWorkBook.Save()
xlWorkBook.Close()
End If
xlApp.Quit()
Catch ex As Exception
lblPath.Text = "Exception"
End Try
如果保留年份部分,可以使用DateTime.Parse函数。然后,您可以将生成的 DateTime 转换为仅包含所需部分的字符串。
For t As Integer = 6 To 75
Dim v = xlWorkSheet.Cells(1, t).Value
If (Not String.IsNullOrWhiteSpace(v)) AndAlso Len(v) > 25 Then
Dim sd = String.Join(" ", v.Split({" "c}, 4).Take(3))
Dim d = DateTime.Parse(sd, New Globalization.CultureInfo("en-GB"))
xlWorkSheet.Cells(1, t).Value = $"=""{d.ToString("dd/MM")}"""
End If
Next
该值的格式为 ="05/09"
,因此 Excel 不会将其格式化为日期,也不会进行除法。也许你不需要那么勉强。
我建议将原始数据保留在某个地方,也许可以隐藏该列,并使用新的列来显示。
也许这对你有帮助:
Private Function GetMonthNumber%(s$)
Select Case UCase(Trim(s$))
Case "JAN"
Return 1
Case "FEB"
Return 2
'...
Case Else
'bad argument
Return 0
End Select
End Function
我有一个 VB.NET 问题,我想将 Excel 电子表格的 header 行中的 non-standard 日期转换为不同的格式。具体来说,工作表带有一个字母数字字符串变量日期和月份(例如,“5 Sep”),但我需要将其转换为另一个字符串“05/09”。
不幸的是,我既没有创建这些工作表,也没有自己定义输出格式应该是什么——所以进退两难。任何帮助将不胜感激,因为到目前为止我已经浪费了两天时间!非常感谢。
Try
xlWorkBook = xlApp.Workbooks.Open(result2)
xlWorkSheet = xlWorkBook.Worksheets("Attendances")
xlWorkBook.Activate()
If xlWorkSheet.Cells(1, 1).Value = "Course" Then
xlWorkSheet.Rows(1 & ":" & 3).Delete()
xlWorkBook.Save()
For t As Integer = 6 To 75
If xlWorkSheet.Cells(1, t).Value <> "" And Len(xlWorkSheet.Cells(1, t).Value) > 25 Then
xlWorkSheet.Cells(1, t).Value = Microsoft.VisualBasic.Left(xlWorkSheet.Cells(1, t).Value, InStr(xlWorkSheet.Cells(1, t).Value, " 20") - 1)
End If
Next
xlWorkBook.Save()
xlWorkBook.Close()
End If
xlApp.Quit()
Catch ex As Exception
lblPath.Text = "Exception"
End Try
如果保留年份部分,可以使用DateTime.Parse函数。然后,您可以将生成的 DateTime 转换为仅包含所需部分的字符串。
For t As Integer = 6 To 75
Dim v = xlWorkSheet.Cells(1, t).Value
If (Not String.IsNullOrWhiteSpace(v)) AndAlso Len(v) > 25 Then
Dim sd = String.Join(" ", v.Split({" "c}, 4).Take(3))
Dim d = DateTime.Parse(sd, New Globalization.CultureInfo("en-GB"))
xlWorkSheet.Cells(1, t).Value = $"=""{d.ToString("dd/MM")}"""
End If
Next
该值的格式为 ="05/09"
,因此 Excel 不会将其格式化为日期,也不会进行除法。也许你不需要那么勉强。
我建议将原始数据保留在某个地方,也许可以隐藏该列,并使用新的列来显示。
也许这对你有帮助:
Private Function GetMonthNumber%(s$)
Select Case UCase(Trim(s$))
Case "JAN"
Return 1
Case "FEB"
Return 2
'...
Case Else
'bad argument
Return 0
End Select
End Function