質問編集履歴

8

文法の修正

2021/09/01 16:02

投稿

MitAbe
MitAbe

スコア15

test CHANGED
File without changes
test CHANGED
@@ -106,7 +106,73 @@
106
106
 
107
107
   テンプレートには給与の計算式が入っておりますので、groupbyを使用し担当名 と歩合率をグループ化して転記できれば良いのではないか、と考えております。
108
108
 
109
- 自分が行った手順は下記になります。
109
+ 自分が行った手順は下記になります。(2パターン試してみました。)
110
+
111
+ パターンaとbです。
112
+
113
+
114
+
115
+
116
+
117
+ 下記が、コード等になります。
118
+
119
+ ご指南の程何卒よろしくお願い致します。
120
+
121
+
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+ ###転記するためのテンプレートです。
130
+
131
+
132
+
133
+ ![イメージ説明](5eb1aa268c1dfc53aac5d407aacd3677.png)
134
+
135
+
136
+
137
+ ```ここに言語を入力
138
+
139
+ 給与計算表
140
+
141
+ 顧客コード 日付 担当者名1(クローザー) 担当者名2(アポインター) 住所 〒 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 給与支給額
142
+
143
+ ¥0 12.0% ¥0
144
+
145
+ ¥-1,000 11.0% ¥0
146
+
147
+ ¥-2,000 10.0% ¥0
148
+
149
+ ¥-3,000 9.0% ¥0
150
+
151
+ ¥-4,000 8.0% ¥0
152
+
153
+ ¥-5,000 7.0% ¥0
154
+
155
+ ¥-6,000 6.0% ¥0
156
+
157
+ ¥-7,000 5.0% ¥0
158
+
159
+ ¥-8,000 4.0% ¥0
160
+
161
+ ¥-9,000 3.0% ¥0
162
+
163
+ ¥-10,000 2.0% ¥0
164
+
165
+ ¥-11,000 1.0% ¥0
166
+
167
+ 合計 ¥0
168
+
169
+
170
+
171
+ ```
172
+
173
+ ###パターンaのコードです。
174
+
175
+ ながれです。
110
176
 
111
177
  ・pandasのgroupbyを使用し、グループ分けを行う。
112
178
 
@@ -116,21 +182,19 @@
116
182
 
117
183
  問題点
118
184
 
119
- ・指定のファイル名でexcelシートは立ち上がるが、中身に何も記載されていない。
185
+ ・指定のファイル名(torihiki)でexcelシートは立ち上がるが、中身に何も記載されていない。
120
186
 
121
187
  ・担当ごとにexcelファイルが作成される予定だが、1つしか作成されない。
122
188
 
123
-
124
-
125
- 下記、コード等になります。
189
+ ・ファイル名(torihiki)を開けると"循環参照"という注意事項出てくる
126
-
190
+
127
- ご指南程何卒よろしお願い致しま
191
+ ・12%項目がななってしま
128
-
129
-
130
-
131
- ###グループ分けのコードです。
192
+
132
-
133
- ```
193
+ ```ここに言語を入力
194
+
195
+ from datetime import datetime
196
+
197
+ from openpyxl import load_workbook
134
198
 
135
199
  import pandas as pd
136
200
 
@@ -154,19 +218,103 @@
154
218
 
155
219
 
156
220
 
157
- print(df.groupby(['担当者名2(アポインター)','歩合率']).sum()['金額'])
221
+ df.groupby(['担当者名2(アポインター)','歩合率']).sum()['金額'].to_csv("./appoint.csv",encoding="shift jis")
222
+
223
+
224
+
158
-
225
+ filepath1 = '給与計算表.xlsx'
226
+
227
+
228
+
229
+
230
+
231
+
232
+
233
+
234
+
235
+ wb1 = load_workbook(filename=filepath1)
236
+
237
+ ws1 = wb1['給与計算表']
238
+
239
+
240
+
241
+
242
+
243
+
244
+
245
+ values1=[[cell.value for cell in row1] for row1 in ws1]
246
+
247
+
248
+
249
+
250
+
251
+ del values1[0]
252
+
253
+ conv_values1 = list(zip(*values1))
254
+
255
+ torihiki_list = list(set(conv_values1[0]))
256
+
257
+
258
+
259
+
260
+
261
+ for torihiki in torihiki_list:
262
+
263
+
264
+
265
+
266
+
267
+ product_data =[]
268
+
269
+
270
+
271
+
272
+
273
+ for i in range(len(values1)):
274
+
275
+ if values1[i][0] == torihiki:
276
+
277
+ product_data.append(values1[i])
278
+
279
+
280
+
281
+
282
+
283
+ ws1.title = '給与計算表'
284
+
285
+
286
+
287
+
288
+
289
+ for y, row in enumerate(product_data):
290
+
291
+ for x, cell in enumerate(row):
292
+
159
- df.to_csv("./appoint.csv",encoding="shift jis")
293
+ ws1.cell(row= y+2, column= x+1, value=product_data[y][x])
294
+
295
+
296
+
297
+
298
+
299
+
300
+
160
-
301
+ now = datetime.now()
302
+
161
-
303
+ hiduke = now.strftime('%Y-%m-%d')
304
+
162
-
305
+ filename = 'torihiki.xlsx'
306
+
307
+ wb1.save(filename)
308
+
309
+
310
+
163
- ```
311
+ ```
164
-
312
+
165
- ###出力結果です。
313
+ ###出力結果
166
-
314
+
167
- ```ここに言語を入力
315
+ ```ここに言語を入力
168
-
316
+
169
- Unnamed: 0 Unnamed: 1 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) \
317
+ Unnamed: 0 Unnamed: 1 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) \
170
318
 
171
319
  0 NaN NaN 1.0 2021-06-07 a1 近藤 阿部
172
320
 
@@ -192,294 +340,246 @@
192
340
 
193
341
  4 NaN NaN NaN NaN NaN NaN NaN 1900000 0.12 NaN
194
342
 
195
- 担当者名2(アポインター) 歩合率
196
-
197
- 佐藤 0.12 1430000
198
-
199
- 阿部 0.06 908000
200
-
201
- 0.12 4100000
202
-
203
- 齋藤 0.11 675000
204
-
205
- Name: 金額, dtype: int64
206
-
207
343
  >>>
208
344
 
345
+
346
+
347
+ ```
348
+
349
+ 見づらくて申し訳ありません。torihiki というexcelファイルが1つだけ出来上がりました。
350
+
351
+ ![イメージ説明](955fbdf9e588d5ea8bcd5a6566c450e1.png)
352
+
353
+
354
+
355
+ ![イメージ説明](14ba4fc8a48d148e25be22d110b2ca11.png)
356
+
357
+
358
+
359
+ ###パターンbのコードです。
360
+
361
+ ながれです。
362
+
363
+ ・pandasのgroupbyを使用し、グループ分けを行う。
364
+
365
+ ・上記をexcelファイルにし、保存する。
366
+
367
+ ・上記excelファイルより、指定のテンプレートに出力を試みる。
368
+
369
+ 問題点
370
+
371
+ ・エラーコードが出てしまう。
372
+
373
+ ・担当者(アポインター)3名の不明なファイルが出来上がる。
374
+
375
+ ```ここに言語を入力
376
+
377
+ from datetime import datetime
378
+
379
+ from openpyxl import load_workbook
380
+
381
+ import pandas as pd
382
+
383
+ import csv
384
+
385
+
386
+
387
+ df = pd.read_excel('売上管理表.xlsx',sheet_name = '集金済み')
388
+
389
+ pd.set_option('display.max_columns',None)
390
+
391
+ pd.set_option('display.max_rows',13)
392
+
393
+
394
+
395
+ print(df)
396
+
397
+
398
+
399
+
400
+
401
+ df.groupby(['担当者名2(アポインター)','歩合率']).sum()['金額'].to_excel("./appoint.xlsx")
402
+
403
+
404
+
405
+ filepath1 = './appoint.xlsx'
406
+
407
+ filepath2 = '給与計算表.xlsx'
408
+
409
+
410
+
411
+
412
+
413
+
414
+
415
+
416
+
417
+ wb1 = load_workbook(filename=filepath1)
418
+
419
+ ws1 = wb1['Sheet1']
420
+
421
+
422
+
423
+
424
+
425
+
426
+
427
+ wb2 = load_workbook(filename=filepath2)
428
+
429
+ ws2= wb2['給与計算表']
430
+
431
+
432
+
433
+
434
+
435
+
436
+
437
+ values1=[[cell.value for cell in row1] for row1 in ws1]
438
+
439
+
440
+
441
+
442
+
443
+ del values1[0]
444
+
445
+ conv_values1 = list(zip(*values1))
446
+
447
+ torihiki_list = list(set(conv_values1[0]))
448
+
449
+
450
+
451
+
452
+
453
+ for torihiki in torihiki_list:
454
+
455
+
456
+
457
+
458
+
459
+ product_data =[]
460
+
461
+
462
+
463
+
464
+
465
+ for i in range(len(values1)):
466
+
467
+ if values1[i][0] == torihiki:
468
+
469
+ product_data.append(values1[i])
470
+
471
+
472
+
473
+
474
+
475
+ ws2.title = 'torihiki'
476
+
477
+
478
+
479
+
480
+
481
+ for y, row in enumerate(product_data):
482
+
483
+ for x, cell in enumerate(row):
484
+
485
+ ws1.cell(row= y+2, column= x+1, value=product_data[y][x])
486
+
487
+
488
+
489
+
490
+
491
+
492
+
493
+ now = datetime.now()
494
+
495
+ hiduke = now.strftime('%Y-%m-%d')
496
+
497
+ filename = torihiki
498
+
499
+ wb2.save(filename)
500
+
501
+
502
+
503
+ ```
504
+
505
+ ###出力結果
506
+
507
+ ```ここに言語を入力
508
+
509
+ =====
510
+
511
+ Unnamed: 0 Unnamed: 1 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) \
512
+
513
+ 0 NaN NaN 1.0 2021-06-07 a1 近藤 阿部
514
+
515
+ 1 NaN NaN 5.0 2021-06-11 a5 近藤 佐藤
516
+
517
+ 2 NaN NaN 6.0 2021-06-12 a6 近藤 齋藤
518
+
519
+ 3 NaN NaN 8.0 2021-06-14 a8 近藤 阿部
520
+
521
+ 4 NaN NaN NaN NaT NaN 近藤 阿部
522
+
523
+
524
+
525
+ 〒 住所1 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 備考
526
+
527
+ 0 NaN 千葉県2-12-14 工事 090-xxxx-xxxx NaN NaN NaN 2200000 0.12 *
528
+
529
+ 1 NaN 沖縄県 工事 94-xxxx-xxxx NaN NaN NaN 1430000 0.12 *
530
+
531
+ 2 NaN 沖縄県 工事 95-xxxx-xxxx NaN NaN NaN 675000 0.11 *
532
+
533
+ 3 NaN 沖縄県 工事 97-xxxx-xxxx NaN NaN NaN 908000 0.06 *
534
+
535
+ 4 NaN NaN NaN NaN NaN NaN NaN 1900000 0.12 NaN
536
+
537
+ Traceback (most recent call last):
538
+
539
+ File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 62, in <module>
540
+
541
+ wb2.save(filename)
542
+
543
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\workbook\workbook.py", line 392, in save
544
+
545
+ save_workbook(self, filename)
546
+
547
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\writer\excel.py", line 293, in save_workbook
548
+
549
+ writer.save()
550
+
551
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\writer\excel.py", line 275, in save
552
+
553
+ self.write_data()
554
+
555
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\writer\excel.py", line 67, in write_data
556
+
557
+ archive.writestr(ARC_APP, tostring(props.to_tree()))
558
+
559
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1802, in writestr
560
+
561
+ with self.open(zinfo, mode='w') as dest:
562
+
563
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1505, in open
564
+
565
+ return self._open_to_write(zinfo, force_zip64=force_zip64)
566
+
567
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1600, in _open_to_write
568
+
569
+ self.fp.write(zinfo.FileHeader(zip64))
570
+
571
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 759, in write
572
+
573
+ n = self.fp.write(data)
574
+
575
+ AttributeError: 'NoneType' object has no attribute 'write'
576
+
209
577
  >>>
210
578
 
211
579
  ```
212
580
 
213
-
214
-
215
- ###転記するためのテンプレートです。
216
-
217
- ![イメージ説明](1509a204488bd3bb6ef02a5d62648a7c.png)
581
+ ![イメージ説明](40b0e1c5ae8687501d561b591fd67816.png)
218
-
219
- ```ここに言語を入力
582
+
220
-
221
- 給与計算書
583
+
222
-
223
- 顧客コード 日付 担当者名1(クローザー) 担当者名2(アポインター) 住所1 〒 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 給与支給額
584
+
224
-
225
- ¥0 12.0% ¥0
226
-
227
- ¥-1,000 11.0% ¥0
228
-
229
- ¥-2,000 10.0% ¥0
230
-
231
- ¥-3,000 9.0% ¥0
232
-
233
- ¥-4,000 8.0% ¥0
234
-
235
- ¥-5,000 7.0% ¥0
236
-
237
- ¥-6,000 6.0% ¥0
238
-
239
- ¥-7,000 5.0% ¥0
240
-
241
- ¥-8,000 4.0% ¥0
242
-
243
- ¥-9,000 3.0% ¥0
244
-
245
- ¥-10,000 2.0% ¥0
246
-
247
- ¥-11,000 1.0% ¥0
248
-
249
- 合計 ¥0
250
-
251
-
252
-
253
- ```
254
-
255
- ###転記するためのテンプレートです。
256
-
257
- ```ここに言語を入力
258
-
259
- from datetime import datetime
260
-
261
- from openpyxl import load_workbook
262
-
263
- import pandas as pd
264
-
265
- import csv
266
-
267
-
268
-
269
- df = pd.read_excel('売上管理表.xlsx',sheet_name = '集金済み')
270
-
271
- pd.set_option('display.max_columns',None)
272
-
273
- pd.set_option('display.max_rows',13)
274
-
275
-
276
-
277
- print(df)
278
-
279
-
280
-
281
-
282
-
283
-
284
-
285
- print(df.groupby(['担当者名2(アポインター)','歩合率']).sum()['金額'])
286
-
287
- df.to_csv("./appoint.csv",encoding="shift jis")
288
-
289
-
290
-
291
-
292
-
293
- filepath1 = '給与計算表.xlsx'
294
-
295
-
296
-
297
-
298
-
299
-
300
-
301
-
302
-
303
- wb1 = load_workbook(filename=filepath1)
304
-
305
- ws1 = wb1['給与計算表']
306
-
307
-
308
-
309
-
310
-
311
-
312
-
313
- values1=[[cell.value for cell in row1] for row1 in ws1]
314
-
315
-
316
-
317
-
318
-
319
- del values1[0]
320
-
321
- conv_values1 = list(zip(*values1))
322
-
323
- torihiki_list = list(set(conv_values1[0]))
324
-
325
-
326
-
327
-
328
-
329
- for torihiki in torihiki_list:
330
-
331
-
332
-
333
-
334
-
335
- product_data =[]
336
-
337
-
338
-
339
-
340
-
341
- for i in range(len(values1)):
342
-
343
- if values1[i][0] == torihiki:
344
-
345
- product_data.append(values1[i])
346
-
347
-
348
-
349
-
350
-
351
- ws1.title = '給与計算表'
352
-
353
-
354
-
355
-
356
-
357
- for y, row in enumerate(product_data):
358
-
359
- for x, cell in enumerate(row):
360
-
361
- ws1.cell(row= y+2, column= x+1, value=product_data[y][x])
362
-
363
-
364
-
365
-
366
-
367
-
368
-
369
- now = datetime.now()
370
-
371
- hiduke = now.strftime('%Y-%m-%d')
372
-
373
- filename = 'torihiki.xlsx'
374
-
375
- wb1.save(filename)
376
-
377
-
378
-
379
-
380
-
381
-
382
-
383
-
384
-
385
- ```
386
-
387
- ###出力結果です。
388
-
389
- ![イメージ説明](5cc417654f67f2e0cd6c8ffa918cae5b.png)
390
-
391
- 見づらくて誠に申し訳ありませんが、torihikiというファイルが1つだけ出来上がりました。
392
-
393
-
394
-
395
- ##中身です。
396
-
397
- ![イメージ説明](c8c22831bafe53c4c179f6c07bc45df4.png)
398
-
399
- 文字のズレ及び何も記載されていませんでした。
400
-
401
- 下記が中身です。
402
-
403
- ```ここに言語を入力
404
-
405
- 給与計算書
406
-
407
- 顧客コード 日付 担当者名1(クローザー) 担当者名2(アポインター) 住所1 〒 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 給与支給額
408
-
409
- ¥0 12.0% ¥0
410
-
411
- ¥-1,000 11.0% ¥0
412
-
413
- ¥-2,000 10.0% ¥0
414
-
415
- ¥-3,000 9.0% ¥0
416
-
417
- ¥-4,000 8.0% ¥0
418
-
419
- ¥-5,000 7.0% ¥0
420
-
421
- ¥-6,000 6.0% ¥0
422
-
423
- ¥-7,000 5.0% ¥0
424
-
425
- ¥-8,000 4.0% ¥0
426
-
427
- ¥-9,000 3.0% ¥0
428
-
429
- ¥-10,000 2.0% ¥0
430
-
431
- ¥-11,000 1.0% ¥0
432
-
433
- 合計 ¥0
434
-
435
-
436
-
437
- ```
438
-
439
- グループ分けした担当分のファイルが出来上がりません。
440
-
441
- 助けていいただけませんでしょうか。
442
-
443
- ご指摘の程何卒よろしくお願い致します。
585
+ ご指摘の程何卒しくお願い致します。
444
-
445
-
446
-
447
-
448
-
449
- ###元のデータです。
450
-
451
- ```ここに言語を入力
452
-
453
- 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) 〒 住所1 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 備考
454
-
455
- 1 2021/6/7 a1 近藤 阿部 千葉県2-12-14 工事 090-xxxx-xxxx ¥2,200,000 12.0% *
456
-
457
- 2 2021/6/8 a2 近藤 阿部 神奈川県2-12-15 工事 91-xxxx-xxxx ¥4,560,000 12.0%
458
-
459
- 3 2021/6/9 a3 近藤 阿部 北海道 工事 92-xxxx-xxxx ¥1,236,000 12.0%
460
-
461
- 4 2021/6/10 a4 近藤 田中 沖縄県 工事 93-xxxx-xxxx ¥1,230,000 12.0%
462
-
463
- 5 2021/6/11 a5 近藤 佐藤 沖縄県 工事 94-xxxx-xxxx ¥1,430,000 12.0% *
464
-
465
- 6 2021/6/12 a6 近藤 齋藤 沖縄県 工事 95-xxxx-xxxx ¥675,000 11.0% *
466
-
467
- 7 2021/6/13 a7 近藤 阿部 沖縄県 工事 96-xxxx-xxxx ¥324,000 10.0%
468
-
469
- 8 2021/6/14 a8 近藤 阿部 沖縄県 工事 97-xxxx-xxxx ¥908,000 6.0% *
470
-
471
- 9 2021/6/15 a9 近藤 阿部 沖縄県 工事 98-xxxx-xxxx ¥564,000 9.0%
472
-
473
- 10 2021/6/16 a10 近藤 阿部 沖縄県 工事 99-xxxx-xxxx ¥234,000 8.0%
474
-
475
-
476
-
477
-
478
-
479
- ```
480
-
481
-
482
-
483
- お力添えの程
484
-
485
- 何卒、何卒よろしくお願い致します。

7

文法の修正

2021/09/01 16:02

投稿

MitAbe
MitAbe

スコア15

test CHANGED
File without changes
test CHANGED
@@ -32,30 +32,14 @@
32
32
 
33
33
  import openpyxl
34
34
 
35
-
36
-
37
-
38
-
39
35
  wb = openpyxl.load_workbook("売上管理表.xlsx")
40
36
 
41
37
  ws = wb["売上管理表"]
42
38
 
43
-
44
-
45
-
46
-
47
-
48
-
49
39
  bikou_rows = []
50
40
 
51
41
 
52
42
 
53
-
54
-
55
-
56
-
57
-
58
-
59
43
  for row in ws.iter_rows(min_row=4):
60
44
 
61
45
 
@@ -64,24 +48,16 @@
64
48
 
65
49
  bikou_rows.append(row)
66
50
 
67
-
68
-
69
-
70
-
71
51
  ws2 = wb.create_sheet(title="集金済み")
72
52
 
73
53
 
74
54
 
75
-
76
-
77
55
  for bikou_row in bikou_rows:
78
56
 
79
57
  ws2.append([r.value for r in bikou_row])
80
58
 
81
59
 
82
60
 
83
-
84
-
85
61
  wb.save("売上管理表.xlsx")
86
62
 
87
63
 

6

文法修正

2021/09/01 15:19

投稿

MitAbe
MitAbe

スコア15

test CHANGED
File without changes
test CHANGED
@@ -4,13 +4,17 @@
4
4
 
5
5
  今現在下記の項目に取り組んでおります。
6
6
 
7
- ➀エクセルの特定の文字でマークした行だけをPythonで転記する(特定のマークは*です。集金済みという意味です。)
8
-
9
- ➁上記で転記できたデータを担当ごとに給与計算表テンプレートに転記したい。転記する項目は、担当名、売上金額です。その際、担当名と歩合率でグループ化しテンプレートに転記をしたい。
7
+ データを担当ごとに給与計算表テンプレートに転記したい。転記する項目は、担当名、売上金額です。その際、担当名と歩合率でグループ化しテンプレートに転記をしたい。
8
+
10
-
9
+ 流れといたしましては、
10
+
11
-
11
+ ➀元のデータから、特定の項目のみを抽出し、excelに転記致します(*の部分です。)
12
+
12
-
13
+ ➁上記で、転記したデータをグループ分けし、その後テンプレートに出力する。
14
+
15
+
16
+
13
- 質問は上記に関して2つございます。
17
+ 上記となります。
14
18
 
15
19
  お忙しいとは思いますが、助けていただきたく思います。
16
20
 
@@ -18,13 +22,11 @@
18
22
 
19
23
 
20
24
 
21
- まず➀について、ヘッダーも転記したいのですが、出てきませんでした。
25
+
22
-
23
- 下記が自分が書いたコード及び結果です。
26
+
24
-
25
-
26
-
27
+
28
+
27
- ###エクセルの特定の文字でマークした行だけをPythonで転記
29
+ ###エクセルの特定の文字でマークした行だけをPythonで転記
28
30
 
29
31
  ```ここに言語を入力
30
32
 
@@ -32,6 +34,8 @@
32
34
 
33
35
 
34
36
 
37
+
38
+
35
39
  wb = openpyxl.load_workbook("売上管理表.xlsx")
36
40
 
37
41
  ws = wb["売上管理表"]
@@ -52,11 +56,11 @@
52
56
 
53
57
 
54
58
 
55
- for row in ws.iter_rows(min_row=3):
59
+ for row in ws.iter_rows(min_row=4):
56
-
57
-
58
-
60
+
61
+
62
+
59
- if row[16].value == "*":
63
+ if row[16].value == "*" or row[16].value == "備考":
60
64
 
61
65
  bikou_rows.append(row)
62
66
 
@@ -76,6 +80,8 @@
76
80
 
77
81
 
78
82
 
83
+
84
+
79
85
  wb.save("売上管理表.xlsx")
80
86
 
81
87
 
@@ -92,15 +98,31 @@
92
98
 
93
99
 
94
100
 
95
- ![イメージ説明](58ae76a9d80d728713d8aa14f1066463.png)
101
+ ![イメージ説明](e8bc80376c9443aeef89fd4ce55d0b80.png)
102
+
103
+
104
+
105
+
106
+
107
+
108
+
96
-
109
+ ```ここに言語を入力
97
-
98
-
99
-
100
-
110
+
101
- 売上管理表に 日付顧客名 などの行が転記できませんでした。
111
+ 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) 〒 住所1 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 備考
102
-
112
+
103
- 読み込むときfor row in ws.iter_rows(min_row=3):分の問題だとは思うのですが、数字を変えても反映されませんでした。
113
+ 1 2021-06-07 0:00:00 a1 近藤 阿 千葉県2-12-14 工事 090-xxxx-xxxx 2200000 0.12 *
114
+
115
+ 5 2021-06-11 0:00:00 a5 近藤 佐藤 沖縄県 工事 94-xxxx-xxxx 1430000 0.12 *
116
+
117
+ 6 2021-06-12 0:00:00 a6 近藤 齋藤 沖縄県 工事 95-xxxx-xxxx 675000 0.11 *
118
+
119
+ 8 2021-06-14 0:00:00 a8 近藤 阿部 沖縄県 工事 97-xxxx-xxxx 908000 0.06 *
120
+
121
+ 近藤 阿部 1900000 0.12
122
+
123
+
124
+
125
+ ```
104
126
 
105
127
 
106
128
 
@@ -108,13 +130,153 @@
108
130
 
109
131
   テンプレートには給与の計算式が入っておりますので、groupbyを使用し担当名 と歩合率をグループ化して転記できれば良いのではないか、と考えております。
110
132
 
133
+ 自分が行った手順は下記になります。
134
+
135
+ ・pandasのgroupbyを使用し、グループ分けを行う。
136
+
137
+ ・上記をcsvファイルにし、保存する。
138
+
111
- が自分が書いたコード、テンプレート及びエラーです
139
+ ・上csvファイルより指定のテンプレートに出力を試みる
140
+
141
+ 問題点
142
+
143
+ ・指定のファイル名でexcelシートは立ち上がるが、中身に何も記載されていない。
144
+
145
+ ・担当ごとにexcelファイルが作成される予定だが、1つしか作成されない。
146
+
147
+
148
+
149
+ 下記が、コード等になります。
112
150
 
113
151
  ご指南の程何卒よろしくお願い致します。
114
152
 
115
153
 
116
154
 
117
- ###担当ごと計算表を作成
155
+ ###グループ分けコードです。
156
+
157
+ ```
158
+
159
+ import pandas as pd
160
+
161
+ import csv
162
+
163
+
164
+
165
+ df = pd.read_excel('売上管理表.xlsx',sheet_name = '集金済み')
166
+
167
+ pd.set_option('display.max_columns',None)
168
+
169
+ pd.set_option('display.max_rows',13)
170
+
171
+
172
+
173
+ print(df)
174
+
175
+
176
+
177
+
178
+
179
+
180
+
181
+ print(df.groupby(['担当者名2(アポインター)','歩合率']).sum()['金額'])
182
+
183
+ df.to_csv("./appoint.csv",encoding="shift jis")
184
+
185
+
186
+
187
+ ```
188
+
189
+ ###出力結果です。
190
+
191
+ ```ここに言語を入力
192
+
193
+ Unnamed: 0 Unnamed: 1 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) \
194
+
195
+ 0 NaN NaN 1.0 2021-06-07 a1 近藤 阿部
196
+
197
+ 1 NaN NaN 5.0 2021-06-11 a5 近藤 佐藤
198
+
199
+ 2 NaN NaN 6.0 2021-06-12 a6 近藤 齋藤
200
+
201
+ 3 NaN NaN 8.0 2021-06-14 a8 近藤 阿部
202
+
203
+ 4 NaN NaN NaN NaT NaN 近藤 阿部
204
+
205
+
206
+
207
+ 〒 住所1 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 備考
208
+
209
+ 0 NaN 千葉県2-12-14 工事 090-xxxx-xxxx NaN NaN NaN 2200000 0.12 *
210
+
211
+ 1 NaN 沖縄県 工事 94-xxxx-xxxx NaN NaN NaN 1430000 0.12 *
212
+
213
+ 2 NaN 沖縄県 工事 95-xxxx-xxxx NaN NaN NaN 675000 0.11 *
214
+
215
+ 3 NaN 沖縄県 工事 97-xxxx-xxxx NaN NaN NaN 908000 0.06 *
216
+
217
+ 4 NaN NaN NaN NaN NaN NaN NaN 1900000 0.12 NaN
218
+
219
+ 担当者名2(アポインター) 歩合率
220
+
221
+ 佐藤 0.12 1430000
222
+
223
+ 阿部 0.06 908000
224
+
225
+ 0.12 4100000
226
+
227
+ 齋藤 0.11 675000
228
+
229
+ Name: 金額, dtype: int64
230
+
231
+ >>>
232
+
233
+ >>>
234
+
235
+ ```
236
+
237
+
238
+
239
+ ###転記するためのテンプレートです。
240
+
241
+ ![イメージ説明](1509a204488bd3bb6ef02a5d62648a7c.png)
242
+
243
+ ```ここに言語を入力
244
+
245
+ 給与計算書
246
+
247
+ 顧客コード 日付 担当者名1(クローザー) 担当者名2(アポインター) 住所1 〒 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 給与支給額
248
+
249
+ ¥0 12.0% ¥0
250
+
251
+ ¥-1,000 11.0% ¥0
252
+
253
+ ¥-2,000 10.0% ¥0
254
+
255
+ ¥-3,000 9.0% ¥0
256
+
257
+ ¥-4,000 8.0% ¥0
258
+
259
+ ¥-5,000 7.0% ¥0
260
+
261
+ ¥-6,000 6.0% ¥0
262
+
263
+ ¥-7,000 5.0% ¥0
264
+
265
+ ¥-8,000 4.0% ¥0
266
+
267
+ ¥-9,000 3.0% ¥0
268
+
269
+ ¥-10,000 2.0% ¥0
270
+
271
+ ¥-11,000 1.0% ¥0
272
+
273
+ 合計 ¥0
274
+
275
+
276
+
277
+ ```
278
+
279
+ ###転記するためのテンプレートです。
118
280
 
119
281
  ```ここに言語を入力
120
282
 
@@ -124,33 +286,51 @@
124
286
 
125
287
  import pandas as pd
126
288
 
289
+ import csv
290
+
291
+
292
+
127
293
  df = pd.read_excel('売上管理表.xlsx',sheet_name = '集金済み')
128
294
 
295
+ pd.set_option('display.max_columns',None)
296
+
129
- df.to_excel('給与計算表.xlsx')
297
+ pd.set_option('display.max_rows',13)
298
+
299
+
300
+
130
-
301
+ print(df)
131
-
132
-
302
+
303
+
304
+
305
+
306
+
307
+
308
+
133
- filepath1 = '売上管理表.xlsx'
309
+ print(df.groupby(['担当者名2(アポインター)','歩合率']).sum()['金額'])
310
+
134
-
311
+ df.to_csv("./appoint.csv",encoding="shift jis")
312
+
313
+
314
+
315
+
316
+
135
- filepath2 = '給与計算表.xlsx'
317
+ filepath1 = '給与計算表.xlsx'
136
-
137
-
138
-
139
-
318
+
319
+
320
+
321
+
322
+
323
+
324
+
325
+
140
326
 
141
327
  wb1 = load_workbook(filename=filepath1)
142
328
 
143
- ws1 = wb1['集金済み']
144
-
145
-
146
-
147
- wb2 = load_workbook(filename=filepath2)
148
-
149
- ws2 = wb2['給与計算表']
329
+ ws1 = wb1['給与計算表']
150
-
151
-
152
-
153
- df_by = df.groupby(["担当者名2", "歩合率"]).sum()
330
+
331
+
332
+
333
+
154
334
 
155
335
 
156
336
 
@@ -192,7 +372,7 @@
192
372
 
193
373
 
194
374
 
195
- ws2.title = '給与計算表'
375
+ ws1.title = '給与計算表'
196
376
 
197
377
 
198
378
 
@@ -202,13 +382,13 @@
202
382
 
203
383
  for x, cell in enumerate(row):
204
384
 
205
- ws2.cell(row= y+2, column= x+1, value=product_data[y][x])
385
+ ws1.cell(row= y+2, column= x+1, value=product_data[y][x])
206
-
207
-
208
-
209
-
210
-
211
-
386
+
387
+
388
+
389
+
390
+
391
+
212
392
 
213
393
  now = datetime.now()
214
394
 
@@ -216,59 +396,79 @@
216
396
 
217
397
  filename = 'torihiki.xlsx'
218
398
 
219
- wb2.save(filename)
220
-
221
-
222
-
223
- ```
224
-
225
- ###エラーコードです。
226
-
227
- ```ここに言語を入力
228
-
229
- Traceback (most recent call last):
230
-
231
- File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 6, in <module>
232
-
233
- df.to_excel('給与計算表.xlsx')
234
-
235
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\generic.py", line 2284, in to_excel
236
-
237
- formatter.write(
238
-
239
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\formats\excel.py", line 834, in write
240
-
241
- writer = ExcelWriter( # type: ignore[abstract]
242
-
243
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_openpyxl.py", line 52, in __init__
244
-
245
- super().__init__(
246
-
247
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 925, in __init__
248
-
249
- self.handles = get_handle(
250
-
251
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\common.py", line 710, in get_handle
252
-
253
- handle = open(handle, ioargs.mode)
254
-
255
- PermissionError: [Errno 13] Permission denied: '給与計算表.xlsx'
256
-
257
- >>>
258
-
259
- >>>
260
-
261
- ```
262
-
263
- df = pd.Dataframe()を下記にしてみましたが、エラーが出てしましました。
264
-
265
- df = pd.read_excel('売上管理表.xlsx',sheet_name = '集金済み')
266
-
267
- df.to_excel('給与計算表.xlsx')
399
+ wb1.save(filename)
400
+
401
+
402
+
403
+
404
+
405
+
406
+
407
+
408
+
409
+ ```
410
+
411
+ ###出力結果です。
412
+
413
+ ![イメージ説明](5cc417654f67f2e0cd6c8ffa918cae5b.png)
414
+
415
+ 見づらくて誠に申し訳ありませんが、torihikiというファイルが1つだけ出来上がりました。
416
+
417
+
418
+
419
+ ##中身です。
420
+
421
+ ![イメージ説明](c8c22831bafe53c4c179f6c07bc45df4.png)
422
+
423
+ 文字のズレ及び何も記載されていませんでした。
424
+
425
+ 下記が中身です。
426
+
427
+ ```ここに言語を入力
428
+
429
+ 給与計算書
430
+
431
+ 顧客コード 日付 担当者名1(クローザー) 担当者名2(アポインター) 住所1 〒 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 給与支給額
432
+
433
+ ¥0 12.0% ¥0
434
+
435
+ ¥-1,000 11.0% ¥0
436
+
437
+ ¥-2,000 10.0% ¥0
438
+
439
+ ¥-3,000 9.0% ¥0
440
+
441
+ ¥-4,000 8.0% ¥0
442
+
443
+ ¥-5,000 7.0% ¥0
444
+
445
+ ¥-6,000 6.0% ¥0
446
+
447
+ ¥-7,000 5.0% ¥0
448
+
449
+ ¥-8,000 4.0% ¥0
450
+
451
+ ¥-9,000 3.0% ¥0
452
+
453
+ ¥-10,000 2.0% ¥0
454
+
455
+ ¥-11,000 1.0% ¥0
456
+
457
+ 合計 ¥0
458
+
459
+
460
+
461
+ ```
462
+
463
+ グループ分けした担当分のファイルが出来上がりません。
464
+
465
+ 助けていいただけませんでしょうか。
268
466
 
269
467
  ご指摘の程何卒よろしくお願い致します。
270
468
 
271
- 基本的なことだとは、思いますが何卒宜しくお願い致します。
469
+
470
+
471
+
272
472
 
273
473
  ###元のデータです。
274
474
 
@@ -302,8 +502,8 @@
302
502
 
303
503
  ```
304
504
 
505
+
506
+
305
- ###給与計算表です。![イメージ説明](c866baf32fd4d78ca903df046623d828.png)
507
+ お力添えの程
306
-
307
-
308
508
 
309
509
  何卒、何卒よろしくお願い致します。

5

文法の修正

2021/08/27 05:28

投稿

MitAbe
MitAbe

スコア15

test CHANGED
File without changes
test CHANGED
@@ -124,7 +124,9 @@
124
124
 
125
125
  import pandas as pd
126
126
 
127
+ df = pd.read_excel('売上管理表.xlsx',sheet_name = '集金済み')
128
+
127
- df = pd.DataFrame()
129
+ df.to_excel('給与計算表.xlsx')
128
130
 
129
131
 
130
132
 
@@ -226,31 +228,45 @@
226
228
 
227
229
  Traceback (most recent call last):
228
230
 
229
- File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 18, in <module>
231
+ File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 6, in <module>
230
-
232
+
231
- df_by = df.groupby(["担当者名", "歩合率"]).sum()
233
+ df.to_excel('給与計算表.xlsx')
232
-
234
+
233
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\frame.py", line 7626, in groupby
235
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\generic.py", line 2284, in to_excel
234
-
236
+
235
- return DataFrameGroupBy(
237
+ formatter.write(
238
+
236
-
239
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\formats\excel.py", line 834, in write
240
+
241
+ writer = ExcelWriter( # type: ignore[abstract]
242
+
243
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_openpyxl.py", line 52, in __init__
244
+
245
+ super().__init__(
246
+
237
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\groupby\groupby.py", line 888, in __init__
247
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 925, in __init__
238
-
248
+
239
- grouper, exclusions, obj = get_grouper(
249
+ self.handles = get_handle(
240
-
250
+
241
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\groupby\grouper.py", line 860, in get_grouper
251
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\common.py", line 710, in get_handle
242
-
252
+
243
- raise KeyError(gpr)
253
+ handle = open(handle, ioargs.mode)
244
-
254
+
245
- KeyError: '担当者名2'
255
+ PermissionError: [Errno 13] Permission denied: '給与計算表.xlsx'
246
256
 
247
257
  >>>
248
258
 
259
+ >>>
260
+
249
261
  ```
250
262
 
251
- pandas使用の仕方及び、groupbyの名前の問題だと思うのですが、どのようにすればよいかわかりせん
263
+ df = pd.Dataframe()を下記にしてみましたが、エラー出てししました
264
+
252
-
265
+ df = pd.read_excel('売上管理表.xlsx',sheet_name = '集金済み')
266
+
253
-
267
+ df.to_excel('給与計算表.xlsx')
268
+
269
+ ご指摘の程何卒よろしくお願い致します。
254
270
 
255
271
  基本的なことだとは、思いますが何卒宜しくお願い致します。
256
272
 

4

文法の修正

2021/08/25 17:51

投稿

MitAbe
MitAbe

スコア15

test CHANGED
File without changes
test CHANGED
@@ -242,7 +242,7 @@
242
242
 
243
243
  raise KeyError(gpr)
244
244
 
245
- KeyError: '担当者名'
245
+ KeyError: '担当者名2'
246
246
 
247
247
  >>>
248
248
 

3

文法の修正

2021/08/25 17:13

投稿

MitAbe
MitAbe

スコア15

test CHANGED
@@ -1 +1 @@
1
- (再)売上を計上している顧客管理データから各営業担当ごとに給与明細まで自動で出したい
1
+ 売上を計上している顧客管理データからテンプレートへ転記
test CHANGED
@@ -4,9 +4,9 @@
4
4
 
5
5
  今現在下記の項目に取り組んでおります。
6
6
 
7
- ➀エクセルの特定の文字でマークした行だけをPythonで転記(特定のマークは*です。集金済みという意味です。)
7
+ ➀エクセルの特定の文字でマークした行だけをPythonで転記する(特定のマークは*です。集金済みという意味です。)
8
-
8
+
9
- ➁上記で転記できたデータを担当ごとに給与計算表テンプレートに転記したい。転記する項目は、契約日、担当名、売上金額です。その際、担当名と歩合率でグループ化をしたい。
9
+ ➁上記で転記できたデータを担当ごとに給与計算表テンプレートに転記したい。転記する項目は、担当名、売上金額です。その際、担当名と歩合率でグループ化しテンプレートに転記をしたい。
10
10
 
11
11
 
12
12
 
@@ -122,7 +122,9 @@
122
122
 
123
123
  from openpyxl import load_workbook
124
124
 
125
-
125
+ import pandas as pd
126
+
127
+ df = pd.DataFrame()
126
128
 
127
129
 
128
130
 
@@ -224,17 +226,29 @@
224
226
 
225
227
  Traceback (most recent call last):
226
228
 
227
- File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 16, in <module>
229
+ File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 18, in <module>
228
-
230
+
229
- df_by = df.groupby(["担当者名", "歩合率"]).sum()
231
+ df_by = df.groupby(["担当者名", "歩合率"]).sum()
232
+
230
-
233
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\frame.py", line 7626, in groupby
234
+
235
+ return DataFrameGroupBy(
236
+
237
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\groupby\groupby.py", line 888, in __init__
238
+
239
+ grouper, exclusions, obj = get_grouper(
240
+
241
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\groupby\grouper.py", line 860, in get_grouper
242
+
243
+ raise KeyError(gpr)
244
+
231
- NameError: name 'df' is not defined
245
+ KeyError: '担当者名'
232
246
 
233
247
  >>>
234
248
 
235
249
  ```
236
250
 
237
- pandas使用するではないか思うのですがどの部分挿入すればよいかがわかりません。
251
+ pandas使用の仕方及び、groupbyの名前の問題だと思うのですがどのようにすればよいかがわかりません。
238
252
 
239
253
 
240
254
 
@@ -272,6 +286,8 @@
272
286
 
273
287
  ```
274
288
 
289
+ ###給与計算表です。![イメージ説明](c866baf32fd4d78ca903df046623d828.png)
290
+
275
291
 
276
292
 
277
293
  何卒、何卒よろしくお願い致します。

2

文法の修正

2021/08/25 16:49

投稿

MitAbe
MitAbe

スコア15

test CHANGED
@@ -1 +1 @@
1
- (再)売上を計上している顧客管理データから各営業担当ごとに給与明細まで自動で出したい
1
+ (再)売上を計上している顧客管理データから各営業担当ごとに給与明細まで自動で出したい
test CHANGED
@@ -2,578 +2,276 @@
2
2
 
3
3
 
4
4
 
5
- 流れといたししては、
6
-
7
- 売り上げを計上しているエクセルから各営業担当さんごとに売り上げを集計した
8
-
9
-
10
-
11
- ➁各営業担当さんごとの集計を歩合率を計算するためのエクセルシートに歩合率毎に振り分けて記載したい
12
-
13
-
14
-
15
- ➂上記➁で計算したものを給与明細のテンプレートに記載したい
16
-
17
-
18
-
19
- 上記がやりたいこととなります。
20
-
21
- 毎回の手動での入をなくしたく奮闘致しおり
22
-
23
- ➀はアバイスを頂きクリアきました
24
-
25
- ➁~➂がうまくいきません。
26
-
27
- pandas とopenpyxlを使用すると思うのすが、
28
-
29
- 下記コード等記載いたしますので、何卒宜しくお願い致します。
30
-
31
- 上手く起動すれば、各営業さんごとの➁と➂のエクセルシートが出来上がったファイルができると思っております。
32
-
33
- なお添付写真は、自分で作成したダミーの顧客管理データ等です。
34
-
35
- ###記を行う為のファイル内です。
36
-
37
- ●matome2 → 売上を計上しているシートです。
38
-
39
- ●salary cal → 歩合率の計算の為のシートです。
40
-
41
- ●splite_list1 → ➀の出力結果です。
42
-
43
- ![イメージ説明](00d5f6e1ecc8d530d826a734f52333a8.png)
44
-
45
- ###売上を計上しているエクセルのコピーです。
46
-
47
- 1 2021/6/7 a1 近藤 阿部 千葉県2-12-14 工事 090-xxxx-xxxx ¥2,200,000 12.0%
48
-
49
- 2 2021/6/8 a2 近藤 阿部 神奈川県2-12-15 工事 91-xxxx-xxxx ¥4,560,000 12.0%
50
-
51
- 3 2021/6/9 a3 近藤 阿部 北海道 工事 92-xxxx-xxxx ¥1,236,000 12.0%
52
-
53
- 4 2021/6/10 a4 近藤 田中 沖縄県 工事 93-xxxx-xxxx ¥1,230,000 12.0%
54
-
55
- 5 2021/6/11 a5 近藤 佐藤 沖縄県 工事 94-xxxx-xxxx ¥1,430,000 12.0%
56
-
57
- 6 2021/6/12 a6 近藤 齋藤 沖縄県 工事 95-xxxx-xxxx ¥675,000 11.0%
58
-
59
- 7 2021/6/13 a7 近藤 阿部 沖縄県 工事 96-xxxx-xxxx ¥324,000 10.0%
60
-
61
- 8 2021/6/14 a8 近藤 阿部 沖縄県 工事 97-xxxx-xxxx ¥908,000 6.0%
62
-
63
- 9 2021/6/15 a9 近藤 阿部 沖縄県 工事 98-xxxx-xxxx ¥564,000 9.0%
64
-
65
- 10 2021/6/16 a10 近藤 阿部 沖縄県 工事 99-xxxx-xxxx ¥234,000 8.0%
66
-
67
- ###売上を計上しているエクセルです。
68
-
69
- ![イメージ説明](149c02d2a30cd692e4244a1adfca29ef.png)
70
-
71
-
72
-
73
- ###➁の歩合率を計算するためのエクセルのシートです。
74
-
75
- *歩合率は12%~1%まであります。
76
-
77
- ●12%の歩合率の計算式
78
-
79
-  =MAX(0,(SUM(D3:D8)-1000000)*0.12)
80
-
81
- ●11%の歩合率の計算式
82
-
83
-  =SUM(D9:D13)*0.11
84
-
85
-  *11%以降の歩合率の計算は全て11%のものと一緒です。12%の計算だけ少し違います。
86
-
87
-
88
-
89
- ![イメージ説明](d6d880929543eece28cb18e5b5f7407b.png)
90
-
91
- ###
92
-
93
- 給与計算書 担当名
94
-
95
- 契約日 お客様名 売上金額 割引率 歩合率 給与支給額
96
-
97
- ¥0 12.0%
98
-
99
- ¥0 12.0%
100
-
101
- ¥0 12.0%
102
-
103
- ¥0 12.0%
104
-
105
- ¥0 12.0%
106
-
107
- ¥0 12.0% ¥0
108
-
109
- ¥ -1,00011.0%
110
-
111
- ¥ -1,00011.0%
112
-
113
-
114
-
115
-
116
-
117
-
118
-
119
- ![イメージ説明](962aea1f7b343f73d141684519dadad1.png)
120
-
121
- ###➀の出力結果です。(教えて頂きました。)
122
-
123
- ```
124
-
125
- import pandas as pd
126
-
127
-
128
-
129
- in_file = 'matome.xlsx'
130
-
131
- df = pd.read_excel(in_file)
132
-
133
- print(df)
134
-
135
-
136
-
137
- print(df.groupby('担当者名2(アポインター)').sum()['金額'])
138
-
139
- ```
140
-
141
- ###上記の結果です。
142
-
143
- ```ここに言語を入力
144
-
145
- 顧客コード 日付 顧客名 担当者名(クローザー) ... 割引金額 金額 歩合率 備考
146
-
147
- 0 1 2021-06-07 a1 近藤 ... NaN 2200000 0.12 NaN
148
-
149
- 1 2 2021-06-08 a2 近藤 ... NaN 4560000 0.12 NaN
150
-
151
- 2 3 2021-06-09 a3 近藤 ... NaN 1236000 0.12 NaN
152
-
153
- 3 4 2021-06-10 a4 近藤 ... NaN 1230000 0.12 NaN
154
-
155
- 4 5 2021-06-11 a5 近藤 ... NaN 1430000 0.12 NaN
156
-
157
- 5 6 2021-06-12 a6 近藤 ... NaN 675000 0.11 NaN
158
-
159
- 6 7 2021-06-13 a7 近藤 ... NaN 324000 0.10 NaN
160
-
161
- 7 8 2021-06-14 a8 近藤 ... NaN 908000 0.06 NaN
162
-
163
- 8 9 2021-06-15 a9 近藤 ... NaN 564000 0.09 NaN
164
-
165
- 9 10 2021-06-16 a10 近藤 ... NaN 234000 0.08 NaN
166
-
167
-
168
-
169
- [10 rows x 15 columns]
170
-
171
- 担当者名2(アポインター)
172
-
173
- 佐藤 1430000
174
-
175
- 田中 1230000
176
-
177
- 阿部 10026000
178
-
179
- 齋藤 675000
180
-
181
- Name: 金額, dtype: int64
182
-
183
- ```
184
-
185
- ###➁を作る為のコードです。(その➀)
186
-
187
- まずは下記のコードで、JSON形式のファイルに保存が必要との事で作成し、その➁を実行するとうまくいくのかもしれませんが、エラーが解決できませんでした。
188
-
189
-
190
-
191
- ```
192
-
193
-
194
-
195
- import openpyxl as excel, json
196
-
197
-
198
-
199
-
200
-
201
- in_file = 'matome2.xlsx'
202
-
203
- out_file = 'matome2.json'
204
-
205
-
206
-
207
-
208
-
209
- def split_list():
210
-
211
- users = read_and_split(in_file)
212
-
213
- result = {}
214
-
215
- for name, rows in users.items():
216
-
217
- result[name] = calc_user(rows)
218
-
219
- print(name, result[name]['total'])
220
-
221
- with open(out_file, "wt") as fp:
222
-
223
- json.dump(result, fp)
224
-
225
-
226
-
227
- def read_and_split(in_file):
228
-
229
- users = {}
230
-
231
-
232
-
233
- sheet = excel.load_workbook(in_file).active
234
-
235
- for i, row in enumerate(sheet.iter_rows()):
5
+ 今現在下記の項目に取り組んでおりす。
6
+
7
+ ➀エクセルの特定の文字でマークした行だけPythonで転記(特定のマークは*です。金済みとう意味です。)
8
+
9
+ ➁上記で転記できたデータを担当ごとに給与計算表テンプレートに転記したい。転記する項目は、契約日、担当名、売上金額です。その際、担当名と歩合率でグループ化をしたい。
10
+
11
+
12
+
13
+ 質問は上記に関して2つございます。
14
+
15
+ お忙いとは思いますが、助けていだきく思ます。
16
+
17
+ 何卒よろしくお願い致します。
18
+
19
+
20
+
21
+ まず➀について、ヘッダーも転記したいのですが、出せんでした
22
+
23
+ 下記が自分が書いたコー及び結果
24
+
25
+
26
+
27
+ ###エクセルの特定の文字でマークした行だけをPythonで転記
28
+
29
+ ```ここ言語入力
30
+
31
+ import openpyxl
32
+
33
+
34
+
35
+ wb = openpyxl.load_workbook("売管理表.xlsx")
36
+
37
+ ws = wb["売上管理表"]
38
+
39
+
40
+
41
+
42
+
43
+
44
+
45
+ bikou_rows = []
46
+
47
+
48
+
49
+
50
+
51
+
52
+
53
+
54
+
55
+ for row in ws.iter_rows(min_row=3):
56
+
57
+
58
+
59
+ if row[16].value == "*":
60
+
61
+ bikou_rows.append(row)
236
62
 
237
63
 
238
64
 
239
- if i<4:
240
-
241
- continue
242
-
243
- values = [col.value for col in row]
244
-
245
- name = values[1]
246
-
247
- if name not in users: users[name] = []
248
-
249
- users[name].append(values)
250
-
251
- return users
252
-
253
-
254
-
255
- def calc_user(rows):
256
-
257
- total = 0
258
-
259
- items = []
260
-
261
-
262
-
263
- for row in rows:
264
-
265
- space, usercode, date, username, name, appointer, item, kouji, mobile, nazo, mail, cnt, price, per, bikou = row
266
-
267
- date_s = date.strftime('%m/%d')
268
-
269
- items.append([date_s, name, item, cnt, price, per])
270
-
271
-
272
-
273
- total += (cnt or 0) * (price or 0)
274
-
275
- return {'items':items, 'total': total}
276
-
277
-
278
-
279
- if __name__ == "__main__":
280
-
281
- split_list()
282
-
283
-
284
-
285
- ```
286
-
287
- ###上記エラーコード
65
+
66
+
67
+ ws2 = wb.create_sheet(title="集金済み")
68
+
69
+
70
+
71
+
72
+
73
+ for bikou_row in bikou_rows:
74
+
75
+ ws2.append([r.value for r in bikou_row])
76
+
77
+
78
+
79
+ wb.save("売上管理表.xlsx")
80
+
81
+
82
+
83
+ ```
84
+
85
+ ###出力結果です。
86
+
87
+ ![![イメージ説明](b04548c5b0e81182266dca327317f627.png)
88
+
89
+
90
+
91
+ 左下に【集金済み】との項目ができ下記のように転記ができました。
92
+
93
+
94
+
95
+ ![イメージ説明](58ae76a9d80d728713d8aa14f1066463.png)
96
+
97
+
98
+
99
+
100
+
101
+ 売上管理表に 日付、顧客名 などの行が転記できませんでした。
102
+
103
+ 読み込むときfor row in ws.iter_rows(min_row=3):の部分の問題だとは思うのですが、数字を変えても反映されませんでした。
104
+
105
+
106
+
107
+ ➁に関する質問です。
108
+
109
+  テンプレートには給与の計算式が入っておりますので、groupbyを使用し担当名 と歩合率をグループ化して転記できれば良いのではないか、と考えております。
110
+
111
+ 下記が自分が書いたコード、テンプレート及びエラーです。
112
+
113
+ ご指南程何卒よろしくお願い致します。
114
+
115
+
116
+
117
+ ###担当ごとの計算表を作成
118
+
119
+ ```ここに言語を入力
120
+
121
+ from datetime import datetime
122
+
123
+ from openpyxl import load_workbook
124
+
125
+
126
+
127
+
128
+
129
+ filepath1 = '売上管理表.xlsx'
130
+
131
+ filepath2 = '給与計算表.xlsx'
132
+
133
+
134
+
135
+
136
+
137
+ wb1 = load_workbook(filename=filepath1)
138
+
139
+ ws1 = wb1['集金済み']
140
+
141
+
142
+
143
+ wb2 = load_workbook(filename=filepath2)
144
+
145
+ ws2 = wb2['給与計算表']
146
+
147
+
148
+
149
+ df_by = df.groupby(["担当者名2", "歩合率"]).sum()
150
+
151
+
152
+
153
+ values1=[[cell.value for cell in row1] for row1 in ws1]
154
+
155
+
156
+
157
+
158
+
159
+ del values1[0]
160
+
161
+ conv_values1 = list(zip(*values1))
162
+
163
+ torihiki_list = list(set(conv_values1[0]))
164
+
165
+
166
+
167
+
168
+
169
+ for torihiki in torihiki_list:
170
+
171
+
172
+
173
+
174
+
175
+ product_data =[]
176
+
177
+
178
+
179
+
180
+
181
+ for i in range(len(values1)):
182
+
183
+ if values1[i][0] == torihiki:
184
+
185
+ product_data.append(values1[i])
186
+
187
+
188
+
189
+
190
+
191
+ ws2.title = '給与計算表'
192
+
193
+
194
+
195
+
196
+
197
+ for y, row in enumerate(product_data):
198
+
199
+ for x, cell in enumerate(row):
200
+
201
+ ws2.cell(row= y+2, column= x+1, value=product_data[y][x])
202
+
203
+
204
+
205
+
206
+
207
+
208
+
209
+ now = datetime.now()
210
+
211
+ hiduke = now.strftime('%Y-%m-%d')
212
+
213
+ filename = 'torihiki.xlsx'
214
+
215
+ wb2.save(filename)
216
+
217
+
218
+
219
+ ```
220
+
221
+ ###エラーコードです。
288
222
 
289
223
  ```ここに言語を入力
290
224
 
291
225
  Traceback (most recent call last):
292
226
 
293
- File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 44, in <module>
227
+ File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 16, in <module>
294
-
295
- split_list()
228
+
296
-
297
- File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 12, in split_list
298
-
299
- result[name] = calc_user(rows)
300
-
301
- File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 37, in calc_user
229
+ df_by = df.groupby(["担当者名2", "歩合率"]).sum()
302
-
230
+
303
- date_s = date.strftime('%m/%d')
231
+ NameError: name 'df' is not defined
304
-
305
- AttributeError: 'str' object has no attribute 'strftime'
306
232
 
307
233
  >>>
308
234
 
309
- =========== RESTART: C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py ==========
310
-
311
- Traceback (most recent call last):
312
-
313
- File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 44, in <module>
314
-
315
- split_list()
316
-
317
- File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 12, in split_list
318
-
319
- result[name] = calc_user(rows)
320
-
321
- File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 37, in calc_user
322
-
323
- date_s = date.strptime('%m/%d')
324
-
325
- AttributeError: 'str' object has no attribute 'strptime'
326
-
327
- >>>
328
-
329
-
330
-
331
- ```
332
-
333
- ###➁を作る為のコードです。(その➁)
334
-
335
-
336
-
337
- ```ここに言語を入力
338
-
339
- import pandas as pd
340
-
341
- import openpyxl as excel
342
-
343
-
344
-
345
- in_file = 'matome2.xlsx'
346
-
347
- out_dir = './salary cal01'
348
-
349
- template_file = 'salary cal.xlsx'
350
-
351
-
352
-
353
-
354
-
355
- df = pd.read_excel(in_file)
356
-
357
-
358
-
359
- def gen_salarycal():
360
-
361
- with open(in_file, "rt") as fp:
362
-
363
- users = json.load(fp)
364
-
365
- for name, date in users.items():
366
-
367
- make_user_salarycal(name, data)
368
-
369
-
370
-
371
- def make_user_salarycal(name, data):
372
-
373
- book = excel.load_workbook(template_file)
374
-
375
- sheet = book.active
376
-
377
-
378
-
379
- sheet["C1"] = name
380
-
381
- sheet["G61"] = data["total"]
382
-
383
-
384
-
385
- for i in enumerate(data['items']):
386
-
387
- date,name, price = it
388
-
389
- row = 3 + i
390
-
391
- sheet.cell(row, 2, date)
392
-
393
- sheet.cell(row, 3, name)
394
-
395
- sheet.cell(row, 4, price)
396
-
397
- sheet.cell(row, 7, per*price)
398
-
399
-
400
-
401
- out_file = out_dir+'/' + users + '様+xlsx'
402
-
403
- book.save(out_file)
404
-
405
- print("save: ", out_file)
406
-
407
-
408
-
409
- if __name__ == "__main__":
410
-
411
- gen_salarycal()
412
-
413
-
414
-
415
- ```
416
-
417
- ###上記のエラーコード
418
-
419
- ```
420
-
421
- Traceback (most recent call last):
422
-
423
- File "C:/Users/hannchou6/Desktop/新・給与関係/gen_salary.py", line 37, in <module>
424
-
425
- gen_salarycal()
426
-
427
- File "C:/Users/hannchou6/Desktop/新・給与関係/gen_salary.py", line 13, in gen_salarycal
428
-
429
- users = json.load(fp)
430
-
431
- NameError: name 'json' is not defined
432
-
433
- ```
434
-
435
- ###➁を作る為のコードです。(その➂)
436
-
437
- いろいろなサイトを見て書いてみました。
438
-
439
- ```
440
-
441
- from pathlib import Path
442
-
443
-
444
-
445
- import openpyxl as xl
446
-
447
- import pandas as pd
448
-
449
-
450
-
451
-
452
-
453
- output_dir = Path("salary01")
454
-
455
-
456
-
457
- output_dir.mkdir(exist_ok=True)
458
-
459
-
460
-
461
- df = pd.read_excel("matome2.xlsx")
462
-
463
-
464
-
465
-
466
-
467
-
468
-
469
-
470
-
471
- df_by = df.groupby(["担当者名2(アポインター)"]).sum()
472
-
473
-
474
-
475
-
476
-
477
- def save_excel(path, df):
478
-
479
- writer = pd.ExcelWriter(path)
480
-
481
- df.to_excel('salary cal')
482
-
483
- writer.save()
484
-
485
- display(df)
486
-
487
-
488
-
489
-
490
-
491
- for name, df_by_name in df_by.groupby(level=0):
492
-
493
-
494
-
495
- output_path = output_dir / f"{name}.xlsx"
496
-
497
- print(f"Saving result to '{output_path}'")
498
-
499
-
500
-
501
-
502
-
503
- save_excel(output_path, df_by_name)
504
-
505
-
506
-
507
- ```
508
-
509
-
510
-
511
- ###➁を作る為のコード(その➂)のエラーコードです。
512
-
513
- salary01のファイルには"佐藤"のエクセルシートは表示されますが、開くことができませんでした。
514
-
515
- ```ここに言語を入力
516
-
517
- Saving result to 'salary cal\佐藤.xlsx'
518
-
519
- Traceback (most recent call last):
520
-
521
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 713, in __new__
522
-
523
- engine = config.get_option(f"io.excel.{ext}.writer", silent=True)
524
-
525
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\_config\config.py", line 233, in __call__
526
-
527
- return self.__func__(*args, **kwds)
528
-
529
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\_config\config.py", line 105, in _get_option
530
-
531
- key = _get_single_key(pat, silent)
532
-
533
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\_config\config.py", line 91, in _get_single_key
534
-
535
- raise OptionError(f"No such keys(s): {repr(pat)}")
536
-
537
- pandas._config.config.OptionError: "No such keys(s): 'io.excel..writer'"
538
-
539
-
540
-
541
- The above exception was the direct cause of the following exception:
542
-
543
-
544
-
545
- Traceback (most recent call last):
546
-
547
- File "C:/Users/hannchou6/Desktop/新・給与関係/sample.py", line 32, in <module>
548
-
549
- save_excel(output_path, df_by_name)
550
-
551
- File "C:/Users/hannchou6/Desktop/新・給与関係/sample.py", line 21, in save_excel
552
-
553
- df.to_excel('salary cal')
554
-
555
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\generic.py", line 2189, in to_excel
556
-
557
- formatter.write(
558
-
559
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\formats\excel.py", line 815, in write
560
-
561
- writer = ExcelWriter( # type: ignore[abstract]
562
-
563
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 717, in __new__
564
-
565
- raise ValueError(f"No engine for filetype: '{ext}'") from err
566
-
567
- ValueError: No engine for filetype: ''
568
-
569
-
570
-
571
- ```
572
-
573
- 自分なりにいろいろと試してはおりますが、テンプレートのエクセルに出力することが、非常に難解でうまくいっておりません。
574
-
575
- 初心者ですので、質問の仕方等、至らぬ点も
576
-
577
- 多々あるかと思いますが、
578
-
579
- 何卒、ご教授の程宜しくお願い致します。
235
+ ```
236
+
237
+ pandasを使用するのではないかと、思うのですがどの部分に挿入すればよいかがわかりません。
238
+
239
+
240
+
241
+ 基本的なことだとは、思いますが何卒宜しくお願い致します。
242
+
243
+ ###元のデータです。
244
+
245
+ ```ここに言語を入力
246
+
247
+ 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) 〒 住所1 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 備考
248
+
249
+ 1 2021/6/7 a1 近藤 阿部 千葉県2-12-14 工事 090-xxxx-xxxx ¥2,200,000 12.0% *
250
+
251
+ 2 2021/6/8 a2 近藤 阿部 神奈川県2-12-15 工事 91-xxxx-xxxx ¥4,560,000 12.0%
252
+
253
+ 3 2021/6/9 a3 近藤 阿部 北海道 工事 92-xxxx-xxxx ¥1,236,000 12.0%
254
+
255
+ 4 2021/6/10 a4 近藤 田中 沖縄県 工事 93-xxxx-xxxx ¥1,230,000 12.0%
256
+
257
+ 5 2021/6/11 a5 近藤 佐藤 沖縄県 工事 94-xxxx-xxxx ¥1,430,000 12.0% *
258
+
259
+ 6 2021/6/12 a6 近藤 齋藤 沖縄県 工事 95-xxxx-xxxx ¥675,000 11.0% *
260
+
261
+ 7 2021/6/13 a7 近藤 阿部 沖縄県 工事 96-xxxx-xxxx ¥324,000 10.0%
262
+
263
+ 8 2021/6/14 a8 近藤 阿部 沖縄県 工事 97-xxxx-xxxx ¥908,000 6.0% *
264
+
265
+ 9 2021/6/15 a9 近藤 阿部 沖縄県 工事 98-xxxx-xxxx ¥564,000 9.0%
266
+
267
+ 10 2021/6/16 a10 近藤 阿部 沖縄県 工事 99-xxxx-xxxx ¥234,000 8.0%
268
+
269
+
270
+
271
+
272
+
273
+ ```
274
+
275
+
276
+
277
+ 何卒、何卒よろしくお願い致します。

1

文法修正

2021/08/25 15:57

投稿

MitAbe
MitAbe

スコア15

test CHANGED
@@ -1 +1 @@
1
- (再)売上を計上している顧客管理データから各営業担当ごとに給与明細まで自動で出したい
1
+ (再)売上を計上している顧客管理データから各営業担当ごとに給与明細まで自動で出したい
test CHANGED
@@ -42,9 +42,33 @@
42
42
 
43
43
  ![イメージ説明](00d5f6e1ecc8d530d826a734f52333a8.png)
44
44
 
45
+ ###売上を計上しているエクセルのコピーです。
46
+
47
+ 1 2021/6/7 a1 近藤 阿部 千葉県2-12-14 工事 090-xxxx-xxxx ¥2,200,000 12.0%
48
+
49
+ 2 2021/6/8 a2 近藤 阿部 神奈川県2-12-15 工事 91-xxxx-xxxx ¥4,560,000 12.0%
50
+
51
+ 3 2021/6/9 a3 近藤 阿部 北海道 工事 92-xxxx-xxxx ¥1,236,000 12.0%
52
+
53
+ 4 2021/6/10 a4 近藤 田中 沖縄県 工事 93-xxxx-xxxx ¥1,230,000 12.0%
54
+
55
+ 5 2021/6/11 a5 近藤 佐藤 沖縄県 工事 94-xxxx-xxxx ¥1,430,000 12.0%
56
+
57
+ 6 2021/6/12 a6 近藤 齋藤 沖縄県 工事 95-xxxx-xxxx ¥675,000 11.0%
58
+
59
+ 7 2021/6/13 a7 近藤 阿部 沖縄県 工事 96-xxxx-xxxx ¥324,000 10.0%
60
+
61
+ 8 2021/6/14 a8 近藤 阿部 沖縄県 工事 97-xxxx-xxxx ¥908,000 6.0%
62
+
63
+ 9 2021/6/15 a9 近藤 阿部 沖縄県 工事 98-xxxx-xxxx ¥564,000 9.0%
64
+
65
+ 10 2021/6/16 a10 近藤 阿部 沖縄県 工事 99-xxxx-xxxx ¥234,000 8.0%
66
+
45
67
  ###売上を計上しているエクセルです。
46
68
 
47
- ![イメージ説明](f4a3b0ce04a65acfac821c765eb595ea.png)
69
+ ![イメージ説明](149c02d2a30cd692e4244a1adfca29ef.png)
70
+
71
+
48
72
 
49
73
  ###➁の歩合率を計算するためのエクセルのシートです。
50
74
 
@@ -64,11 +88,31 @@
64
88
 
65
89
  ![イメージ説明](d6d880929543eece28cb18e5b5f7407b.png)
66
90
 
91
+ ###
92
+
93
+ 給与計算書 担当名
94
+
95
+ 契約日 お客様名 売上金額 割引率 歩合率 給与支給額
96
+
97
+ ¥0 12.0%
98
+
99
+ ¥0 12.0%
100
+
101
+ ¥0 12.0%
102
+
103
+ ¥0 12.0%
104
+
105
+ ¥0 12.0%
106
+
107
+ ¥0 12.0% ¥0
108
+
67
- ###➂の給与明細です。
109
+ ¥ -1,00011.0%
68
-
69
- ![イメージ説明](f14611b4cec490fc66e2d5a3169b69fe.png)
110
+
70
-
71
- ![イメージ説明](e71e39d9c0f504d1a3592cb9a2bc3121.png)
111
+ ¥ -1,00011.0%
112
+
113
+
114
+
115
+
72
116
 
73
117
 
74
118
 
@@ -76,144 +120,460 @@
76
120
 
77
121
  ###➀の出力結果です。(教えて頂きました。)
78
122
 
123
+ ```
124
+
125
+ import pandas as pd
126
+
127
+
128
+
129
+ in_file = 'matome.xlsx'
130
+
131
+ df = pd.read_excel(in_file)
132
+
133
+ print(df)
134
+
135
+
136
+
137
+ print(df.groupby('担当者名2(アポインター)').sum()['金額'])
138
+
139
+ ```
140
+
141
+ ###上記の結果です。
142
+
79
143
  ```ここに言語を入力
80
144
 
145
+ 顧客コード 日付 顧客名 担当者名(クローザー) ... 割引金額 金額 歩合率 備考
146
+
147
+ 0 1 2021-06-07 a1 近藤 ... NaN 2200000 0.12 NaN
148
+
149
+ 1 2 2021-06-08 a2 近藤 ... NaN 4560000 0.12 NaN
150
+
151
+ 2 3 2021-06-09 a3 近藤 ... NaN 1236000 0.12 NaN
152
+
153
+ 3 4 2021-06-10 a4 近藤 ... NaN 1230000 0.12 NaN
154
+
155
+ 4 5 2021-06-11 a5 近藤 ... NaN 1430000 0.12 NaN
156
+
157
+ 5 6 2021-06-12 a6 近藤 ... NaN 675000 0.11 NaN
158
+
159
+ 6 7 2021-06-13 a7 近藤 ... NaN 324000 0.10 NaN
160
+
161
+ 7 8 2021-06-14 a8 近藤 ... NaN 908000 0.06 NaN
162
+
163
+ 8 9 2021-06-15 a9 近藤 ... NaN 564000 0.09 NaN
164
+
165
+ 9 10 2021-06-16 a10 近藤 ... NaN 234000 0.08 NaN
166
+
167
+
168
+
169
+ [10 rows x 15 columns]
170
+
171
+ 担当者名2(アポインター)
172
+
173
+ 佐藤 1430000
174
+
175
+ 田中 1230000
176
+
177
+ 阿部 10026000
178
+
179
+ 齋藤 675000
180
+
181
+ Name: 金額, dtype: int64
182
+
183
+ ```
184
+
185
+ ###➁を作る為のコードです。(その➀)
186
+
187
+ まずは下記のコードで、JSON形式のファイルに保存が必要との事で作成し、その➁を実行するとうまくいくのかもしれませんが、エラーが解決できませんでした。
188
+
189
+
190
+
191
+ ```
192
+
193
+
194
+
195
+ import openpyxl as excel, json
196
+
197
+
198
+
199
+
200
+
201
+ in_file = 'matome2.xlsx'
202
+
203
+ out_file = 'matome2.json'
204
+
205
+
206
+
207
+
208
+
209
+ def split_list():
210
+
211
+ users = read_and_split(in_file)
212
+
213
+ result = {}
214
+
215
+ for name, rows in users.items():
216
+
217
+ result[name] = calc_user(rows)
218
+
219
+ print(name, result[name]['total'])
220
+
221
+ with open(out_file, "wt") as fp:
222
+
223
+ json.dump(result, fp)
224
+
225
+
226
+
227
+ def read_and_split(in_file):
228
+
229
+ users = {}
230
+
231
+
232
+
233
+ sheet = excel.load_workbook(in_file).active
234
+
235
+ for i, row in enumerate(sheet.iter_rows()):
236
+
237
+
238
+
239
+ if i<4:
240
+
241
+ continue
242
+
243
+ values = [col.value for col in row]
244
+
245
+ name = values[1]
246
+
247
+ if name not in users: users[name] = []
248
+
249
+ users[name].append(values)
250
+
251
+ return users
252
+
253
+
254
+
255
+ def calc_user(rows):
256
+
257
+ total = 0
258
+
259
+ items = []
260
+
261
+
262
+
263
+ for row in rows:
264
+
265
+ space, usercode, date, username, name, appointer, item, kouji, mobile, nazo, mail, cnt, price, per, bikou = row
266
+
267
+ date_s = date.strftime('%m/%d')
268
+
269
+ items.append([date_s, name, item, cnt, price, per])
270
+
271
+
272
+
273
+ total += (cnt or 0) * (price or 0)
274
+
275
+ return {'items':items, 'total': total}
276
+
277
+
278
+
279
+ if __name__ == "__main__":
280
+
281
+ split_list()
282
+
283
+
284
+
285
+ ```
286
+
287
+ ###上記のエラーコード
288
+
289
+ ```ここに言語を入力
290
+
291
+ Traceback (most recent call last):
292
+
293
+ File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 44, in <module>
294
+
295
+ split_list()
296
+
297
+ File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 12, in split_list
298
+
299
+ result[name] = calc_user(rows)
300
+
301
+ File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 37, in calc_user
302
+
303
+ date_s = date.strftime('%m/%d')
304
+
305
+ AttributeError: 'str' object has no attribute 'strftime'
306
+
307
+ >>>
308
+
309
+ =========== RESTART: C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py ==========
310
+
311
+ Traceback (most recent call last):
312
+
313
+ File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 44, in <module>
314
+
315
+ split_list()
316
+
317
+ File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 12, in split_list
318
+
319
+ result[name] = calc_user(rows)
320
+
321
+ File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 37, in calc_user
322
+
323
+ date_s = date.strptime('%m/%d')
324
+
325
+ AttributeError: 'str' object has no attribute 'strptime'
326
+
327
+ >>>
328
+
329
+
330
+
331
+ ```
332
+
333
+ ###➁を作る為のコードです。(その➁)
334
+
335
+
336
+
337
+ ```ここに言語を入力
338
+
81
339
  import pandas as pd
82
340
 
83
-
341
+ import openpyxl as excel
84
-
342
+
343
+
344
+
85
- in_file = 'matome.xlsx'
345
+ in_file = 'matome2.xlsx'
346
+
347
+ out_dir = './salary cal01'
348
+
349
+ template_file = 'salary cal.xlsx'
350
+
351
+
352
+
353
+
86
354
 
87
355
  df = pd.read_excel(in_file)
88
356
 
357
+
358
+
359
+ def gen_salarycal():
360
+
361
+ with open(in_file, "rt") as fp:
362
+
89
- print(df)
363
+ users = json.load(fp)
364
+
90
-
365
+ for name, date in users.items():
366
+
91
-
367
+ make_user_salarycal(name, data)
368
+
369
+
370
+
92
-
371
+ def make_user_salarycal(name, data):
372
+
373
+ book = excel.load_workbook(template_file)
374
+
375
+ sheet = book.active
376
+
377
+
378
+
379
+ sheet["C1"] = name
380
+
381
+ sheet["G61"] = data["total"]
382
+
383
+
384
+
385
+ for i in enumerate(data['items']):
386
+
387
+ date,name, price = it
388
+
389
+ row = 3 + i
390
+
391
+ sheet.cell(row, 2, date)
392
+
393
+ sheet.cell(row, 3, name)
394
+
395
+ sheet.cell(row, 4, price)
396
+
397
+ sheet.cell(row, 7, per*price)
398
+
399
+
400
+
93
- print(df.groupby('担当者名2(アポインター)').sum()['金額'])
401
+ out_file = out_dir+'/' + users + '様+xlsx'
402
+
94
-
403
+ book.save(out_file)
404
+
405
+ print("save: ", out_file)
406
+
407
+
408
+
409
+ if __name__ == "__main__":
410
+
411
+ gen_salarycal()
412
+
413
+
414
+
95
- ```
415
+ ```
96
-
416
+
97
- ###上記の結果です。
417
+ ###上記のエラーコード
418
+
419
+ ```
420
+
421
+ Traceback (most recent call last):
422
+
423
+ File "C:/Users/hannchou6/Desktop/新・給与関係/gen_salary.py", line 37, in <module>
424
+
425
+ gen_salarycal()
426
+
427
+ File "C:/Users/hannchou6/Desktop/新・給与関係/gen_salary.py", line 13, in gen_salarycal
428
+
429
+ users = json.load(fp)
430
+
431
+ NameError: name 'json' is not defined
432
+
433
+ ```
434
+
435
+ ###➁を作る為のコードです。(その➂)
436
+
437
+ いろいろなサイトを見て書いてみました。
438
+
439
+ ```
440
+
441
+ from pathlib import Path
442
+
443
+
444
+
445
+ import openpyxl as xl
446
+
447
+ import pandas as pd
448
+
449
+
450
+
451
+
452
+
453
+ output_dir = Path("salary01")
454
+
455
+
456
+
457
+ output_dir.mkdir(exist_ok=True)
458
+
459
+
460
+
461
+ df = pd.read_excel("matome2.xlsx")
462
+
463
+
464
+
465
+
466
+
467
+
468
+
469
+
470
+
471
+ df_by = df.groupby(["担当者名2(アポインター)"]).sum()
472
+
473
+
474
+
475
+
476
+
477
+ def save_excel(path, df):
478
+
479
+ writer = pd.ExcelWriter(path)
480
+
481
+ df.to_excel('salary cal')
482
+
483
+ writer.save()
484
+
485
+ display(df)
486
+
487
+
488
+
489
+
490
+
491
+ for name, df_by_name in df_by.groupby(level=0):
492
+
493
+
494
+
495
+ output_path = output_dir / f"{name}.xlsx"
496
+
497
+ print(f"Saving result to '{output_path}'")
498
+
499
+
500
+
501
+
502
+
503
+ save_excel(output_path, df_by_name)
504
+
505
+
506
+
507
+ ```
508
+
509
+
510
+
511
+ ###➁を作る為のコード(その➂)のエラーコードです。
512
+
513
+ salary01のファイルには"佐藤"のエクセルシートは表示されますが、開くことができませんでした。
98
514
 
99
515
  ```ここに言語を入力
100
516
 
101
- 顧客コード 日付 顧客名 担当者名(クローザー) ... 割引金額 金額 歩合率 備考
102
-
103
- 0 1 2021-06-07 a1 近藤 ... NaN 2200000 0.12 NaN
104
-
105
- 1 2 2021-06-08 a2 近藤 ... NaN 4560000 0.12 NaN
106
-
107
- 2 3 2021-06-09 a3 近藤 ... NaN 1236000 0.12 NaN
108
-
109
- 3 4 2021-06-10 a4 近藤 ... NaN 1230000 0.12 NaN
110
-
111
- 4 5 2021-06-11 a5 近藤 ... NaN 1430000 0.12 NaN
112
-
113
- 5 6 2021-06-12 a6 近藤 ... NaN 675000 0.11 NaN
114
-
115
- 6 7 2021-06-13 a7 近藤 ... NaN 324000 0.10 NaN
116
-
117
- 7 8 2021-06-14 a8 近藤 ... NaN 908000 0.06 NaN
118
-
119
- 8 9 2021-06-15 a9 近藤 ... NaN 564000 0.09 NaN
120
-
121
- 9 10 2021-06-16 a10 近藤 ... NaN 234000 0.08 NaN
122
-
123
-
124
-
125
- [10 rows x 15 columns]
126
-
127
- 担当者名2(アポインター)
128
-
129
- 佐藤 1430000
130
-
131
- 田中 1230000
132
-
133
- 阿部 10026000
134
-
135
- 齋藤 675000
136
-
137
- Name: 金額, dtype: int64
138
-
139
- ```
140
-
141
- ###➁を作る為のコードです。
142
-
143
- 全く反応いたしませんでした。
144
-
145
- ```
146
-
147
-
148
-
149
- import pandas as pd
150
-
151
- import openpyxl as excel
152
-
153
-
154
-
155
- in_file = 'matome2.xlsx'
156
-
157
- out_dir = './salary cal01'
158
-
159
- template_file = 'salary cal.xlsx'
160
-
161
-
162
-
163
-
164
-
165
- df = pd.read_excel(in_file)
166
-
167
- for name, date in users.items():
168
-
169
- make_user_salaraycal(name, data)
170
-
171
-
172
-
173
- def make_user_salarycal(name, data):
174
-
175
- book = excel.load_workbook(template_file)
176
-
177
- sheet = book.active
178
-
179
-
180
-
181
- sheet["C1"] = name
182
-
183
- sheet["G61"] = data["total"]
184
-
185
-
186
-
187
- for i in enumerate(data['items']):
188
-
189
- date,name, price = it
190
-
191
- row = 3 + i
192
-
193
- sheet.cell(row, 2, date)
194
-
195
- sheet.cell(row, 3, name)
196
-
197
- sheet.cell(row, 4, price)
198
-
199
- sheet.cell(row, 7, per*price)
200
-
201
-
202
-
203
- out_file = out_dir+'/' + users + '様+xlsx'
204
-
205
- book.save(out_file)
206
-
207
- print("save: ", out_file)
208
-
209
-
210
-
211
-
212
-
213
-
214
-
215
- ```
216
-
217
- 初心者ですので、質問の仕方等、至らぬ点も多々あるかと思いますが、
517
+ Saving result to 'salary cal\佐藤.xlsx'
518
+
519
+ Traceback (most recent call last):
520
+
521
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 713, in __new__
522
+
523
+ engine = config.get_option(f"io.excel.{ext}.writer", silent=True)
524
+
525
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\_config\config.py", line 233, in __call__
526
+
527
+ return self.__func__(*args, **kwds)
528
+
529
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\_config\config.py", line 105, in _get_option
530
+
531
+ key = _get_single_key(pat, silent)
532
+
533
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\_config\config.py", line 91, in _get_single_key
534
+
535
+ raise OptionError(f"No such keys(s): {repr(pat)}")
536
+
537
+ pandas._config.config.OptionError: "No such keys(s): 'io.excel..writer'"
538
+
539
+
540
+
541
+ The above exception was the direct cause of the following exception:
542
+
543
+
544
+
545
+ Traceback (most recent call last):
546
+
547
+ File "C:/Users/hannchou6/Desktop/新・給与関係/sample.py", line 32, in <module>
548
+
549
+ save_excel(output_path, df_by_name)
550
+
551
+ File "C:/Users/hannchou6/Desktop/新・給与関係/sample.py", line 21, in save_excel
552
+
553
+ df.to_excel('salary cal')
554
+
555
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\generic.py", line 2189, in to_excel
556
+
557
+ formatter.write(
558
+
559
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\formats\excel.py", line 815, in write
560
+
561
+ writer = ExcelWriter( # type: ignore[abstract]
562
+
563
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 717, in __new__
564
+
565
+ raise ValueError(f"No engine for filetype: '{ext}'") from err
566
+
567
+ ValueError: No engine for filetype: ''
568
+
569
+
570
+
571
+ ```
572
+
573
+ 自分なりにいろいろと試してはおりますが、テンプレートのエクセルに出力することが、非常に難解でうまくいっておりません。
574
+
575
+ 初心者ですので、質問の仕方等、至らぬ点も
576
+
577
+ 多々あるかと思いますが、
218
578
 
219
579
  何卒、ご教授の程宜しくお願い致します。