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

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

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

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

286閲覧

pythonからのデータをEXCELに書き出したい

Kirari

総合スコア32

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2019/07/10 13:53

前提・実現したいこと

何度も質問して申し訳ございません。pythonで書いたプログラムをエクセルで書き出したいと考えています。B列にデータがあるまで1行ずつ書き出したいのです。エラーメッセージは出なくなりましたが、作成されたエクセルを確認したところ、エクセルには何も書かれておらず、インターネットで調べたりして色々とチャレンジはしたのですが、うまくいきません。アドバイスいただけますとありがたいです。どうぞよろしくお願いいたします。

発生している問題・エラーメッセージ

エラーメッセージが出ません。

該当のソースコード

python

1# -*- coding: utf-8 -*- 2""" 3Spyderエディタ 4 5これは一時的なスクリプトファイルです 6""" 7 8import os, tkinter, tkinter.filedialog, tkinter.messagebox 9root = tkinter.Tk() 10root.withdraw() 11fTyp = [("","*.html")] 12file = tkinter.filedialog.askopenfilename(filetypes = fTyp) 13fd=open(file,"r",encoding="utf-8") 14 15res=fd.read() 16from bs4 import BeautifulSoup 17 18cur_pos=0 19while True : 20 target_tag = '<p class="d-chat_timeline-name">' 21 closing_tag = '</p>' 22 start_pos = res[cur_pos:].find(target_tag) 23 end_pos = res[cur_pos:].find(closing_tag) 24 if (start_pos == -1) or (end_pos == -1): 25 break 26 mojie = res[cur_pos + start_pos + len(target_tag) : cur_pos + end_pos] 27 print(mojie) 28 cur_pos = cur_pos + end_pos + len(closing_tag) 29 30import openpyxl as px 31import pprint 32 33wb = px.Workbook() 34sheet = wb.create_sheet('sheet') 35 36mojie_list = [] 37 38if mojie in mojie_list: 39 print(mojie_list) 40 41wb.save(r'C:\Users\XXXXXXXXXX\Desktop\sample2.xlsx') 42 43

試したこと

ここに問題に対して試したことを記載してください。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

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

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

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

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

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

guest

回答2

0

ベストアンサー

サンプルプログラムですが、これを参考にしてみてください(openpyxlではないですが)。
B列のデータをデータフレーム形式で格納すれば、以下のプログラムで動くと思います。

python

1 2import xlsxwriter 3 4wb = xlsxwriter.Workbook(<保存するエクセルシートの名前とパス>) 5ws1 = wb.add_worksheet('sheet') 6 7#header 8ws_header = ["B列の名称"] 9# 0行目にヘッダー追加 10for i, text in enumerate(ws_header): 11 ws1.write(0, i, text) 12#body 13i=0 14for j in df.index: 15 i=i+1 # 既に1行書いているのでずらす 16 "Te" 17 ws1.write(i, 0, j) 18 ws1.write(i, 1, df.loc[j,'B列の名称']) 19 20wb.close() 21

投稿2019/07/10 15:36

bamboo-nova

総合スコア1408

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

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

Kirari

2019/07/11 10:03

すみません、解決しました。
guest

0

下記で解決しましたがエクセルの出力に1文字ずつ出力されます。

import os, tkinter, tkinter.filedialog, tkinter.messagebox
root = tkinter.Tk()
root.withdraw()
fTyp = [("","*.html")]

file="/Users/XXXXXXXX/Desktop/message1.html"
fd=open(file,"r",encoding="utf-8")

res=fd.read()
from bs4 import BeautifulSoup

mojie=[]
cur_pos=0
while True :
target_tag = '<p class="d-chat_timeline-name">'
closing_tag = '</p>'
start_pos = res[cur_pos:].find(target_tag)
end_pos = res[cur_pos:].find(closing_tag)
if (start_pos == -1) or (end_pos == -1):
break
mojie += res[cur_pos + start_pos + len(target_tag) : cur_pos + end_pos]

cur_pos = cur_pos + end_pos + len(closing_tag)

import xlsxwriter
wb = xlsxwriter.Workbook('/Users/XXXXXXX/Downloads/out.xlsx')
ws1 = wb.add_worksheet('sheet')

i=0
for a in mojie:
i=i+1
ws1.write(i, 0, a)

wb.close()

投稿2019/07/11 10:01

Kirari

総合スコア32

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問