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

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

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

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

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

913閲覧

openpyxlにて大項目の中の小項目それぞれに項番を付与したい

jazzmaster

総合スコア26

openpyxl

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

Python 3.x

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

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2021/04/20 01:07

下記のようなテキストをpythonにて読み込んでいます。

txt

1#####!!!!!(AAAAAAA-BBBBBB) TITLE!!!!!##### 2 3#####*****Big Item1*****#####Duration:10min 4###---Small Item1aaaa---### 5#comment 6aaaaa 7bbbbb 8 9###---Small Item1bbb---### 10aaaaa 11bbbbb 12ccccc 13 14#####*****Big Item2*****#####Duration:20min 15###---Small Item1ccc---### 16aaaaa 17bbbbb 18 19###---Small Item1ddd---### 20aaaaa 21bbbbb 22ccccc 23 24 25#####*****Big Item3*****#####Duration:20min 26###---Small Item1xxx---### 27aaaaa 28bbbbb 29 30###---Small Item1yyy---### 31aaaaa 32bbbbb 33ccccc 34 35###---Small Item1zzz---### 36aaaaa 37bbbbb 38ccccc

pythonのコードは下記のようになっております。

python

1xxx = test.txt 2 3#行数を取得 4row_all = (sum([1 for _ in open(xxx)])) 5 6fileobj = open(xxx, "r", encoding="utf_8") 7bigtitle_count = 1 8sheet3_bigtitle_count = 34 9holder = {} 10 11for r in range(row_all): 12 line = fileobj.readline() 13 #先頭に#がある行を探す 14 if line.startswith('#'): 15 #タイトルを探しxxの設定 16 if m := re.search('#####!!!!!(.*)(.*)!!!!!#####', line): 17 s= m.groups()[0] 18 w = s.replace(" ", "") 19 20 #大項目を探し、セルの設定 21 elif line.startswith('#####*****'): 22 s = line.replace("#####*****", "") 23 w = s.replace("*****#####", "") 24 t = s.replace("*****#####", "") 25 26 #大項目名のみ取り出し 27 target1 = 'Duration' 28 idx1 = t.find(target1) 29 u = t[:idx1] 30 #print (u) 31 32 #Duration時間取得 33 target2 = ':' 34 idx2 = w.find(target2) 35 x = w[idx2+1:] 36 v = x.replace("min", "") 37 #print (v) 38 39 #シート4へ 40 sheet4.cell(row=1 + r, column=2).value = u 41 sheet4.cell(row=1 + r, column=2).font = Font(size=16,name='MS ゴシック',bold=True) 42 #シート3へ 43 sheet3.cell(row=0 + sheet3_bigtitle_count, column=7).value = u 44 sheet3.cell(row=0 + sheet3_bigtitle_count, column=7).font = Font(size=10,name='Arial',bold=True) 45 46 47 #大項目の下に罫線を挿入 48 bigtitle_border = Border(bottom=side) 49 for c in range(1,12): 50 sheet4.cell(row=1 + r, column=0 + c).border = bigtitle_border 51 #大項目番号を挿入 52 bigtitle_count+=1 53 sheet4.cell(row=1 + r, column=1).value = bigtitle_count 54 sheet4.cell(row=1 + r, column=1).font = Font(size=16,name='MS ゴシック',bold=True) 55 sheet4.cell(row=1 + r, column=1).alignment = Alignment(horizontal='left', vertical = 'center') 56 57 #シート3へ番号 58 sheet3.cell(row=1 + sheet3_bigtitle_count, column=3).value = bigtitle_count 59 sheet3.cell(row=1 + sheet3_bigtitle_count, column=3).font = Font(size=11,name='Arial') 60 61 62 sheet3_bigtitle_count+=2 63 holder.setdefault(sheet3_bigtitle_count,[]) 64 #小項目 65 elif line.startswith('###---'): 66 x = line.lstrip("#") 67 sheet4.cell(row=1 + r, column=2).value = x 68 holder[sheet3_bigtitle_count].append(x) 69 y = str(bigtitle_count) + '-' 70 print (y) 71 72 73 74 #その他コメント 先頭にある#のみ消す 75 elif line.startswith('#'): 76 x = line.lstrip("#") 77 sheet4.cell(row=1 + r, column=2).value = x 78 79 else: 80 sheet4.cell(row=1 + r, column=3).value = line 81 82wb.save(save_name)

エクセルには下記の画像のように書き込まれます。
#シート4
イメージ説明
(シート3の出力結果については本質問と関係ないので割愛させていただきます)

コード内#小項目のprint(y)で
2-
2-
3-
3-
4-
4-
4-
と出力されるのを確認しています。
これに小項目の番号を下記のように付与したいと思っています。
2-1
2-2
3-1
3-2
4-1
4-2
4-3

完成イメージは下記になります。(A列に小項目項番が書き込まれています。)
イメージ説明

このような番号付与の方法をお教えいただきたく思います。
よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

自己解決

小項目内に下記のように記載することで解決いたしました。
お騒がせいたしました。。

python

1 #小項目 2 elif line.startswith('###---'): 3 x = line.lstrip("#") 4 sheet4.cell(row=1 + r, column=2).value = x 5 holder[sheet3_bigtitle_count].append(x) 6 7 smalltitle_count+=1 8 holder2[bigtitle_count].append(smalltitle_count) 9 smalltitle_count=0 10 z = holder2[bigtitle_count] 11 s = sum(z) 12 y = str(bigtitle_count) + '-' + str(s) 13 sheet4.cell(row=1 + r, column=1).value = y 14 #print (y)

投稿2021/04/20 05:00

jazzmaster

総合スコア26

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問