# やりたいこと
# 申請したデータの進捗を調べてEXCELへ貼り付けたい。
■できていること
済:保存先フォルダを作成
済:貼り付けようEXCELがあるか確認→あれば開く、なければ作る処理
済:シート名
済:任意のサイトへログイン
済:申請不備になっているデータへ絞り込み
済:表示されたTableデータを取り込み
済:”次へ”が出た場合最後のページまでループで取り込みに行く
済:取り込んだデータに列を追加
済:貼り付け先エクセルファイルのシートを指定
済:最終列を調べる
未:to_excelでEXCELの最終行以降で貼り付け
#コード
Python
1from selenium import webdriver 2from selenium.webdriver.support.ui import Select 3from time import sleep 4from bs4 import BeautifulSoup as BS 5import sys 6import os 7import pandas as pd 8import openpyxl as excel 9import requests 10import re 11import ssl 12import datetime 13import math 14import tkinter as tk 15 16 #整える、インデックスをリセットしてつけ直す 17 dfALL.describe() 18 # 一番左に”NO”という項目を追加 19 df_r = dfALL.set_index('No') 20 # 一番右にclient名の列を追加し、client変数を代入 21 df_r.loc[:, 'クライアント'] = client 22 print(df_r) 23 24 #保存するEXCELファイルに該当のシートがあるか確認しに行く 25 EXL = excel.load_workbook('./保存用TEST/申請WEB取得.xlsx') 26 EXL.get_sheet_names()[0] 27 ws = EXL.get_sheet_by_name(EXL.get_sheet_names()[0]) 28 print(ws) 29 # 貼り付けるシートの最終行を調べる 30 c = ws.max_row + 1 31 print(str(c)) 32 33 #excelを開いて、新規シート作成してデータ貼り付け 34 writer = pd.ExcelWriter('./保存用TEST/申請WEB取得.xlsx') 35 df_r.to_excel(writer, ws, startrow=c) 36 logout = driver.find_element_by_xpath('//*[@id="j_id0:form:j_id13:j_id14:j_id28"]/ul/li/a').get_attribute('href') 37 driver.get(logout) 38 f = f + 1
#Errorコード
Error
1df_r.to_excel(writer, ws, startrow=c) 2 3#上記部分において下記のErrorが吐き出されます。 4 5TypeError, object of type 'Worksheet' has no len()
行列の追加の構文と、最終列の行数から貼り付けの2要素を追加するまでは正常に貼り付けできていたため、
おそらくこの部分の書き方か、もしくはそもそものコードに沿っていない書き方になってしまっているのだと思います。
言い訳になりませんが、まだ初めて2週間ほどの為、皆様のお知恵をお借りできればと思っております。
よろしくお願いいたします。
#追記 to_excelの第二引数はシート名について
最初の処理で、該当のEXCELファイルが存在有無を確認し、あれば開き、無ければ新規作成します。
次に日付時間が入力される形で新規シートを作成します。
Python
1now = datetime.datetime.now() 2SN1 = '申請_{0:%Y%m%d%p%H%M}'.format(now) 3 4wb = excel.Workbook() 5ws = wb.create_sheet(index = 0 ,title = SN1) 6SN2 = wb.sheetnames[0] 7wb.save('./保存用TEST//申請WEB取得.xlsx')
tp_excel時に
上記処理で作ったシートを指定して、最終列以降で追記を繰り返したかったので、
Python
1#EXCELを開いて、シートネームを取得※一番左に作ってある。 2EXL = excel.load_workbook('./保存用TEST/申請WEB取得.xlsx') 3EXL.get_sheet_names()[0] 4ws = EXL.get_sheet_by_name(EXL.get_sheet_names()[0])
と記載してしまいました。
このような場合の解決法もわかりましたらご教授いただけますと幸いです・・・><
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/06/27 06:12
2018/06/27 06:21