我的批处理文件应该有啥代码将多个 CSV 文件合并到一个新的单个 Excel 工作簿中,但每个 CSV 文件都有自己的工作表?
Posted
技术标签:
【中文标题】我的批处理文件应该有啥代码将多个 CSV 文件合并到一个新的单个 Excel 工作簿中,但每个 CSV 文件都有自己的工作表?【英文标题】:What code should my batch file have to merge multiple CSV files into a new single Excel workbook, but each CSV file to have it's own sheet?我的批处理文件应该有什么代码将多个 CSV 文件合并到一个新的单个 Excel 工作簿中,但每个 CSV 文件都有自己的工作表? 【发布时间】:2020-10-02 15:38:00 【问题描述】:我正在尝试获取多个 CSV 文件并将它们合并到一个 Excel 工作簿中,但将每个 CSV 文件作为自己的工作表保留在同一个工作簿中((1)一个 Excel 文件/工作簿,(3)三个单独的工作表)。我正在使用批处理文件来执行此操作。我正在编写的批处理文件运行我为下载 CSV 文件而编写的 python 脚本,那么为批处理文件创建另一个 python 脚本以运行以创建这个单张、多页工作簿会更容易吗?关于哪个更容易以及如何完成的任何想法?现在感觉就像一团糟。
我尝试将 3 个 CSV 文件(它们包含相同的标题,每个文件的数据值不同)合并到一个 CSV 文件中,但它只是将所有数据显示在一张接一张的单张纸上,没有任何标签告诉您您正在查看另一个 CSV 文件。
(我刚刚学习编码(大约一个月前开始),注释掉的部分是我尝试过但没有用的东西)
::copy .\Output\*.csv .\Output\merged.csv
::"CLE_*"+"TOL_*"+"BUF_*" merged.csv
for /f "tokens=1-5 delims=/ " %%d in ("%date%") do set datevar=%%e-%%f-%%g
::for %%a in (*.xlsx) do start "" "%%a"
for %%a in (./Output/*%datevar%.csv) do start "C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE" "./Output/%%a"
::for /f "tokens=1-5 delims=/ " %%d in ("%date%") do start "C:\Program Files (x86)\Microsoft Office\root\Office16\EXCEL.EXE" ".\Output\*%%e-%%f-%%g.csv"
exit
【问题讨论】:
CSV 文件(特定文本文件)没有选项卡,批处理文件无法与 Excel 交互... 您需要选择不同的脚本语言。应该能够在 Vbscript、Python 或 Excel VBA 宏中执行此操作。 【参考方案1】:只是为了消除误解。您不想将数据合并到一个表(工作表)中,但您希望在一个 excel 文档中为每个 csv 文件使用具有相同标题的单独工作表?
由于您已经使用 python 脚本下载了 csv 文件,因此您可以使用 csv 模块读取文件,然后使用 openpyxl 模块将它们复制到 Excel 文档中的单独工作表中。
您必须在下面将“data/”子文件夹更改为您的位置,并将 csv-delimiter 设置为您的 csv 分隔符:
import os
import csv
import openpyxl as xl
files = ['data/'+ f for f in os.listdir('data')]
wb = xl.Workbook()
wb.remove_sheet(wb.active)
i = 0
for ff in files:
with open(ff) as f:
i += 1
ws = wb.create_sheet(f'File i')
reader = csv.reader(f, delimiter=',')
for row in reader:
ws.append(row)
wb.save('file.xlsx')
【讨论】:
【参考方案2】:可以从一个目录加载 .csv 文件并将它们全部合并到一个 .xlsx excel 文件中,.csv 文件的每个内容在单独的工作表上。这是使用 Pandas 的代码:
import pandas as pd
import sys
import os
import glob
from pathlib import Path
extension = 'csv'
all_filenames = [i for i in glob.glob('*.'.format(extension))]
writer = pd.ExcelWriter('fc15.xlsx') # Arbitrary output name
for csvfilename in all_filenames:
# in case your locale settings use , instead of a dot
txt = Path(csvfilename).read_text()
txt = txt.replace(',', '.')
text_file = open(csvfilename, "w")
text_file.write(txt)
text_file.close()
print("Loading "+ csvfilename)
df= pd.read_csv(csvfilename,sep=';', encoding='utf-8')
df.to_excel(writer,sheet_name=os.path.splitext(csvfilename)[0])
print("done")
writer.save()
print("task completed")
【讨论】:
以上是关于我的批处理文件应该有啥代码将多个 CSV 文件合并到一个新的单个 Excel 工作簿中,但每个 CSV 文件都有自己的工作表?的主要内容,如果未能解决你的问题,请参考以下文章
如何批处理将多个文件夹下的excel文件(xls,xlsx,csv等)合并成一个文件?
如何打破大型csv文件,在多个核心上处理它并使用nodeJs将结果合并为一个