Excel 从CSV文件中获取数据,然后根据列出的不同日期进行比较

Excel 从CSV文件中获取数据,然后根据列出的不同日期进行比较,excel,powershell,csv,Excel,Powershell,Csv,我有一个CSV文件(),它按歌曲在电台播放的顺序列出歌曲。每次播放歌曲时都会列出它们,因此每天都会有一些重复的歌曲 我想做的是把它分成几天,找到从前一天开始播放的新歌 例如,星期一、星期二播放的歌曲与星期一播放的歌曲基本相同,但有些歌曲是星期一没有播放的新歌 我可以使用PowerShell执行此操作吗?在Excel中执行此操作相当简单 首先,你需要确保你的日子在它自己的专栏里 例如: A1 B1 C1 D1 E1

我有一个CSV文件(),它按歌曲在电台播放的顺序列出歌曲。每次播放歌曲时都会列出它们,因此每天都会有一些重复的歌曲

我想做的是把它分成几天,找到从前一天开始播放的新歌

例如,星期一、星期二播放的歌曲与星期一播放的歌曲基本相同,但有些歌曲是星期一没有播放的新歌


我可以使用PowerShell执行此操作吗?

在Excel中执行此操作相当简单

首先,你需要确保你的日子在它自己的专栏里

例如:

A1              B1      C1         D1        E1             F1      G1              H1
Date            Time    Artist     Song     Date            Time    Artist          Song
21/03/2014      11:26   Pharrell   Happy    20/03/2014  23:54   Clean Bandit    Rather Be
现在在I1中,有这个公式

=VLOOKUP(H1,D1:D94,1,FALSE)
你H专栏中的任何不适用都将是当天播放的新歌


对于更多的日子,您可以从下一列(J)开始播放第二天的歌曲,然后在第二天和第三天之间使用公式。

我认为这可以做到,但需要注意的是:

  • 编辑CSV文件并为列名添加顶行,例如日期、时间、艺术家、歌曲
  • 删除文件末尾的数千行空行,
    ,,
  • 此脚本将导入修改后的CSV,按天分组歌曲,然后显示当天播放的前一天未播放的歌曲

    注意。如果一首歌在周一播放,它将显示为一首新歌。如果周二没有播放,那么周三将播放,从周二开始,它将作为新歌再次播放

    注意。因为你提到的是按顺序播放的歌曲,如果“恶魔”作为新歌播放,那么当天晚些时候再次播放,它将作为新歌再次播放。输出是按顺序播放的,而不是按字母顺序,不尝试删除重复项

    注意。输入中有错误-间距/拼写错误,将艺术家姓名放入歌曲标题列,此脚本接受错误并在输出中产生错误。这不是魔法(tm)

    编辑

    已更改脚本以跟踪每天的歌曲,并打印艺术家姓名,此处:

    $songs = Import-Csv .\songs.csv
    
    $songsByDay = ($songs | Group-Object "Date" | Sort-Object -Property "Name")
    
    $previousDay = @()
    foreach ($day in $songsByDay) {
        write "----"
        write $day.Name
    
        foreach ($song in @($day.Group)) {
    
            if ($song.Song -notin $previousDay) {
                write "$($song.Artist) - $($song.Song)"
            }
        }
        $previousDay += @($day.Group | %{ $_.Song })
    }
    

    这太棒了,谢谢你,看起来会很好用的。是否有任何方法可以稍微修改脚本。与其只检查前一天,我们可以让它检查所有前一天吗?另外,我可以输出艺术家和歌曲名称吗?e、 g.所以输出应该是(艺术家-标题),而不仅仅是标题。@user3444441用更新的版本编辑了我的答案。再修改一次,如何将此结果输出到HTML文件?@user3444441不确定;使用
    ConvertTo HTML
    需要完全不同的重建,或者更可能是自己将HTML片段写入文件,例如,使其更像
    write“$song.Artist…”>>output.HTML
    我一直在努力解决的问题,您在哪里声明变量$previousDay,或者这是一个全局变量?
    $songs = Import-Csv .\songs.csv
    
    $songsByDay = ($songs | Group-Object "Date" | Sort-Object -Property "Name")
    
    $previousDay = @()
    foreach ($day in $songsByDay) {
        write "----"
        write $day.Name
    
        foreach ($song in @($day.Group)) {
    
            if ($song.Song -notin $previousDay) {
                write "$($song.Artist) - $($song.Song)"
            }
        }
        $previousDay += @($day.Group | %{ $_.Song })
    }