質問編集履歴

1

途中までしか反映されていなかったので、修正しました。

2021/03/04 06:05

投稿

manson1120
manson1120

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,18 +1,18 @@
1
1
  ### 実現したいこと
2
2
 
3
- パワーポイントを自動で
3
+ **パワーポイントを自動で繰り返し処理を用いて作成したい**
4
-
5
-
6
-
4
+
5
+
6
+
7
- エクセルの情報を抽出
7
+ 1.エクセルの情報を抽出
8
8
 
9
9
 
10
10
 
11
- 1つのパワーポファイルに複数のページを作成
11
+ 2.エクセルから抽出した情報をタイトルとテキスト反映
12
12
 
13
13
 
14
14
 
15
- エクセルから抽出した情報をタイトルとテキスト反映
15
+ 3.2番目デー分繰り返し、1つのパワーポファイルに複数のページを作成
16
16
 
17
17
 
18
18
 
@@ -28,19 +28,19 @@
28
28
 
29
29
  ・エクセルから抽出した情報をタイトルとテキストにいれる
30
30
 
31
- ・繰り返し処理のコード
31
+ ※「パワーポイント自動作成コード」に記載の★箇所にエクセルで取得したデータを入れて、PPTシートをデータ分作成することが出来ない。
32
32
 
33
33
 
34
34
 
35
35
  ### 補足情報(FW/ツールのバージョンなど)
36
36
 
37
- pythonバージョン ⇒ 3.6
37
+ pythonバージョン ⇒ Python 3.8.0
38
38
 
39
39
  python実行環境 ⇒ windows10
40
40
 
41
41
  file構成 ⇒ デスクトップに「python」ディレクトリを設置
42
42
 
43
- pythonディレクトリの設置物 ⇒ pythonコードファイル、エクセルファイル、テンプレート用PPT
43
+ pythonディレクトリの設置物 ⇒ pythonコードファイル、エクセルファイル、テンプレート用PPT
44
44
 
45
45
  エクセルファイル名 ⇒ data.xlsx
46
46
 
@@ -48,13 +48,177 @@
48
48
 
49
49
 
50
50
 
51
+ ### エクセル情報
52
+
53
+ ![イメージ説明](af4884446ce751cf1c44142b5e9aa8d7.png)
54
+
55
+
56
+
51
- ### パワーポイント自動作成
57
+ ### パワーポイント自動作成コード
52
58
 
53
59
 
54
60
 
55
61
  ```
56
62
 
63
+ # coding: cp932
64
+
65
+
66
+
67
+ # ---必要なモジュールをimport---
68
+
69
+ from pptx import Presentation
70
+
71
+ from pptx.chart.data import ChartData
72
+
73
+ from pptx.enum.chart import XL_CHART_TYPE
74
+
75
+ from pptx.util import Inches
76
+
77
+ from pptx.util import Pt, Inches
78
+
79
+
80
+
81
+ # ---大きさの単位変更---
82
+
83
+ # センチメートルをPowerPoint上の距離に変換する関数
84
+
85
+ def Centis(length):
86
+
87
+ centi = Inches(length/2.54)
88
+
89
+ return centi
90
+
91
+
92
+
93
+ # ---スライド作成---
94
+
95
+ # 1枚のスライドでプレゼンテーションを作成する※今回はPPTを指定した
96
+
97
+ prs = Presentation('templat.pptx')
98
+
99
+
100
+
101
+ # 1枚目のスライドのレイアウトを使用するように指定
102
+
103
+ title_only_slide_layout = prs.slide_layouts[1]
104
+
105
+ slide = prs.slides.add_slide(title_only_slide_layout)
106
+
107
+ shapes = slide.shapes
108
+
109
+
110
+
111
+ # タイトルに入力したい文字列
112
+
113
+ slide_title = '★C列の題名を入れたい★'
114
+
115
+ shapes.title.text = slide_title
116
+
117
+
118
+
119
+ # ----------
120
+
121
+ # 前月のテキストボックスの位置を決める
122
+
123
+ left_Sub = Centis(1.0)
124
+
125
+ top_Sub = Centis(2.3)
126
+
127
+
128
+
129
+ # 前月のテキストボックスの幅と高さを決める
130
+
131
+ width_Sub = Centis(4.4)
132
+
133
+ height_Sub = Centis(0.86)
134
+
135
+ txBoxSub = slide.shapes.add_textbox(left_Sub, top_Sub, width_Sub, height_Sub)
136
+
137
+
138
+
139
+ tfSub = txBoxSub.text_frame
140
+
141
+ tfSub.text = '★D列のサブ題名を入れたい★'
142
+
143
+
144
+
145
+ # フォントサイズ・書体名変更
146
+
147
+ tfSub.paragraphs[0].font.size = Pt(14)
148
+
149
+ tfSub.paragraphs[0].font.name = 'メイリオ'
150
+
151
+
152
+
153
+ # ----------
154
+
155
+ # 前月のテキストボックスの位置を決める
156
+
157
+ left = Centis(2.17)
158
+
159
+ top = Centis(2.97)
160
+
161
+
162
+
163
+ # 前月のテキストボックスの幅と高さを決める
164
+
165
+ width = Centis(2.17)
166
+
167
+ height = Centis(0.86)
168
+
169
+ txBox = slide.shapes.add_textbox(left, top, width, height)
170
+
171
+
172
+
173
+ tf = txBox.text_frame
174
+
175
+ tf.text = "★A列の前月を入れたい★"
176
+
177
+
178
+
179
+ # フォントサイズ・書体名変更
180
+
181
+ tf.paragraphs[0].font.size = Pt(14)
182
+
183
+ tf.paragraphs[0].font.name = 'メイリオ'
184
+
185
+
186
+
187
+ # 今月のテキストボックスの位置を決める
188
+
189
+ left_Month = Centis(2.17)
190
+
191
+ top_Month = Centis(10.79)
192
+
193
+
194
+
195
+ # 今月のテキストボックスの幅と高さを決める
196
+
197
+ width_Month = Centis(2.17)
198
+
199
+ height_Month = Centis(0.86)
200
+
201
+ txBoxMonth = slide.shapes.add_textbox(left_Month, top_Month, width_Month, height_Month)
202
+
203
+
204
+
205
+ tfMonth = txBoxMonth.text_frame
206
+
207
+ tfMonth.text = '★B列を入れたい★'
208
+
209
+
210
+
57
- エラーメッセージ
211
+ # フォントサイズ変更
212
+
213
+ tfMonth.paragraphs[0].font.size = Pt(14)
214
+
215
+ tfMonth.paragraphs[0].font.name = 'メイリオ'
216
+
217
+
218
+
219
+ prs.save('chart-01.pptx')
220
+
221
+
58
222
 
59
223
  ```
60
224
 
@@ -66,14 +230,88 @@
66
230
 
67
231
  ```ここに言語名を入力
68
232
 
233
+ import openpyxl
234
+
235
+
236
+
237
+ # ブック取得
238
+
239
+ wb = openpyxl.load_workbook("data.xlsx")
240
+
69
- スコード
241
+ # シトを取得
242
+
243
+ sheet = wb["Sheet1"]
244
+
245
+
246
+
247
+ #A列のデータのみ取り出す ※10月
248
+
249
+ #値の入っている最大行、最大列まで行単位でセルの値を取得する
250
+
251
+ for rows in sheet.iter_rows(min_row=2, min_col=1, max_col=1):
252
+
253
+ for cell in rows:
254
+
255
+ list_A = cell.value
256
+
257
+ print(list_A)
258
+
259
+
260
+
261
+ #B列のデータのみ取り出す ※11月
262
+
263
+ #値の入っている最大行、最大列まで行単位でセルの値を取得する
264
+
265
+ for rows in sheet.iter_rows(min_row=2, min_col=2, max_col=2):
266
+
267
+ for cell in rows:
268
+
269
+ list_B = cell.value
270
+
271
+ print(list_B)
272
+
273
+
274
+
275
+ #C列のデータのみ取り出す ※title
276
+
277
+ #値の入っている最大行、最大列まで行単位でセルの値を取得する
278
+
279
+ for rows in sheet.iter_rows(min_row=2, min_col=3, max_col=3):
280
+
281
+ for cell in rows:
282
+
283
+ list_C = cell.value
284
+
285
+ print(list_C)
286
+
287
+
288
+
289
+ #D列のデータのみ取り出す ※sub title
290
+
291
+ #値の入っている最大行、最大列まで行単位でセルの値を取得する
292
+
293
+ for rows in sheet.iter_rows(min_row=2, min_col=4, max_col=4):
294
+
295
+ for cell in rows:
296
+
297
+ list_D = cell.value
298
+
299
+ print(list_D)
70
300
 
71
301
  ```
72
302
 
303
+ ### 最終イメージPPT
304
+
305
+ ※下記PPTシートをエクセルシート7行目の情報分作成する
306
+
307
+ ![イメージ説明](28e920099da562a17553051aa38af5fa.png)
308
+
73
309
 
74
310
 
75
311
  ### 試したこと
76
312
 
77
313
 
78
314
 
315
+ forを使用して繰り返し処理を行おうと思いましたが、プログラムを作った経験が今回が初めてで、どのように書いたらいいのかイメージが湧きませんでした。
316
+
79
- ここに問題に対して試しを記載してください。
317
+ お力添えいだけるです