更改多个 CSV 文件中的日期时间格式

更改多个 CSV 文件中的日期时间格式

我有多个具有以下结构的 csv 文件:

text, text, 01/27/2001 01:00:00 PM

我需要用这个日期时间格式更新所有 csv 文件:

text, text, 27-Jan-2001 13:00:00

有没有已知的智能/快速方法可以做到这一点?我尝试将它们导入 Excel,但这是一个单独的任务 [逐个复制/粘贴],所以我认为这不是最好的方法。也许是 Notepadd++ 中的某些功能 [找不到它]

谢谢,

答案1

这是一个 PowerShell 脚本,用于一步更新特定文件夹中的多个 CSV 文件。

ForEach ($file in Get-ChildItem "C:\myFolder" -filter "*.csv"){         
    Get-Content $file.Fullname | ForEach { 
        $arLine = $_ -split ","
        $date = [DateTime]$arLine[2]
        $arLine[2] = $date.ToString(" dd-MMM-yyyy HH:mm:ss")    
        [array]$arFile += $arLine -join ","
        } 
    $arFile | Out-File $file.Fullname
    clear-variable arFile           
    }

它能做什么

  1. 遍历给定文件夹中的每个文件并仅过滤 CSV 文件
  2. 读取每个 CSV 并循环遍历每一行
  3. 将每行拆分成一个数组。逗号是分隔符
  4. 将日期字符串转换01/27/2001 01:00:00 PM为 PowerShell 日期对象。
  5. 格式化日期对象并将其写回数组。[2]代表第三个值/列,因为我们从零开始计数
  6. 将当前行的所有值重新连接起来以获得单个字符串。使用逗号作为分隔符
  7. 将所有行添加到单个数组中,以便我们可以将它们一次性全部写入文件中
  8. 继续下一个 CSV 文件

答案2

最快的方法是在 VBA Excel 中编写一个宏,打开 csv 文件,更改格式并将其再次保存为 csv 文件。尝试以下操作:

  • 在 Excel 中录制宏正是这个任务csv 文件(开始录制、打开文件、进行格式化并再次保存文件)。
  • 使用SU 的这个答案遍历目录中的所有文件来执行你刚刚创建的任务。你需要Dir 函数和一个 While 循环。

因此你的代码将如下所示(未测试!):

Public Sub ChangeDates()
    Dim StrFile as String

    strFile = Dir("C:\Some\Location\Of\Your\Files\*.csv")
    While strFile <> ""
        # Append the stuff from the recorded macro here and adjust the filename
        # Probably something like:
        Workbooks.Open Filename:=strFile
        Columns("C:C").Select
        Selection.NumberFormat = "dd-mm-yyyy HH:mm:ss"  # or something else
        ActiveWorkbook.Save
        ActiveWorkbook.Close
        strFile = Dir
    End While
End Sub

相关内容