openpyxlとpandasを触り始めたので、ひとまずtxtをexcelファイルにペーストする簡易なコードを書いてみた。
ライブラリのインストール
pip install openpyxl pandas
Openpyxlの場合
テンプレート(ヘッダーあり)を用意して別ファイルへ保存する。ws.append()で何も書かれてない行から書き込めるので、2行目からテキストの内容が書き込まれた
import csv
import openpyxl
TEMPLATE = "template.xlsx"
with open("result.txt", encoding="utf-8", newline='') as txt:
reader = csv.reader(txt, delimiter='\t')
data = [row for row in reader]
wb = openpyxl.load_workbook(TEMPLATE)
ws = wb["result"]
[ws.append(row) for row in data]
# Excelファイルを保存
wb.save("output.xlsx")
Pandasの場合
ExcelWriter()で引数mode='a'にすることで既存のExcelファイルに書き込みできる1。
また、テキストの行数が多かったのでchunkを使用することで読み込むようにした2。
import pandas as pd
if __name__ == "__main__":
target_file = "sample.txt"
output_file = "sample.xlsx"
target_sheet = "sample1"
with pd.ExcelWriter(output_file, mode="a", if_sheet_exists="overlay") as writer:
for i, chunk in enumerate(pd.read_csv(target_file, sep="\t", encoding="utf-8", header=None, chunksize=100)):
if i == 0:
chunk.to_excel(writer, sheet_name=target_sheet, index=False, header=False, startrow=1)
else:
chunk.to_excel(writer, sheet_name=target_sheet, index=False, header=False, startrow=writer.sheets[target_sheet].max_row)