質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

Q&A

解決済

2回答

4081閲覧

Pythonにてtxtファイルから既存のエクセルシートに転送

wr250xxx

総合スコア1

openpyxl

openpyxlは、Excel2007以降のファイル(xlsx/xlsm/xltx/xltm)を読み書きするためのPythonライブラリです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

pandas

Pandasは、PythonでRにおけるデータフレームに似た型を持たせることができるライブラリです。 行列計算の負担が大幅に軽減されるため、Rで行っていた集計作業をPythonでも比較的簡単に行えます。 データ構造を変更したりデータ分析したりするときにも便利です。

0グッド

0クリップ

投稿2020/07/15 08:11

編集2020/07/20 09:17

テキストからエクセルにデータ転送するのに
クリップボードを使ってみました。(他サイト参考)https://stackoverrun.com/ja/q/10105787

クリップボードを確認すると間違いなくすべてコピー出来ていますが
貼付け時に一部消えてしまう文字があります。

解決方法を教えてください。

import

1import pandas as pd 2import pyperclip as clp 3 4csvファイルを読み込む 5 6df = pd.read_csv(rf'C:/Users/p000a05646/pdf.txt', engine='python', 7 sep='::', 8 header=None) 9 10 11クリップボードにコピー 12 13df.to_clipboard() 14cells = clp.paste() 15cells = [x.split() for x in cells.split('\n')] 16 17エクセルを開く 18 19wb= openpyxl.load_workbook('C:/Users/シート.xlsx') 20sheet = wb.get_sheet_by_name('test') 21 22 23 24貼り付け 25 26for i, r in zip(range(1,len(cells)), cells): 27 for j, c in zip(range(1,len(r)), r): 28 sheet.cell(row = i, column = j).value = c 29保存 30 31wb.save('C:/Users/シート.xlsx') 32

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

aokikenichi

2020/07/15 09:04

「Pythonにて、テキストファイルの文字をそのまま既存のエクセルシートにコピぺしたいのですが、pandasを使用して作成したところ、既存のエクセルファイルに新しくシートが追加されていきます。」 意味がわかりません。 to_excel()メソッドを使われたということでしょうか。 コードを示していただけますか。 「基本的な、テキスト→エクセルの方法」であれば csv に出力 エクセルでcsvファイルを開く が一番基本かと思います。
meg_

2020/07/15 12:40

openpyxlモジュールを検討されてはどうでしょうか?
wr250xxx

2020/07/15 23:44

import pandas as pd # csvファイルを読み込む frame = pd.read_csv(rf'C:/Users/pdf.txt', engine='python', sep='::', header=None) # エクセルファイルに書き込む writer = pd.ExcelWriter(r"C:/Users/シート.xlsx") frame.to_excel(writer,'test',index=False) # header=False # 保存 writer.save()
wr250xxx

2020/07/15 23:46

この場合、既存のエクセルシートの他のシートが消えてしまいます。 frame.to_excelの内容だけが保存される形です。
meg_

2020/07/16 00:22

質問は編集出来ますので、コードは質問に追記してください。
meg_

2020/07/20 05:56

・コードは「コードの挿入」で記入してください。 ・「クリップボードを確認すると間違いなくすべてコピー出来ていますが一部消えてしまう文字があります。」文章が矛盾していて分かりません。”張り付けるときに一部喪失してしまう”ってことでしょうか? また、「一部消えてしまう文字」とは具体的には何ですか?
wr250xxx

2020/07/20 06:34

貼り付け時に消えてしまう文字があるようです。 クリップボードの情報は消えていないので確実にコピーは出来ています。 貼り付けのコードに問題があるのでしょうか?
aokikenichi

2020/07/20 09:15 編集

コード例が乱れています 修正願います(最後尾)
wr250xxx

2020/07/20 09:18

申し訳ないです。修正しました。
guest

回答2

0

ベストアンサー

zip(range(1,len(cells)), cells)が原因ではないでしょうか。

range(1, len(cells))だとcellsの長さより1少なくなってしまう(0がない分)ので、zipしたときcellsの最後の要素が含まれなくなります。

zip(range(1, len(cells) + 1), cells) に変えたら大丈夫ではないかと思います。

本題ではないですが、
csvファイル → データフレーム → クリップボード経由で文字列に変換 → split → for ループ
と回りくどい処理をしているように見えます。
データフレームで直接forループしたほうが簡単ではないでしょうか。

あと、rangeとzipを組み合わせるなら、enumerateを使ったほうがシンプルに書けます。

python

1for j, colname in enumerate(df, start=1): 2 for i, c in enumerate(df[colname], start=1): 3 sheet.cell(row=i, column=j).value = c

投稿2020/07/20 23:56

bsdfan

総合スコア4560

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wr250xxx

2020/07/21 01:05

ありがとうございます。無事解決致しました。 enumerateを使用して解決しました。本当にありがとう御座います。助かりました。
guest

0

Excelファイル hoge.xlsx に例えばSheet1, Sheet2, Sheet3があり、それぞれに何か書かれていて
Sheet3のC1セルに'XXX' を追記したい場合
下記でいけます。
Sheet1、Sheet2、Sheet3のC1セル以外 に何か記入されている場合も元のままで変更ありません

PythonでExcelファイル(xlsx)を読み書きするopenpyxlの使い方
を参考とさせていただきました

Python

1import openpyxl 2 3wb = openpyxl.load_workbook('hoge.xlsx') 4print(wb.sheetnames) 5 6sheet = wb['Sheet3'] 7sheet['C1'] = 'XXX' 8 9wb.save('hoge.xlsx')

投稿2020/07/20 09:37

aokikenichi

総合スコア2218

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wr250xxx

2020/07/21 01:04

ありがとうございます。とても勉強になりました。無事解決しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問