我有大约 100 个 CSV 文件,我想将它们合并到一个 Excel 电子表格中(所有内容都在一个选项卡中,而不是在单独的选项卡中)。这些 CSV 文件的格式相同:每个文件包含 4,000 行和 2 列(带标题),大小约为 60 KB。
到目前为止,我发现的所有解决方案都将下一个 CSV 附加到活动选项卡最后一行的末尾。我还没有看到可以将新 CSV 附加到最后一列右侧的列的解决方案。
这里有一些例子。
DOS复制方法:copy *.csv merge.txt
此解决方案. (VBA 脚本。)
使用 Excel 的数据>新查询>来自文件>来自文件夹(Excel 2013)。
互联网上还有使用 Windows Powershell 脚本合并 CSV 文件的示例。
以上所有内容都会创建一个包含约 400,000 行数据的 Excel 电子表格,这对我来说毫无用处。
我很感激能得到解决此问题的建议。谢谢!
编辑。找到了一个简单的解决方案:使用 r 的 cbind() 将数据合并到数据框中,然后将其写入 csv。整个过程大约需要 3 秒。适合这项工作的工具!
感谢大家的贡献。干杯,
--tcollar
答案1
不确定“原生” Windows 10,但如果您安装了适用于 Linux 的 Windows 子系统,则可以使用 UNIXpaste
命令,该命令应该按照您要求的方式按列连接文件。
答案2
使用第三个选项:“使用 Excel 的数据 > 新查询 > 来自文件 > 来自文件夹 (Excel 2013)”
单击该transform data
选项,将打开 Power Query 编辑器。它将显示文件列表。
单击列标题中的按钮content
可创建一个函数,该函数可以在附加每个单独的 CSV 文件之前对其进行转换。
选择正确的表格或工作表并在transform sample file
函数中执行以下操作。
- 使用“使用标题作为第一行”将列名插入第一行
- 转置表
然后在调用该函数的查询中附加转置的 CSV 文件。只需将transpose
表恢复为原始形状并提升即可the first row to headers
。
答案3
以下是按列合并 csv 文件的 r 代码:
setwd("C:/mycsvdir")
filenames <- list.files(full.name=TRUE)
## read csv, skipping the first two rows of every file
Everything <- lapply(filenames, function(i){read.csv(i, header=TRUE, skip=2)}
combined.df <- do.call(cbind.data.frame, Everything)
write.csv(combined.df, file = "combined.csv", row.names=FALSE)
如果您想按行合并 csv 文件,只需替换cbind
为rbind
。
编辑:关于合并的顺序:我的 csv 文件命名为mycsv 001.csv
、mycsv 002.csv
等。它们按照该顺序被读取和合并,这对我的目的来说非常有用。