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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

Q&A

解決済

2回答

612閲覧

pythonのopenpyxlのnumber_formatに関して

Kaniy064

総合スコア6

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Python 3.x

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

0グッド

0クリップ

投稿2022/09/30 11:45

pythonのopenpyxlのnumber_formatに関して

実現したいこと

pandasで引き出したデータだとExcelで表示『2022-09-30 00:00:00』このように
なる為、openpyxlのnumber_formatで表示『2022/09/30』を変えようとしましたが、
変更できませんでした。

質問のコードボールドテキスト

for j in range(5,sh.max_row+1): cell = sh.cell(row=i, column=j) cell.number_format = 'yyyy/mm/dd'``` **ボールドテキスト** ここにより詳細な情報を記載してください。 **ボールドテキスト**

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

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

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

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

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

Bull

2022/09/30 12:38

そのデータは文字列ですか? 文字列でしたら、書式を変更しても反映しないかと思います。
Kaniy064

2022/09/30 13:57

文字列(String型)です! これってpandas側から変更可能でしょうか?
Bull

2022/10/01 01:59

文字列を DateTime 型に変換すればいいかと思います。 あと、追加の質問がある場合はここに書くのではなく、質問を修正したほうがいいです。
Kaniy064

2022/10/01 12:31

何度も質問して申し訳ございません。 文字列型から DateTime 型に変更できるコードを教えてください。 例.['DATE']のSrinsデータです。-
Kaniy064

2022/10/01 12:47

もう一度、変更したいこと。 Excel上の日付表示 「yyyy-mm-dd 00:00:00」を「yyyy/mm/dd」に変更するコードです!
guest

回答2

0

自己解決

とてもわかやすいコードを教えてくださりありがとうございます。

投稿2022/10/06 11:25

Kaniy064

総合スコア6

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

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

0

日付のデータが文字列であれば、書式を設定しても表記は変わらないですね。
pandasでデータを作成しているのであれば、to_datetime() 関数で文字列から変換できます。
公式サイト

データフレームを使用しているのであれば、以下が参考になるかと思います。
pandasのto_datetimeでobject型からdatetime型に変換する


"openpyxl" では標準ライブラリのdatetimeを使用します。
以下のコードを実行してみてください。

import openpyxl import datetime wb = openpyxl.Workbook() ws = wb.active cell1 = ws.cell(row=1, column=1) cell1.value = '2022-09-30 15:04:20' cell1.number_format = 'yyyy/mm/dd' cell2 = ws.cell(row=2, column=1) dt = '2022-10-01 18:32:41' cell2.value = datetime.datetime.strptime(dt, '%Y-%m-%d %H:%M:%S') cell2.number_format = 'yyyy/mm/dd' wb.save('Test.xlsx')

以下のようなワークシートを
処理前のワークシート

import openpyxl import datetime wb = openpyxl.load_workbook('Sample1.xlsx') ws = wb.active for r in range(2, 6): cell = ws.cell(row=r, column=2) dt = cell.value cell.value = datetime.datetime.strptime(dt, '%Y-%m-%d') cell.number_format = 'yyyy/mm/dd' wb.save('Sample2.xlsx')

このようなプログラムで処理すると、
処理後のワークシート
このようになります。

なお、処理前のワークシートは

import pandas as pd df = pd.DataFrame({"日付":["2021-11-29", "2021-11-30", "2021-12-01", "2021-12-02"], "商品名":["りんご", "ブドウ", "みかん", "バナナ"], "数量":[50, 20, 60, 30],}) # df["日付"] = pd.to_datetime(df['日付']) df.to_excel('Sample1.xlsx')

このようなプログラムで作成しました。
コメントをはずせば日付は文字列ではなく、Datetime 型で作成されます。

投稿2022/10/01 12:28

編集2022/10/03 08:11
Bull

総合スコア986

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

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

Kaniy064

2022/10/02 02:03

上記コードの記載でも、できませんでした。 Excel上では、 この「2022-07-18 00:00:00」状態で表示されます
Bull

2022/10/02 06:46

上記のコードをそのまま実行してもできませんか?
Kaniy064

2022/10/02 13:09

上記コードの実行はできていましたが、 pandas場やopenpyxl上のForr構文で組み込むと 希望する表示されません。 openpyxlの上では for i in list(range(5,sh.max_row+1)): sh.cell(row=i, column=sh.max_column).numbar_format = 'yyyy\mm\dd' pandasの上では、 pd.to_datetime(df['日付']) でも、できていません
Kaniy064

2022/10/02 13:11

Excel上の表示方法です!
Bull

2022/10/02 23:44

環境による問題ではないようなので、実行しているプログラムの問題でしょう。 コードの断片だけで原因を解明するのはかなり困難なので、現象が再現できる最小限のコードを用意できますか? コードを載せる場合ここではインデントが崩れるので、質問を修正して追記するようにお願いします。
Kaniy064

2022/10/03 06:31

全体のfor分で回したコードです。 for i in list(range(1,sh.max_row+1)): sh.row_dimensions[i].height = 13.5 for j in list(range(1, sh.max_column-6)): cell = sh.cell(row=i, column=j) cell.alignment = Alignment(horizontal='left') cell.font = Font(name='MS Pゴシック', size=10, bold=False) for j in list(range(6, sh.max_column+1)): cell = sh.cell(row=i, column=j) cell.font = Font(name='MS Pゴシック', size=10, bold=False) cell.number_format = '0.00' cell.alignment = Alignment(horizontal='center') for k in list(range(5,i)): cell = sh.cell(row=i, column=k) cell.numbar_format = 'yyyy/m/d' pandas場合、 df['週開始日'] = pd.to_datetime(df['週開始日']) 以上が使用しているコードです!
Kaniy064

2022/10/03 06:36

実行後の表示:{2022-07-18} Excel上でも、「2022-07-25 00:00:00」 このようになってしまう。
Bull

2022/10/03 08:01

ここにコードを載せるとインデントが崩れるので、特に Python では致命的です。 コードは回答を修正して追記して下さい。 すでに書いていますが文字列は書式を変更しても表記は変わりません。 既存のワークブックの内容を書き換えるのならば、文字列のセルを読込んで Datatoime 型に変換すればいいです。
Kaniy064

2022/10/03 11:57

for r in range(2, 6): cell = sh.cell(row=r, column=5) dt = cell.value cell.value = datetime.datetime.strptime(dt, '%Y-%m-%d') cell.number_format = 'yyyy/mm/dd' --------------------------------------------------------------------------- TypeError Traceback (most recent call last) ~\AppData\Local\Temp/ipykernel_24560/2942905734.py in <module> 2 cell = sh.cell(row=r, column=5) 3 dt = cell.value ----> 4 cell.value = datetime.datetime.strptime(dt, '%Y-%m-%d') 5 cell.number_format = 'yyyy/mm/dd' TypeError: strptime() argument 1 must be str, not datetime.datetime
Bull

2022/10/03 13:24

最初の引数 (dt) が文字列でないようです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問