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

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

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

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

Python 3.x

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

Q&A

解決済

3回答

702閲覧

【python】文字列"USD"と数値"1,000"を連結して、”USD 1,000”と書きたいが、なぜか3桁区切りが消える。

yujin1202

総合スコア56

openpyxl

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

Python 3.x

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

0グッド

0クリップ

投稿2021/06/19 10:08

編集2021/06/19 10:10

下記の様なコードがあります。
「USD 1,000」とA2セルに記入したいのです。

1,000をstrに変えたり、下記の様に、f-stringで試したりしたのですが、USDと言う文字列と結合すると、なぜか、"USD 1000"と桁区切りが無くなってしまいます。
解決策を教えた頂きたく。(また、原因も教えて頂けると有難いです。)

import openpyxl as xl from openpyxl.utils import column_index_from_string wb1 = xl.load_workbook('test.xlsx') ws1 = wb1.worksheets[0] ws1.cell(row=1,column=1).value=1000   ws1.cell(row=1,column=1).number_format="#,##0" #1,000と記入されます。 s1=ws1.cell(row=1,column=1).value s2=f'{"USD"} {s1}' ws1.cell(row=2,column=1).value=s2 #USD 1,000ではなく、USD 1000とカンマ無しになる。 wb1.save('test.xlsx')

イメージ説明

簡単に出来るだろうと思ったのですが、かなり試行錯誤したのですが、出来ませんでした。
よろしくお願いします。

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

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

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

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

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

guest

回答3

0

ベストアンサー

f文字列でカンマ区切り指定をしてあげてはどうでしょうか

python

1s2=f'{"USD"} {s1:,}'

この当りもご参考になさってください
Pythonのf文字列(フォーマット済み文字列リテラル)の使い方

投稿2021/06/19 10:23

masaru.gotou

総合スコア8

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

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

yujin1202

2021/06/19 11:56

ありがとうございます。 一発で解決しました。
guest

0

数字だけだと、セルの書式は数値表示になるけど、USDをつけると、書式が文字列になるからでしょう。
そのばあいは、文字列で"1,000"と変換したあとそれを結合しないといけませんね

投稿2021/06/19 10:23

y_waiwai

総合スコア87749

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

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

yujin1202

2021/06/19 11:53

早速の御回答をありがとうございます。 ただ、私の理解が甘いのかも知れませんが、下記のコードを実行すると、 下記の様に出力されます。(こうなるので、悩みました。) ====================== ws1.cell(row=1,column=1).value=1000 ws1.cell(row=1,column=1).number_format="#,##0" s6=str(ws1.cell(row=1,column=1).value) print(s6) #1000 s7=ws1.cell(row=1,column=1).value print(s7) #1000 print(f'{s7:,}') #1,000 ================= 2行目のコードで、折角、桁区切りを入れた状態でも、文字列にした瞬間に、 なぜか、桁区切りが消えてしまいます。(これで、数時間スタックしました。) 一方、masaruさんの回答の様に、f-stringの機能で、桁区切りを付けると上手くいきます。 「なぜ、文字列にした瞬間に、桁区切りが消えるか?」は、謎ですが、「そう言う仕様だ。」と理解しようと思います。
y_waiwai

2021/06/19 12:26 編集

文字列、と数値、の違いをはっきり意識しよう ws1.cell(row=1,column=1).value=1000 と数値を入れると、そのセルは数値型となり、 s7=ws1.cell(row=1,column=1).value s7は数値型の変数となります s6=str(ws1.cell(row=1,column=1).value) では、その数値を文字列変換してるので、s6は文字列型変数で、そこには'1000'という文字列が入ります んで、.number_formatってのは、そのセルに表示するときだけ、のフォーマット指定ですよ
yujin1202

2021/06/19 13:10 編集

>んで、.number_formatってのは、そのセルに表示するときだけ、のフォーマット指定ですよ まず、これは非常に分かり易いです。ありがとうございます。 一つだけ、教えて下さい。 数値型の"1,000"を、文字列でも、”1,000”と表現できれば、解決すると思っております。 これを実現するには、f-strings以外のソリューションはあるのでしょうか? ご質問ばかりで、申し訳ないです。
guest

0

セルの値をUSD 1000にしてしまうと、これは数値ではないのでnumber_formatが効かないのでは。
値は1000のまま、number_format"USD" #,##0にしたらどうですか?

投稿2021/06/19 10:23

itagagaki

総合スコア8402

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問