ちなみにこれで上記のws内のものを生成できる # 列、行の操作 x_list = [] # A1からC10までの値を埋め込む for x in range(1, 11): x_list.append(f'A{x}') x_list.append(f'B{x}') x_list.append(f'C{x}') for x in x_list: ws2[x] = x # 終了 # グラフの描画 y_list = [] # B2からC13までの値を埋め込む for y in range(2, 14): y_list.append(f'B{y}') y_list.append(f'{y - 1}月') y_list.append(f'C{y}') y_list.append(random.randint(8000, 100000)) # 適当に値を書き込む ws3 = wb.create_sheet('new new sheet') for y in range(0, len(y_list), 4): ws3[y_list[y]] = y_list[y + 1] ws3[y_list[y + 2]] = y_list[y + 3] #終了
解説が尊い
褒めてもらえて嬉しい!!
ちなみにこれで上記のws内のものを生成できる
# 列、行の操作
x_list = [] # A1からC10までの値を埋め込む
for x in range(1, 11):
x_list.append(f'A{x}')
x_list.append(f'B{x}')
x_list.append(f'C{x}')
for x in x_list:
ws2[x] = x # 終了
# グラフの描画
y_list = [] # B2からC13までの値を埋め込む
for y in range(2, 14):
y_list.append(f'B{y}')
y_list.append(f'{y - 1}月')
y_list.append(f'C{y}')
y_list.append(random.randint(8000, 100000)) # 適当に値を書き込む
ws3 = wb.create_sheet('new new sheet')
for y in range(0, len(y_list), 4):
ws3[y_list[y]] = y_list[y + 1]
ws3[y_list[y + 2]] = y_list[y + 3] #終了
サンプルコード、ありがとうございます😊
リストとforを使うと一気にデータを更新できますね!
話し方が、かわいい。
ありがとうございます😊
クラスは「データ"クラス変数"と関数"メソッド"を整理した棚」っていう認識なんですが、合ってますか?
実務にpythonを絡めて自動化をしようと勉強を始めました
Excelは頻繁に使うので是非活用したいところではありますが
どうしても直接操作した方が早くないか…?と思う問題にぶつかります
PythonでExcelを操作するユースケースを考えるところからですね!
分かりやすくてとても勉強になります。
入力内容を確認するために、最後に保存した後、エクセルファイルを開いて中身を確認しているのですがこの作業を何とかしたいです。
最後の保存は自分で確認後やる感じにしたいのですが、エクセルの編集作業を実際にエクセルを開いてopenpyxlでやらせることはできるのでしょうか。
そうなるとpuautoguiを使ってやるしかないんですかね?
質問ですが、グラフの文字サイズをタイトル、軸ラベル、凡例それぞれ変更する方法はありますでしょうか。いろいろなサイトをみて、部分的にはできても、全部がうまくいきません。例えばメモリの数値の横軸はおおきくなるのに縦軸がそのままとか。可能であれば開設動画とか検討いただけると助かります。
初心者です。無料のオンラインのExcelは、使えないのですか?
オンラインのExcelについては考慮してませんでした💦
OpenPyXLから出力したExcelファイルを一度、自分のPC内に保存してから、オンラインにアップロードすれば使えます!もしも、オンライン上(OneDrive上)のExcelファイルを、直接OpenPyXLで編集したり読み込んだりしたい場合は、OneDrive SDK for PythonというSDKが必要みたいですね! ( github.com/OneDrive/onedrive-sdk-python )
OneDrive SDK for Pythonの使い方については、今後、解説動画をアップしようと思いますので、少々お待ちください😊
いつも見させていただいてます!
質問なのですが、sheet上にある結合セルをすべて解除する方法はありますでしょうか??
よろしくお願いします!!!
やったことはないのですが、こちらを参考にしてみてはいかがでしょうか?
arakik10.hatenablog.com/entry/2020/08/18/160753
わかりやすい解説ありがとうございます。
load_Workbookのところで、"そんなファイルは存在しません"的な
メッセージがでて読み込んでくれないのですが、保存場所とかが悪いのでしょうか?
ご質問、ありがとうございます!!
load_workbook() の引数にファイル名だけ指定した場合は、PythonファイルとExcelファイルを同じフォルダ内に入れておけば読み込めます!説明が不足していてすみません😵
Pythonファイルが置いてあるフォルダとは違うフォルダに置いてあるExcelファイルを読み込みたかった場合は、load_workbook() の引数にExcelファイルのフルパスを指定してください!
フルパスを調べるには、以下の記事が参考になると思います!
Windowsのファイルパスの調べ方▶︎ www.resume-next.com/easy_way_to_copy_file_paths/
Macのファイルパスの調べ方 ▶︎ www.too.com/support/faq/mac/finder_os/24480.html
@@pythonvtuber9917
ありがとうございます!なんとかそこは解決できました。
最後に一つだけ、
openpyxlを使うと確実に
OSError: [WinError 193] %1 は有効な Win32 アプリケーションではありません。
とエラーを吐くのですがどう対策したらよいのでしょうか?
うーん、openpyxlでこのエラーを見たことがないので明確な回答ができないのですが、stackoverflowというQAサイトで同じエラー内容の投稿があって、そこには「PyCharmをアンインストール・再インストールしたら治ったよ」って書いてありました🤔
▶︎ stackoverflow.com/questions/59807112/oserror-winerror-193-1-is-not-a-valid-win32-application-in-python
もしもエディターを使っていてエラーになった場合、念の為、エディターをアンインストール・再インストールしてみてはいかがでしょうか?
また、この投稿の中に「64bit版のExcelがインストールされてないとダメだよ」みたいな書き込みもあるので、PCにインストールされているExcelアプリと、読み込もうとしているExcelファイルを作成したExcelアプリが64bit版なのか、も合わせて確認してみた方が良いかな、って思いました!
python: can't open fileとかNo such file or directoryなどのエラーが出てきます。。。
新規のエクセファイルを作るやり方でやったのですが、どう対処すれば良いですか?
(コードは動画と同じにして打ちました)
データを抽出したいだけならpandasを使う方が早いのでしょうか??
openpyxlってすごくもっさりしてる気がします。(自分のPCがへぼいだけかも?笑)
テーブルデータであればPandasの方が簡単に取得できますね!!
データがいろんなセルに点在してある場合などは、OpenPyXLの方が綺麗に抽出できるケースもあると思います😉
コメント失礼します。初学者ですがサプーさんの動画を見て勉強してます!
質問なのですが、体温記録等、毎日セルを1つずつずらしながら書き込んでいく…というのは、このopenpyxlで可能なのでしょうか?
python上で体温を入力するとExcelに反映されるようなプログラムを組みたいのですが、調べたのですがよくわからなくて…お手隙の際にご回答頂ければ幸いですm(_ _)m
ご質問ありがとうございます😊
openpyxlを仕様するとPythonからExcelファイルへの書き込みが出来るので、毎日Excelファイルに体温の値を1行追加してこともできますよ😉 以下のようにmax_rowを使うと、現在のExcelファイルのシートの中で、データが存在する最大行(最終行)を取得できます!こちらを仕様されて + 1 行の部分に値を追記していけば良いと思います!
====================
from openpyxl import load_workbook
wb = load_workbook('体温.xlsx')
ws = wb.worksheets[0]
print(ws.max_row)
@@pythonvtuber9917
ご多用の中ご返信頂きありがとうございます!
無事にプログラムを完成する事ができました。
これからも動画楽しみにしています(^^)
動画の内容から逸脱してるかもしれませんが申し訳ございません。
Openpyxlをインポートしたプログラムをpy2exeでexe化しようとしても utils.pyで異常が発生しますが回避方法ありますか?
py2exeは使ったことがないので、ちょっと分からないです💦
「utils.pyで異常が発生」というのは、エラーが出力されるのでしょうか?エラーが出るのであればエラー文で検索して、ネットで同じような事象が起きてる人を探してみると良いかもしれないです!
お力になれず、申し訳ないです💦
特定列の削除、特定範囲の削除は簡単にできると思いますが、3列目、7列目、9列目、など複数の特定列を消すにはどう書きますか?
ご質問、ありがとうございます😊
「連続していない複数列の削除」の場合はfor文で1列づつ削除するしかないんじゃないかな、って思います!
例えば、以下のようにしたら、1枚目のシートの3列目、7列目、9列目が削除されます😉 (1列ずつ削除するので、その度、列番号がズレるためにenumerateでリストのインデックスを取得して、削除したい列番号からインデックスを引いているところに気をつけてください)
いかがでしょうか?
====== 以下 Pythonコード ======
import openpyxl
wb = openpyxl.load_workbook('LTX.xlsx')
ws = wb.worksheets[0]
for i, col_index in enumerate([3, 7, 9]): # リストで削除する列番号を指定
ws.delete_cols(col_index - i)
wb.save('LTX.xlsx')
@@pythonvtuber9917
返信わざわざありがとうございます🙏
とても嬉しいです。なるほど、その方法もありますね。最近Python、特にopenpyxlを中心に勉強しているので動画が役に立ちます。
1つ質問で、実験データを処理するプログラムを書いてるのですが、データが3万行あるため、実行まで10分かかってしまいます。そんなもんなんでしょうか?
「実行まで10分」というのは「読み込むだけで10分かかる」ということでしょうか?私もちょうどopenpyxlで10万件のデータを読み込む処理をしていますが、「行数10万、列数8、1シート」のBook読み込みが15秒ほどで完了します。列数やシート数にもよりますが、3万件で10分はちょっと長すぎかなぁ、って思いました😵
もしもCSVファイルとしてでも扱えるデータであれば、Excelファイルを一度CSVに変換してから、Pythonで読み込んだ方が速いと思います!!
Pythonの解説動画は出してる人ある程度いるし機械学習の解説動画出してる人もいるけど強化学習の解説動画出してる人日本だとほぼいないから出したら閲覧伸びるんじゃないかな
伸びないから誰も出してないのかもしれんけど
コメントありがとうございます!
アイシアさん( th-cam.com/channels/2lJYodMaAfFeFQrGUwhlaQ.html )が来年(2022年)は強化学習の動画をシリーズで出す予定だと仰ってた気がします😊
初学者です質問失礼しますm(*_ _)m
beautifulsoupで取りたいExcelデータのURLを取ってきて
自分のパソコンのExcelに保存したいのですが
どうしたら良いでしょうか?
ご質問、ありがとうございます😊
モコモコさんが取得したいExcelのデータが載っているWebサイトを具体的に教えていただけたら、明確にご回答できるかと思うのですが、一旦、例として以下の対象サイトの「Excelテンプレートのダウンロード」から自分のパソコンにExcel保存するPythonのサンプルコードを書いておきますね!
対象サイト ▶︎ www.microsoft.com/ja-jp/office/pipc/template/result.aspx?id=13281
===== 以下 pythonコード =====
import requests
from bs4 import BeautifulSoup
res = requests.get('www.microsoft.com/ja-jp/office/pipc/template/result.aspx?id=13281')
soup = BeautifulSoup(res.text, 'html.parser')
# ダウンロードのaタグオブジェクト
excel_a_tag = soup.find('a', class_='op-download-button')
# ダウンロードURL
download_url = excel_a_tag['href']
# ファイルダウンロード
res_file = requests.get(download_url)
# PCに保存
with open('ダウンロードファイル.xlsx', 'wb') as f:
f.write(res_file.content)
@@pythonvtuber9917
長文失礼しますm(*_ _)m
from bs4 import BeautifulSoup
import requests
url = "kantei.go.jp/jp/headline/kansensho/vaccine.html"
r = requests.get(url)
# 文字化けが酷いのでエンコードします。
r.encoding = r.apparent_encoding
# 引数に'lxml'を指定(なぜ必要かは、忘れちゃったww許して!!)
soup = BeautifulSoup(r.text, 'lxml')
# souの中身を見たいなら下記をコメントoffして!
#print(soup)
# soup.select("p.aly_tx_center > a")でcssのクラス指定後にaタグを取得
# NOTE:例としてリストで吐き出さるので[0]を指定して開いてます。
# ここを工夫して取れるといけるかもです!!
a_text = soup.select("p.aly_tx_center > a")[2]
link = a_text.get("href")
#print(link)
root_url = 'kantei.go.jp'
root_url +link
'kantei.go.jp/jp/content/KOREI-vaccination_data2.xlsx'
この1番最後のURLに私の抽出したいExcelデータがあります
詳細情報、ありがとうございます😊
私のパソコン環境では以下のコードを実行することで「日別の実績」の「高齢者等」のExcelファイルが、実行Pythonスクリプトと同じフォルダに保存できます!
(BeautifulSoupの第二引数が'lxml'だと私の環境では動きませんでした....)
いかがでしょうか??
==== 以下Pythonコード ====
import requests
url = "kantei.go.jp/jp/headline/kansensho/vaccine.html"
r = requests.get(url)
r.encoding = r.apparent_encoding
soup = BeautifulSoup(r.text, 'html.parser')
a_text = soup.select("p.aly_tx_center > a")[2]
link = a_text.get("href")
root_url = 'kantei.go.jp'
download_url = root_url + link
res_file = requests.get(download_url)
with open('日別の実績_高齢者等.xlsx', 'wb') as f:
f.write(res_file.content)
@@pythonvtuber9917
ご親切にありがとうございます(´;ω;`)
@@pythonvtuber9917
たびたび質問して申し訳ございません💦
soup = BeautifulSoup(r.text, 'html',ほげほげ)と有りますが
コチラは何を指定しているのでしょうか?
OpenPyXLのように階層の深いライブラリーの場合importで書くレベルについて悩みます
個人的にimportは"import openpyxl as px"とだけ大きく宣言してそれぞれの関数の呼び出しで
px.load_workbookとか
px.styles.sideや
px.chart.LineChart
のように都度書くほうが好みなのですがこの動画のように宣言でもっと絞ったほうがメリット大きいでしょうか
例えばチャートの形をBarChartからLineChartへ変更するだけでも宣言文を気にしなきゃいけないのが不安で。。。
ご質問ありがとうございます😊
「インポート文をライブラリ内の関数まで絞った方がメリットが大きいのか?」という質問ですが、特に大きなメリットがあるわけではないです!この動画のコードはOpenPyXL公式のsampleコードを参考にしたために、このような記載にしました。
個人的には「どのライブラリから呼び出されているものか」ということが該当コード上で明確にわかった方が良いと思っている派なので、Chromaさんのコードの書き方の方が好きです!!
OpenPyXLに限っていうとWorkbookクラス・Worksheetクラスの属性に対する操作のコードが多く、ライブラリ内の関数を直接呼び出すことが少ないので特に問題ないかなぁ、って思ってこのようなコードにしましたが、確かにスタイル関連を操作したい場合は「import openpyxl as px」の方が使い勝手が良さそうですね!
@@pythonvtuber9917 ご回答ありがとうございます。
色々な表現方法がとれる場合プログラミング経験豊富な方の声が聞けるのは大変助かります。
これからも頑張ってください
From openpyxl import Workbook
ModuleNotFoundError: No module named ‘openpyxl’
この様な表示になり解決できません アドバイスをお願いします。
pip install openpyxl は実行すみです
ご質問ありがとうございます!!
pip installをしている環境と、Pythonを実行している環境は同じでしょうか?
例えば、Pythonの実行環境はcondaだけど、pipでインストールしている環境はPCのシステムインタープリター(デフォルトで入ってるもの)になっているなど、環境がズレている気がします😵
返信ありがとうございます。
確認すると実際 conda 環境でした。pycharmを使っています.
Pythonを始める時の環境設定はどのような順番でやっていけば良いでしょうか,
環境設定がわかりません,教えて下さい
どのような設定をすべきかは、どのような環境にしたいか?によって異なります😉
condaを使いたいのか?pyenvやvirtualenvを使いたいのか?直接入れたものを使いたいか?それによって異なります!
conda環境と他環境が共存していると、うまく動かないことが多いのでどちらかを取捨選択して、その上で、PyCharm上でその環境のインタープリタを指定してあげたら良いと思います。
インタープリタの設定はPyCharmの右下の「Python3.X」って書いてある部分をクリックすると「インタープリターの設定」メニューが出てくるので、そこから、さらにインタープリターが指定されているディレクトリ名の右側にある歯車ボタンを押して、追加してあげてください。
@@pythonvtuber9917
ありがとうございます。参考になりました。解決できそうです。
from openpyxl.styles.borders import Border, Side を冒頭に実行しないと SideとBorderが使えませんでした。
情報ありがとうございます😊
from openpyxl import Workbook
from openpyxl.styles import Font
wb = Workbook()
ws = wb.active
ws['A4'] = 10
cel = ws['A4']
cel.font = Font(size = 12, bold=True,color='FF0000')
wb.save('output.xlsx')
これを動かしましたがエラーがでました。
内容です。
from openpyxl import Workbook
ModuleNotFoundError: No module named 'openpyxl'
PS C:\Users\user> & C:/Users/user/AppData/Local/Programs/Python/Python310/python.exe c:/Users/user/Desktop/アプリケーション作成/エクセル/ex.py
Traceback (most recent call last):
File "c:\Users\user\Desktop\アプリケーション作成\エクセル\ex.py", line 1, in
原因は何でしょうか
ご質問ありがとうございます!
エラーメッセージはどのようなものですか?通常、「Traceback」の後にエラー箇所、今回だと「 line 1, in 」と出てきて、その後に原因が書いてあります。