teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

8

文法の修正

2021/09/01 16:02

投稿

MitAbe
MitAbe

スコア15

title CHANGED
File without changes
body CHANGED
@@ -52,19 +52,51 @@
52
52
 
53
53
  ➁に関する質問です。
54
54
   テンプレートには給与の計算式が入っておりますので、groupbyを使用し担当名 と歩合率をグループ化して転記できれば良いのではないか、と考えております。
55
- 自分が行った手順は下記になります。
55
+ 自分が行った手順は下記になります。(2パターン試してみました。)
56
+ パターンaとbです。
57
+
58
+
59
+ 下記が、コード等になります。
60
+ ご指南の程何卒よろしくお願い致します。
61
+
62
+
63
+
64
+
65
+ ###転記するためのテンプレートです。
66
+
67
+ ![イメージ説明](5eb1aa268c1dfc53aac5d407aacd3677.png)
68
+
69
+ ```ここに言語を入力
70
+ 給与計算表
71
+ 顧客コード 日付 担当者名1(クローザー) 担当者名2(アポインター) 住所 〒 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 給与支給額
72
+ ¥0 12.0% ¥0
73
+ ¥-1,000 11.0% ¥0
74
+ ¥-2,000 10.0% ¥0
75
+ ¥-3,000 9.0% ¥0
76
+ ¥-4,000 8.0% ¥0
77
+ ¥-5,000 7.0% ¥0
78
+ ¥-6,000 6.0% ¥0
79
+ ¥-7,000 5.0% ¥0
80
+ ¥-8,000 4.0% ¥0
81
+ ¥-9,000 3.0% ¥0
82
+ ¥-10,000 2.0% ¥0
83
+ ¥-11,000 1.0% ¥0
84
+ 合計 ¥0
85
+
86
+ ```
87
+ ###パターンaのコードです。
88
+ ながれです。
56
89
  ・pandasのgroupbyを使用し、グループ分けを行う。
57
90
  ・上記をcsvファイルにし、保存する。
58
91
  ・上記csvファイルより、指定のテンプレートに出力を試みる。
59
92
  問題点
60
- ・指定のファイル名でexcelシートは立ち上がるが、中身に何も記載されていない。
93
+ ・指定のファイル名(torihiki)でexcelシートは立ち上がるが、中身に何も記載されていない。
61
94
  ・担当ごとにexcelファイルが作成される予定だが、1つしか作成されない。
62
-
63
- 下記、コード等になります。
95
+ ・ファイル名(torihiki)を開けると"循環参照"という注意事項出てくる
64
- ご指南程何卒よろしお願い致しま
96
+ ・12%項目がななってしま
65
-
66
- ###グループ分けのコードです。
67
- ```
97
+ ```ここに言語を入力
98
+ from datetime import datetime
99
+ from openpyxl import load_workbook
68
100
  import pandas as pd
69
101
  import csv
70
102
 
@@ -76,13 +108,55 @@
76
108
 
77
109
 
78
110
 
79
- print(df.groupby(['担当者名2(アポインター)','歩合率']).sum()['金額'])
111
+ df.groupby(['担当者名2(アポインター)','歩合率']).sum()['金額'].to_csv("./appoint.csv",encoding="shift jis")
80
- df.to_csv("./appoint.csv",encoding="shift jis")
81
112
 
113
+ filepath1 = '給与計算表.xlsx'
114
+
115
+
116
+
117
+
118
+ wb1 = load_workbook(filename=filepath1)
119
+ ws1 = wb1['給与計算表']
120
+
121
+
122
+
123
+ values1=[[cell.value for cell in row1] for row1 in ws1]
124
+
125
+
126
+ del values1[0]
127
+ conv_values1 = list(zip(*values1))
128
+ torihiki_list = list(set(conv_values1[0]))
129
+
130
+
131
+ for torihiki in torihiki_list:
132
+
133
+
134
+ product_data =[]
135
+
136
+
137
+ for i in range(len(values1)):
138
+ if values1[i][0] == torihiki:
139
+ product_data.append(values1[i])
140
+
141
+
142
+ ws1.title = '給与計算表'
143
+
144
+
145
+ for y, row in enumerate(product_data):
146
+ for x, cell in enumerate(row):
147
+ ws1.cell(row= y+2, column= x+1, value=product_data[y][x])
148
+
149
+
150
+
151
+ now = datetime.now()
152
+ hiduke = now.strftime('%Y-%m-%d')
153
+ filename = 'torihiki.xlsx'
154
+ wb1.save(filename)
155
+
82
156
  ```
83
- ###出力結果です。
157
+ ###出力結果
84
158
  ```ここに言語を入力
85
- Unnamed: 0 Unnamed: 1 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) \
159
+ Unnamed: 0 Unnamed: 1 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) \
86
160
  0 NaN NaN 1.0 2021-06-07 a1 近藤 阿部
87
161
  1 NaN NaN 5.0 2021-06-11 a5 近藤 佐藤
88
162
  2 NaN NaN 6.0 2021-06-12 a6 近藤 齋藤
@@ -95,37 +169,22 @@
95
169
  2 NaN 沖縄県 工事 95-xxxx-xxxx NaN NaN NaN 675000 0.11 *
96
170
  3 NaN 沖縄県 工事 97-xxxx-xxxx NaN NaN NaN 908000 0.06 *
97
171
  4 NaN NaN NaN NaN NaN NaN NaN 1900000 0.12 NaN
98
- 担当者名2(アポインター) 歩合率
99
- 佐藤 0.12 1430000
100
- 阿部 0.06 908000
101
- 0.12 4100000
102
- 齋藤 0.11 675000
103
- Name: 金額, dtype: int64
104
172
  >>>
105
- >>>
173
+
106
174
  ```
175
+ 見づらくて申し訳ありません。torihiki というexcelファイルが1つだけ出来上がりました。
176
+ ![イメージ説明](955fbdf9e588d5ea8bcd5a6566c450e1.png)
107
177
 
108
- ###転記するためのテンプレートです。
109
- ![イメージ説明](1509a204488bd3bb6ef02a5d62648a7c.png)
178
+ ![イメージ説明](14ba4fc8a48d148e25be22d110b2ca11.png)
110
- ```ここに言語を入力
111
- 給与計算書
112
- 顧客コード 日付 担当者名1(クローザー) 担当者名2(アポインター) 住所1 〒 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 給与支給額
113
- ¥0 12.0% ¥0
114
- ¥-1,000 11.0% ¥0
115
- ¥-2,000 10.0% ¥0
116
- ¥-3,000 9.0% ¥0
117
- ¥-4,000 8.0% ¥0
118
- ¥-5,000 7.0% ¥0
119
- ¥-6,000 6.0% ¥0
120
- ¥-7,000 5.0% ¥0
121
- ¥-8,000 4.0% ¥0
122
- ¥-9,000 3.0% ¥0
123
- ¥-10,000 2.0% ¥0
124
- ¥-11,000 1.0% ¥0
125
- 合計 ¥0
126
179
 
127
- ```
128
- ###転記するためのテプレです。
180
+ ###パターbのコです。
181
+ ながれです。
182
+ ・pandasのgroupbyを使用し、グループ分けを行う。
183
+ ・上記をexcelファイルにし、保存する。
184
+ ・上記excelファイルより、指定のテンプレートに出力を試みる。
185
+ 問題点
186
+ ・エラーコードが出てしまう。
187
+ ・担当者(アポインター)3名の不明なファイルが出来上がる。
129
188
  ```ここに言語を入力
130
189
  from datetime import datetime
131
190
  from openpyxl import load_workbook
@@ -139,105 +198,96 @@
139
198
  print(df)
140
199
 
141
200
 
201
+ df.groupby(['担当者名2(アポインター)','歩合率']).sum()['金額'].to_excel("./appoint.xlsx")
142
202
 
143
- print(df.groupby(['担当者名2(アポインター)','歩合率']).sum()['金額'])
144
- df.to_csv("./appoint.csv",encoding="shift jis")
203
+ filepath1 = './appoint.xlsx'
204
+ filepath2 = '給与計算表.xlsx'
145
205
 
146
206
 
147
- filepath1 = '給与計算表.xlsx'
148
-
149
207
 
150
208
 
151
-
152
209
  wb1 = load_workbook(filename=filepath1)
153
- ws1 = wb1['給与計算表']
210
+ ws1 = wb1['Sheet1']
154
211
 
155
212
 
156
213
 
214
+ wb2 = load_workbook(filename=filepath2)
215
+ ws2= wb2['給与計算表']
216
+
217
+
218
+
157
219
  values1=[[cell.value for cell in row1] for row1 in ws1]
158
-
159
220
 
221
+
160
222
  del values1[0]
161
223
  conv_values1 = list(zip(*values1))
162
224
  torihiki_list = list(set(conv_values1[0]))
163
-
164
225
 
226
+
165
227
  for torihiki in torihiki_list:
166
-
167
-
228
+
229
+
168
230
  product_data =[]
169
-
170
-
231
+
232
+
171
233
  for i in range(len(values1)):
172
234
  if values1[i][0] == torihiki:
173
235
  product_data.append(values1[i])
174
-
175
-
236
+
237
+
176
- ws1.title = '給与計算表'
238
+ ws2.title = 'torihiki'
177
-
178
-
239
+
240
+
179
241
  for y, row in enumerate(product_data):
180
242
  for x, cell in enumerate(row):
181
243
  ws1.cell(row= y+2, column= x+1, value=product_data[y][x])
182
-
183
-
184
-
185
- now = datetime.now()
186
- hiduke = now.strftime('%Y-%m-%d')
187
- filename = 'torihiki.xlsx'
188
- wb1.save(filename)
189
244
 
190
245
 
191
246
 
247
+ now = datetime.now()
248
+ hiduke = now.strftime('%Y-%m-%d')
249
+ filename = torihiki
250
+ wb2.save(filename)
192
251
 
193
252
  ```
194
- ###出力結果です。
253
+ ###出力結果
195
- ![イメージ説明](5cc417654f67f2e0cd6c8ffa918cae5b.png)
196
- 見づらくて誠に申し訳ありませんが、torihikiというファイルが1つだけ出来上がりました。
197
-
198
- ##中身です。
199
- ![イメージ説明](c8c22831bafe53c4c179f6c07bc45df4.png)
200
- 文字のズレ及び何も記載されていませんでした。
201
- 下記が中身です。
202
254
  ```ここに言語を入力
203
- 給与計算書
255
+ =====
204
- 顧客コード 日付 担当者名1(クローザー) 担当者名2(アポインター) 住所1 〒 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 給与支給額
256
+ Unnamed: 0 Unnamed: 1 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) \
205
- ¥0 12.0% ¥0
206
- ¥-1,000 11.0% ¥0
257
+ 0 NaN NaN 1.0 2021-06-07 a1 近藤 阿部
207
- ¥-2,000 10.0% ¥0
258
+ 1 NaN NaN 5.0 2021-06-11 a5 近藤 佐藤
208
- ¥-3,000 9.0% ¥0
209
- ¥-4,000 8.0% ¥0
210
- ¥-5,000 7.0% ¥0
211
- ¥-6,000 6.0% ¥0
259
+ 2 NaN NaN 6.0 2021-06-12 a6 近藤 齋藤
212
- ¥-7,000 5.0% ¥0
213
- ¥-8,000 4.0% ¥0
260
+ 3 NaN NaN 8.0 2021-06-14 a8 近藤 阿部
214
- ¥-9,000 3.0% ¥0
215
- ¥-10,000 2.0% ¥0
261
+ 4 NaN NaN NaN NaT NaN 近藤 阿部
216
- ¥-11,000 1.0% ¥0
217
- 合計 ¥0
218
262
 
263
+ 〒 住所1 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 備考
264
+ 0 NaN 千葉県2-12-14 工事 090-xxxx-xxxx NaN NaN NaN 2200000 0.12 *
265
+ 1 NaN 沖縄県 工事 94-xxxx-xxxx NaN NaN NaN 1430000 0.12 *
266
+ 2 NaN 沖縄県 工事 95-xxxx-xxxx NaN NaN NaN 675000 0.11 *
267
+ 3 NaN 沖縄県 工事 97-xxxx-xxxx NaN NaN NaN 908000 0.06 *
268
+ 4 NaN NaN NaN NaN NaN NaN NaN 1900000 0.12 NaN
269
+ Traceback (most recent call last):
270
+ File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 62, in <module>
271
+ wb2.save(filename)
272
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\workbook\workbook.py", line 392, in save
273
+ save_workbook(self, filename)
274
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\writer\excel.py", line 293, in save_workbook
275
+ writer.save()
276
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\writer\excel.py", line 275, in save
277
+ self.write_data()
278
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\openpyxl\writer\excel.py", line 67, in write_data
279
+ archive.writestr(ARC_APP, tostring(props.to_tree()))
280
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1802, in writestr
281
+ with self.open(zinfo, mode='w') as dest:
282
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1505, in open
283
+ return self._open_to_write(zinfo, force_zip64=force_zip64)
284
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 1600, in _open_to_write
285
+ self.fp.write(zinfo.FileHeader(zip64))
286
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\zipfile.py", line 759, in write
287
+ n = self.fp.write(data)
288
+ AttributeError: 'NoneType' object has no attribute 'write'
289
+ >>>
219
290
  ```
220
- グループ分けした担当分のファルが出来上がりません。
291
+ ![メージ説明](40b0e1c5ae8687501d561b591fd67816.png)
221
- 助けていいただけませんでしょうか。
222
- ご指摘の程何卒よろしくお願い致します。
223
292
 
224
-
225
- ###元のデータです。
226
- ```ここに言語を入力
227
- 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) 〒 住所1 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 備考
228
- 1 2021/6/7 a1 近藤 阿部 千葉県2-12-14 工事 090-xxxx-xxxx ¥2,200,000 12.0% *
229
- 2 2021/6/8 a2 近藤 阿部 神奈川県2-12-15 工事 91-xxxx-xxxx ¥4,560,000 12.0%
230
- 3 2021/6/9 a3 近藤 阿部 北海道 工事 92-xxxx-xxxx ¥1,236,000 12.0%
231
- 4 2021/6/10 a4 近藤 田中 沖縄県 工事 93-xxxx-xxxx ¥1,230,000 12.0%
232
- 5 2021/6/11 a5 近藤 佐藤 沖縄県 工事 94-xxxx-xxxx ¥1,430,000 12.0% *
233
- 6 2021/6/12 a6 近藤 齋藤 沖縄県 工事 95-xxxx-xxxx ¥675,000 11.0% *
234
- 7 2021/6/13 a7 近藤 阿部 沖縄県 工事 96-xxxx-xxxx ¥324,000 10.0%
235
- 8 2021/6/14 a8 近藤 阿部 沖縄県 工事 97-xxxx-xxxx ¥908,000 6.0% *
236
- 9 2021/6/15 a9 近藤 阿部 沖縄県 工事 98-xxxx-xxxx ¥564,000 9.0%
237
- 10 2021/6/16 a10 近藤 阿部 沖縄県 工事 99-xxxx-xxxx ¥234,000 8.0%
238
-
239
-
240
- ```
241
-
242
- お力添えの程
243
- 何卒、何卒よろしくお願い致します。
293
+ ご指摘の程、何卒しくお願い致します。

7

文法の修正

2021/09/01 16:02

投稿

MitAbe
MitAbe

スコア15

title CHANGED
File without changes
body CHANGED
@@ -15,31 +15,19 @@
15
15
  ###➀エクセルの特定の文字でマークした行だけをPythonで転記
16
16
  ```ここに言語を入力
17
17
  import openpyxl
18
-
19
-
20
18
  wb = openpyxl.load_workbook("売上管理表.xlsx")
21
19
  ws = wb["売上管理表"]
22
-
23
-
24
-
25
20
  bikou_rows = []
26
21
 
27
-
28
-
29
-
30
22
  for row in ws.iter_rows(min_row=4):
31
23
 
32
24
  if row[16].value == "*" or row[16].value == "備考":
33
25
  bikou_rows.append(row)
34
-
35
-
36
26
  ws2 = wb.create_sheet(title="集金済み")
37
27
 
38
-
39
28
  for bikou_row in bikou_rows:
40
29
  ws2.append([r.value for r in bikou_row])
41
30
 
42
-
43
31
  wb.save("売上管理表.xlsx")
44
32
 
45
33
  ```

6

文法修正

2021/09/01 15:19

投稿

MitAbe
MitAbe

スコア15

title CHANGED
File without changes
body CHANGED
@@ -1,20 +1,22 @@
1
1
  日付順に記載している顧客管理データ(売上も計上している)から各営業さんごとの給与明細まで出したくpythonを勉強しております。
2
2
 
3
3
  今現在下記の項目に取り組んでおります。
4
- ➀エクセルの特定の文字でマークした行だけをPythonで転記する(特定のマークは*です。集金済みという意味です。)
5
- ➁上記で転記できたデータを担当ごとに給与計算表テンプレートに転記したい。転記する項目は、担当名、売上金額です。その際、担当名と歩合率でグループ化しテンプレートに転記をしたい。
4
+ データを担当ごとに給与計算表テンプレートに転記したい。転記する項目は、担当名、売上金額です。その際、担当名と歩合率でグループ化しテンプレートに転記をしたい。
5
+ 流れといたしましては、
6
+ ➀元のデータから、特定の項目のみを抽出し、excelに転記致します(*の部分です。)
7
+ ➁上記で、転記したデータをグループ分けし、その後テンプレートに出力する。
6
8
 
7
- 質問は上記に関して2つございます。
9
+ 上記となります。
8
10
  お忙しいとは思いますが、助けていただきたく思います。
9
11
  何卒よろしくお願い致します。
10
12
 
11
- まず➀について、ヘッダーも転記したいのですが、出てきませんでした。
12
- 下記が自分が書いたコード及び結果です。
13
13
 
14
+
14
- ###エクセルの特定の文字でマークした行だけをPythonで転記
15
+ ###エクセルの特定の文字でマークした行だけをPythonで転記
15
16
  ```ここに言語を入力
16
17
  import openpyxl
17
18
 
19
+
18
20
  wb = openpyxl.load_workbook("売上管理表.xlsx")
19
21
  ws = wb["売上管理表"]
20
22
 
@@ -25,9 +27,9 @@
25
27
 
26
28
 
27
29
 
28
- for row in ws.iter_rows(min_row=3):
30
+ for row in ws.iter_rows(min_row=4):
29
-
31
+
30
- if row[16].value == "*":
32
+ if row[16].value == "*" or row[16].value == "備考":
31
33
  bikou_rows.append(row)
32
34
 
33
35
 
@@ -37,6 +39,7 @@
37
39
  for bikou_row in bikou_rows:
38
40
  ws2.append([r.value for r in bikou_row])
39
41
 
42
+
40
43
  wb.save("売上管理表.xlsx")
41
44
 
42
45
  ```
@@ -45,37 +48,124 @@
45
48
 
46
49
  左下に【集金済み】との項目ができ下記のように転記ができました。
47
50
 
48
- ![イメージ説明](58ae76a9d80d728713d8aa14f1066463.png)
51
+ ![イメージ説明](e8bc80376c9443aeef89fd4ce55d0b80.png)
49
52
 
50
53
 
51
- 売上管理表に 日付、顧客名 などの行が転記できませんでした。
52
- 読み込むときfor row in ws.iter_rows(min_row=3):の部分の問題だとは思うのですが、数字を変えても反映されませんでした。
53
54
 
55
+ ```ここに言語を入力
56
+ 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) 〒 住所1 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 備考
57
+ 1 2021-06-07 0:00:00 a1 近藤 阿部 千葉県2-12-14 工事 090-xxxx-xxxx 2200000 0.12 *
58
+ 5 2021-06-11 0:00:00 a5 近藤 佐藤 沖縄県 工事 94-xxxx-xxxx 1430000 0.12 *
59
+ 6 2021-06-12 0:00:00 a6 近藤 齋藤 沖縄県 工事 95-xxxx-xxxx 675000 0.11 *
60
+ 8 2021-06-14 0:00:00 a8 近藤 阿部 沖縄県 工事 97-xxxx-xxxx 908000 0.06 *
61
+ 近藤 阿部 1900000 0.12
62
+
63
+ ```
64
+
54
65
  ➁に関する質問です。
55
66
   テンプレートには給与の計算式が入っておりますので、groupbyを使用し担当名 と歩合率をグループ化して転記できれば良いのではないか、と考えております。
67
+ 自分が行った手順は下記になります。
68
+ ・pandasのgroupbyを使用し、グループ分けを行う。
69
+ ・上記をcsvファイルにし、保存する。
56
- が自分が書いたコード、テンプレート及びエラーです
70
+ ・上csvファイルより指定のテンプレートに出力を試みる
71
+ 問題点
72
+ ・指定のファイル名でexcelシートは立ち上がるが、中身に何も記載されていない。
73
+ ・担当ごとにexcelファイルが作成される予定だが、1つしか作成されない。
74
+
75
+ 下記が、コード等になります。
57
76
  ご指南の程何卒よろしくお願い致します。
58
77
 
59
- ###担当ごと計算表を作成
78
+ ###グループ分けコードです。
79
+ ```
80
+ import pandas as pd
81
+ import csv
82
+
83
+ df = pd.read_excel('売上管理表.xlsx',sheet_name = '集金済み')
84
+ pd.set_option('display.max_columns',None)
85
+ pd.set_option('display.max_rows',13)
86
+
87
+ print(df)
88
+
89
+
90
+
91
+ print(df.groupby(['担当者名2(アポインター)','歩合率']).sum()['金額'])
92
+ df.to_csv("./appoint.csv",encoding="shift jis")
93
+
94
+ ```
95
+ ###出力結果です。
60
96
  ```ここに言語を入力
97
+ Unnamed: 0 Unnamed: 1 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) \
98
+ 0 NaN NaN 1.0 2021-06-07 a1 近藤 阿部
99
+ 1 NaN NaN 5.0 2021-06-11 a5 近藤 佐藤
100
+ 2 NaN NaN 6.0 2021-06-12 a6 近藤 齋藤
101
+ 3 NaN NaN 8.0 2021-06-14 a8 近藤 阿部
102
+ 4 NaN NaN NaN NaT NaN 近藤 阿部
103
+
104
+ 〒 住所1 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 備考
105
+ 0 NaN 千葉県2-12-14 工事 090-xxxx-xxxx NaN NaN NaN 2200000 0.12 *
106
+ 1 NaN 沖縄県 工事 94-xxxx-xxxx NaN NaN NaN 1430000 0.12 *
107
+ 2 NaN 沖縄県 工事 95-xxxx-xxxx NaN NaN NaN 675000 0.11 *
108
+ 3 NaN 沖縄県 工事 97-xxxx-xxxx NaN NaN NaN 908000 0.06 *
109
+ 4 NaN NaN NaN NaN NaN NaN NaN 1900000 0.12 NaN
110
+ 担当者名2(アポインター) 歩合率
111
+ 佐藤 0.12 1430000
112
+ 阿部 0.06 908000
113
+ 0.12 4100000
114
+ 齋藤 0.11 675000
115
+ Name: 金額, dtype: int64
116
+ >>>
117
+ >>>
118
+ ```
119
+
120
+ ###転記するためのテンプレートです。
121
+ ![イメージ説明](1509a204488bd3bb6ef02a5d62648a7c.png)
122
+ ```ここに言語を入力
123
+ 給与計算書
124
+ 顧客コード 日付 担当者名1(クローザー) 担当者名2(アポインター) 住所1 〒 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 給与支給額
125
+ ¥0 12.0% ¥0
126
+ ¥-1,000 11.0% ¥0
127
+ ¥-2,000 10.0% ¥0
128
+ ¥-3,000 9.0% ¥0
129
+ ¥-4,000 8.0% ¥0
130
+ ¥-5,000 7.0% ¥0
131
+ ¥-6,000 6.0% ¥0
132
+ ¥-7,000 5.0% ¥0
133
+ ¥-8,000 4.0% ¥0
134
+ ¥-9,000 3.0% ¥0
135
+ ¥-10,000 2.0% ¥0
136
+ ¥-11,000 1.0% ¥0
137
+ 合計 ¥0
138
+
139
+ ```
140
+ ###転記するためのテンプレートです。
141
+ ```ここに言語を入力
61
142
  from datetime import datetime
62
143
  from openpyxl import load_workbook
63
144
  import pandas as pd
145
+ import csv
146
+
64
147
  df = pd.read_excel('売上管理表.xlsx',sheet_name = '集金済み')
148
+ pd.set_option('display.max_columns',None)
65
- df.to_excel('給与計算表.xlsx')
149
+ pd.set_option('display.max_rows',13)
66
150
 
151
+ print(df)
152
+
153
+
154
+
67
- filepath1 = '売上管理表.xlsx'
155
+ print(df.groupby(['担当者名2(アポインター)','歩合率']).sum()['金額'])
156
+ df.to_csv("./appoint.csv",encoding="shift jis")
157
+
158
+
68
- filepath2 = '給与計算表.xlsx'
159
+ filepath1 = '給与計算表.xlsx'
69
160
 
70
161
 
162
+
163
+
71
164
  wb1 = load_workbook(filename=filepath1)
72
- ws1 = wb1['集金済み']
73
-
74
- wb2 = load_workbook(filename=filepath2)
75
- ws2 = wb2['給与計算表']
165
+ ws1 = wb1['給与計算表']
76
166
 
77
- df_by = df.groupby(["担当者名2", "歩合率"]).sum()
78
167
 
168
+
79
169
  values1=[[cell.value for cell in row1] for row1 in ws1]
80
170
 
81
171
 
@@ -95,45 +185,55 @@
95
185
  product_data.append(values1[i])
96
186
 
97
187
 
98
- ws2.title = '給与計算表'
188
+ ws1.title = '給与計算表'
99
189
 
100
190
 
101
191
  for y, row in enumerate(product_data):
102
192
  for x, cell in enumerate(row):
103
- ws2.cell(row= y+2, column= x+1, value=product_data[y][x])
193
+ ws1.cell(row= y+2, column= x+1, value=product_data[y][x])
104
194
 
105
195
 
106
-
196
+
107
197
  now = datetime.now()
108
198
  hiduke = now.strftime('%Y-%m-%d')
109
199
  filename = 'torihiki.xlsx'
110
- wb2.save(filename)
200
+ wb1.save(filename)
111
201
 
202
+
203
+
204
+
112
205
  ```
113
- ###エラーコードです。
206
+ ###出力結果です。
207
+ ![イメージ説明](5cc417654f67f2e0cd6c8ffa918cae5b.png)
208
+ 見づらくて誠に申し訳ありませんが、torihikiというファイルが1つだけ出来上がりました。
209
+
210
+ ##中身です。
211
+ ![イメージ説明](c8c22831bafe53c4c179f6c07bc45df4.png)
212
+ 文字のズレ及び何も記載されていませんでした。
213
+ 下記が中身です。
114
214
  ```ここに言語を入力
115
- Traceback (most recent call last):
215
+ 給与計算書
116
- File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 6, in <module>
216
+ 顧客コード 日付 担当者名1(クローザー) 担当者名2(アポインター) 住所1 〒 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 給与支給額
217
+ ¥0 12.0% ¥0
117
- df.to_excel('給与計算表.xlsx')
218
+ ¥-1,000 11.0% ¥0
118
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\generic.py", line 2284, in to_excel
219
+ ¥-2,000 10.0% ¥0
119
- formatter.write(
220
+ ¥-3,000 9.0% ¥0
120
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\formats\excel.py", line 834, in write
121
- writer = ExcelWriter( # type: ignore[abstract]
221
+ ¥-4,000 8.0% ¥0
122
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_openpyxl.py", line 52, in __init__
222
+ ¥-5,000 7.0% ¥0
223
+ ¥-6,000 6.0% ¥0
224
+ ¥-7,000 5.0% ¥0
225
+ ¥-8,000 4.0% ¥0
226
+ ¥-9,000 3.0% ¥0
123
- super().__init__(
227
+ ¥-10,000 2.0% ¥0
124
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 925, in __init__
125
- self.handles = get_handle(
228
+ ¥-11,000 1.0% ¥0
126
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\common.py", line 710, in get_handle
127
- handle = open(handle, ioargs.mode)
128
- PermissionError: [Errno 13] Permission denied: '給与計算表.xlsx'
129
- >>>
229
+ 合計 ¥0
130
- >>>
230
+
131
231
  ```
132
- df = pd.Dataframe()を下記にてみましたが、エラーがてししました
232
+ グループ分けした担当分のファイルが出来上がりせん
133
- df = pd.read_excel('売上管理表.xlsx',sheet_name = '集金済み')
134
- df.to_excel('給与計算表.xlsx')
233
+ 助けていいただけませんでしょうか。
135
234
  ご指摘の程何卒よろしくお願い致します。
136
- 基本的なことだとは、思いますが何卒宜しくお願い致します。
235
+
236
+
137
237
  ###元のデータです。
138
238
  ```ここに言語を入力
139
239
  顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) 〒 住所1 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 備考
@@ -150,6 +250,6 @@
150
250
 
151
251
 
152
252
  ```
153
- ###給与計算表です。![イメージ説明](c866baf32fd4d78ca903df046623d828.png)
154
253
 
254
+ お力添えの程
155
255
  何卒、何卒よろしくお願い致します。

5

文法の修正

2021/08/27 05:28

投稿

MitAbe
MitAbe

スコア15

title CHANGED
File without changes
body CHANGED
@@ -61,7 +61,8 @@
61
61
  from datetime import datetime
62
62
  from openpyxl import load_workbook
63
63
  import pandas as pd
64
+ df = pd.read_excel('売上管理表.xlsx',sheet_name = '集金済み')
64
- df = pd.DataFrame()
65
+ df.to_excel('給与計算表.xlsx')
65
66
 
66
67
  filepath1 = '売上管理表.xlsx'
67
68
  filepath2 = '給与計算表.xlsx'
@@ -112,19 +113,26 @@
112
113
  ###エラーコードです。
113
114
  ```ここに言語を入力
114
115
  Traceback (most recent call last):
115
- File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 18, in <module>
116
+ File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 6, in <module>
116
- df_by = df.groupby(["担当者名", "歩合率"]).sum()
117
+ df.to_excel('給与計算表.xlsx')
117
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\frame.py", line 7626, in groupby
118
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\generic.py", line 2284, in to_excel
118
- return DataFrameGroupBy(
119
+ formatter.write(
120
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\formats\excel.py", line 834, in write
121
+ writer = ExcelWriter( # type: ignore[abstract]
122
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_openpyxl.py", line 52, in __init__
123
+ super().__init__(
119
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\groupby\groupby.py", line 888, in __init__
124
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 925, in __init__
120
- grouper, exclusions, obj = get_grouper(
125
+ self.handles = get_handle(
121
- File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\groupby\grouper.py", line 860, in get_grouper
126
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\common.py", line 710, in get_handle
122
- raise KeyError(gpr)
127
+ handle = open(handle, ioargs.mode)
123
- KeyError: '担当者名2'
128
+ PermissionError: [Errno 13] Permission denied: '給与計算表.xlsx'
124
129
  >>>
130
+ >>>
125
131
  ```
126
- pandas使用の仕方及び、groupbyの名前の問題だと思うのですが、どのようにすればよいかわかりせん
132
+ df = pd.Dataframe()を下記にしてみましたが、エラー出てししました
127
-
133
+ df = pd.read_excel('売上管理表.xlsx',sheet_name = '集金済み')
134
+ df.to_excel('給与計算表.xlsx')
135
+ ご指摘の程何卒よろしくお願い致します。
128
136
  基本的なことだとは、思いますが何卒宜しくお願い致します。
129
137
  ###元のデータです。
130
138
  ```ここに言語を入力

4

文法の修正

2021/08/25 17:51

投稿

MitAbe
MitAbe

スコア15

title CHANGED
File without changes
body CHANGED
@@ -120,7 +120,7 @@
120
120
  grouper, exclusions, obj = get_grouper(
121
121
  File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\groupby\grouper.py", line 860, in get_grouper
122
122
  raise KeyError(gpr)
123
- KeyError: '担当者名'
123
+ KeyError: '担当者名2'
124
124
  >>>
125
125
  ```
126
126
  pandas使用の仕方及び、groupbyの名前の問題だと思うのですが、どのようにすればよいかがわかりません。

3

文法の修正

2021/08/25 17:13

投稿

MitAbe
MitAbe

スコア15

title CHANGED
@@ -1,1 +1,1 @@
1
- (再)売上を計上している顧客管理データから各営業担当ごとに給与明細まで自動で出したい
1
+ 売上を計上している顧客管理データからテンプレートへ転記
body CHANGED
@@ -1,8 +1,8 @@
1
1
  日付順に記載している顧客管理データ(売上も計上している)から各営業さんごとの給与明細まで出したくpythonを勉強しております。
2
2
 
3
3
  今現在下記の項目に取り組んでおります。
4
- ➀エクセルの特定の文字でマークした行だけをPythonで転記(特定のマークは*です。集金済みという意味です。)
4
+ ➀エクセルの特定の文字でマークした行だけをPythonで転記する(特定のマークは*です。集金済みという意味です。)
5
- ➁上記で転記できたデータを担当ごとに給与計算表テンプレートに転記したい。転記する項目は、契約日、担当名、売上金額です。その際、担当名と歩合率でグループ化をしたい。
5
+ ➁上記で転記できたデータを担当ごとに給与計算表テンプレートに転記したい。転記する項目は、担当名、売上金額です。その際、担当名と歩合率でグループ化しテンプレートに転記をしたい。
6
6
 
7
7
  質問は上記に関して2つございます。
8
8
  お忙しいとは思いますが、助けていただきたく思います。
@@ -60,7 +60,8 @@
60
60
  ```ここに言語を入力
61
61
  from datetime import datetime
62
62
  from openpyxl import load_workbook
63
-
63
+ import pandas as pd
64
+ df = pd.DataFrame()
64
65
 
65
66
  filepath1 = '売上管理表.xlsx'
66
67
  filepath2 = '給与計算表.xlsx'
@@ -111,12 +112,18 @@
111
112
  ###エラーコードです。
112
113
  ```ここに言語を入力
113
114
  Traceback (most recent call last):
114
- File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 16, in <module>
115
+ File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 18, in <module>
115
- df_by = df.groupby(["担当者名", "歩合率"]).sum()
116
+ df_by = df.groupby(["担当者名", "歩合率"]).sum()
117
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\frame.py", line 7626, in groupby
118
+ return DataFrameGroupBy(
119
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\groupby\groupby.py", line 888, in __init__
120
+ grouper, exclusions, obj = get_grouper(
121
+ File "C:\Users\wildl\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\groupby\grouper.py", line 860, in get_grouper
122
+ raise KeyError(gpr)
116
- NameError: name 'df' is not defined
123
+ KeyError: '担当者名'
117
124
  >>>
118
125
  ```
119
- pandas使用するではないかと、思うのですがどの部分挿入すればよいかがわかりません。
126
+ pandas使用の仕方及びgroupbyの名前の問題だと思うのですがどのようにすればよいかがわかりません。
120
127
 
121
128
  基本的なことだとは、思いますが何卒宜しくお願い致します。
122
129
  ###元のデータです。
@@ -135,5 +142,6 @@
135
142
 
136
143
 
137
144
  ```
145
+ ###給与計算表です。![イメージ説明](c866baf32fd4d78ca903df046623d828.png)
138
146
 
139
147
  何卒、何卒よろしくお願い致します。

2

文法の修正

2021/08/25 16:49

投稿

MitAbe
MitAbe

スコア15

title CHANGED
@@ -1,1 +1,1 @@
1
- (再)売上を計上している顧客管理データから各営業担当ごとに給与明細まで自動で出したい
1
+ (再)売上を計上している顧客管理データから各営業担当ごとに給与明細まで自動で出したい
body CHANGED
@@ -1,290 +1,139 @@
1
1
  日付順に記載している顧客管理データ(売上も計上している)から各営業さんごとの給与明細まで出したくpythonを勉強しております。
2
2
 
3
- 流れといたしましては、
4
- ➀売上げを計上しているエクセルから各営業担当さごとに売上げを集計したい
3
+ 今現在下記の項目に取でおます。
5
-
6
- ➁各営業担当さんごとの集計を歩合率を計算するためのエクセルトに歩合率毎に振り分けて記載したい
4
+ エクセルの特定の文字でマした行だけをPythonで転記(特定のマークは*です。集金済みとう意味です。)
7
-
8
- 上記計算しものを給与明細のテンプレートに記したい
5
+ 上記で転記できデータ担当ごとに給与計算表テンプレートに記したい。転記する項目は、契約日、担当名、売上金額です。その際、担当名と歩合率でグループ化をしたい。
9
6
 
10
- 上記がやりたいこととなります。
11
- 毎回の手動での記入をなくしたく奮闘致しております。
12
- ➀はアドバイスを頂きクリアできました。
13
- ➁~➂がうまくいきません。
14
- pandas とopenpyxlを使用すると思うのですが、
15
- 下記にコード等を記載いたしますので、何卒宜しくお願い致します。
16
- 上手く起動すれば、各営業さんごとの➁と➂のエクセルシートが出来上がったファイルができると思っております。
17
- なお添付写真は、自分で作成したダミーの顧客管理データ等です。
18
- ###上記を行う為のファイル内です。
19
- ●matome2 → 売上を計上しているシートです。
20
- ●salary cal → 歩合率の計算の為のシートです。
21
- ●splite_list1 → ➀の出力結果です。
22
- ![イメージ説明](00d5f6e1ecc8d530d826a734f52333a8.png)
23
- ###売上を計上しているエクセルのコピーです。
24
- 1 2021/6/7 a1 近藤 阿部 千葉県2-12-14 工事 090-xxxx-xxxx ¥2,200,000 12.0%
25
- 2 2021/6/8 a2 近藤 阿部 神奈川県2-12-15 工事 91-xxxx-xxxx ¥4,560,000 12.0%
26
- 3 2021/6/9 a3 近藤 阿部 北海道 工事 92-xxxx-xxxx ¥1,236,000 12.0%
27
- 4 2021/6/10 a4 近藤 田中 沖縄県 工事 93-xxxx-xxxx ¥1,230,000 12.0%
28
- 5 2021/6/11 a5 近藤 佐藤 沖縄県 工事 94-xxxx-xxxx ¥1,430,000 12.0%
29
- 6 2021/6/12 a6 近藤 齋藤 沖縄県 工事 95-xxxx-xxxx ¥675,000 11.0%
30
- 7 2021/6/13 a7 近藤 阿部 沖縄県 工事 96-xxxx-xxxx ¥324,000 10.0%
31
- 8 2021/6/14 a8 近藤 阿部 沖縄県 工事 97-xxxx-xxxx ¥908,000 6.0%
32
- 9 2021/6/15 a9 近藤 阿部 沖縄県 工事 98-xxxx-xxxx ¥564,000 9.0%
33
- 10 2021/6/16 a10 近藤 阿部 沖縄県 工事 99-xxxx-xxxx ¥234,000 8.0%
34
- ###売を計上しているエクセルです。
7
+ 質問は記に関して2つござす。
35
- ![イメージ説明](149c02d2a30cd692e4244a1adfca29ef.png)
8
+ お忙しいとは思いますが、助けていただきたく思います。
9
+ 何卒よろしくお願い致します。
36
10
 
37
- ###➁の歩合率を計算するエクセルのシートです。
11
+ まず➀について、ヘッダーも転記しのですが、出てきませんでした
38
- *歩合率は12%~1%まあります。
12
+ 下記が自分が書いたコード及び結果です。
39
- ●12%の歩合率の計算式
40
-  =MAX(0,(SUM(D3:D8)-1000000)*0.12)
41
- ●11%の歩合率の計算式
42
-  =SUM(D9:D13)*0.11
43
-  *11%以降の歩合率の計算は全て11%のものと一緒です。12%の計算だけ少し違います。
44
13
 
45
- ![イメージ説明](d6d880929543eece28cb18e5b5f7407b.png)
46
- ###
47
- 給与計算書 担当名
48
- 契約日 お客様名 売上金額 割引率 歩合率 給与支給額
49
- ¥0 12.0%
50
- ¥0 12.0%
51
- ¥0 12.0%
52
- ¥0 12.0%
53
- ¥0 12.0%
54
- ¥0 12.0% ¥0
55
- ¥ -1,00011.0%
56
- ¥ -1,00011.0%
57
-
58
-
59
-
60
- ![イメージ説明](962aea1f7b343f73d141684519dadad1.png)
61
- ###出力結果す。(教えて頂きました。)
14
+ ###エクセル特定の文字マークした行だけをPythonで転記
62
- ```
63
- import pandas as pd
64
-
65
- in_file = 'matome.xlsx'
66
- df = pd.read_excel(in_file)
67
- print(df)
68
-
69
- print(df.groupby('担当者名2(アポインター)').sum()['金額'])
70
- ```
71
- ###上記の結果です。
72
15
  ```ここに言語を入力
73
- 顧客コード 日付 顧客名 担当者名(クローザー) ... 割引金額 金額 歩合率 備考
16
+ import openpyxl
74
- 0 1 2021-06-07 a1 近藤 ... NaN 2200000 0.12 NaN
75
- 1 2 2021-06-08 a2 近藤 ... NaN 4560000 0.12 NaN
76
- 2 3 2021-06-09 a3 近藤 ... NaN 1236000 0.12 NaN
77
- 3 4 2021-06-10 a4 近藤 ... NaN 1230000 0.12 NaN
78
- 4 5 2021-06-11 a5 近藤 ... NaN 1430000 0.12 NaN
79
- 5 6 2021-06-12 a6 近藤 ... NaN 675000 0.11 NaN
80
- 6 7 2021-06-13 a7 近藤 ... NaN 324000 0.10 NaN
81
- 7 8 2021-06-14 a8 近藤 ... NaN 908000 0.06 NaN
82
- 8 9 2021-06-15 a9 近藤 ... NaN 564000 0.09 NaN
83
- 9 10 2021-06-16 a10 近藤 ... NaN 234000 0.08 NaN
84
17
 
18
+ wb = openpyxl.load_workbook("売上管理表.xlsx")
85
- [10 rows x 15 columns]
19
+ ws = wb["売上管理表"]
86
- 担当者名2(アポインター)
87
- 佐藤 1430000
88
- 田中 1230000
89
- 阿部 10026000
90
- 齋藤 675000
91
- Name: 金額, dtype: int64
92
- ```
93
- ###➁を作る為のコードです。(その➀)
94
- まずは下記のコードで、JSON形式のファイルに保存が必要との事で作成し、その➁を実行するとうまくいくのかもしれませんが、エラーが解決できませんでした。
95
20
 
96
- ```
97
21
 
98
- import openpyxl as excel, json
99
22
 
23
+ bikou_rows = []
100
24
 
101
- in_file = 'matome2.xlsx'
102
- out_file = 'matome2.json'
103
25
 
104
26
 
105
- def split_list():
106
- users = read_and_split(in_file)
107
- result = {}
108
- for name, rows in users.items():
109
- result[name] = calc_user(rows)
110
- print(name, result[name]['total'])
111
- with open(out_file, "wt") as fp:
112
- json.dump(result, fp)
113
27
 
114
- def read_and_split(in_file):
115
- users = {}
116
-
117
- sheet = excel.load_workbook(in_file).active
118
- for i, row in enumerate(sheet.iter_rows()):
28
+ for row in ws.iter_rows(min_row=3):
29
+
30
+ if row[16].value == "*":
31
+ bikou_rows.append(row)
119
32
 
120
- if i<4:
121
- continue
122
- values = [col.value for col in row]
123
- name = values[1]
124
- if name not in users: users[name] = []
125
- users[name].append(values)
126
- return users
127
33
 
128
- def calc_user(rows):
34
+ ws2 = wb.create_sheet(title="集金済み")
129
- total = 0
130
- items = []
131
35
 
132
- for row in rows:
133
- space, usercode, date, username, name, appointer, item, kouji, mobile, nazo, mail, cnt, price, per, bikou = row
134
- date_s = date.strftime('%m/%d')
135
- items.append([date_s, name, item, cnt, price, per])
136
36
 
37
+ for bikou_row in bikou_rows:
137
- total += (cnt or 0) * (price or 0)
38
+ ws2.append([r.value for r in bikou_row])
138
- return {'items':items, 'total': total}
139
39
 
140
- if __name__ == "__main__":
40
+ wb.save("売上管理表.xlsx")
141
- split_list()
142
41
 
143
42
  ```
144
- ###上記のエラーコード
43
+ ###出力結果です。
145
- ```ここに言語を入力
146
- Traceback (most recent call last):
147
- File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 44, in <module>
148
- split_list()
149
- File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 12, in split_list
150
- result[name] = calc_user(rows)
151
- File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 37, in calc_user
152
- date_s = date.strftime('%m/%d')
44
+ ![![イメージ説明](b04548c5b0e81182266dca327317f627.png)
153
- AttributeError: 'str' object has no attribute 'strftime'
154
- >>>
155
- =========== RESTART: C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py ==========
156
- Traceback (most recent call last):
157
- File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 44, in <module>
158
- split_list()
159
- File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 12, in split_list
160
- result[name] = calc_user(rows)
161
- File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 37, in calc_user
162
- date_s = date.strptime('%m/%d')
163
- AttributeError: 'str' object has no attribute 'strptime'
164
- >>>
165
45
 
166
- ```
167
- ###➁を作る為コードす。(そ➁)
46
+ 左下に【集金済み】と項目がき下記ように転記ができました。
168
47
 
169
- ```ここに言語を入力
170
- import pandas as pd
171
- import openpyxl as excel
48
+ ![イメージ説明](58ae76a9d80d728713d8aa14f1066463.png)
172
49
 
173
- in_file = 'matome2.xlsx'
174
- out_dir = './salary cal01'
175
- template_file = 'salary cal.xlsx'
176
50
 
51
+ 売上管理表に 日付、顧客名 などの行が転記できませんでした。
52
+ 読み込むときfor row in ws.iter_rows(min_row=3):の部分の問題だとは思うのですが、数字を変えても反映されませんでした。
177
53
 
54
+ ➁に関する質問です。
55
+  テンプレートには給与の計算式が入っておりますので、groupbyを使用し担当名 と歩合率をグループ化して転記できれば良いのではないか、と考えております。
178
- df = pd.read_excel(in_file)
56
+ 下記が自分が書いたコード、テンプレート及びエラーです。
57
+ ご指南の程何卒よろしくお願い致します。
179
58
 
180
- def gen_salarycal():
59
+ ###担当ごとの計算表を作成
181
- with open(in_file, "rt") as fp:
182
- users = json.load(fp)
60
+ ```ここに言語を入力
183
- for name, date in users.items():
61
+ from datetime import datetime
184
- make_user_salarycal(name, data)
62
+ from openpyxl import load_workbook
63
+
185
64
 
186
- def make_user_salarycal(name, data):
65
+ filepath1 = '売上管理表.xlsx'
187
- book = excel.load_workbook(template_file)
66
+ filepath2 = '給与計算表.xlsx'
188
- sheet = book.active
67
+
189
68
 
69
+ wb1 = load_workbook(filename=filepath1)
190
- sheet["C1"] = name
70
+ ws1 = wb1['集金済み']
71
+
191
- sheet["G61"] = data["total"]
72
+ wb2 = load_workbook(filename=filepath2)
73
+ ws2 = wb2['給与計算表']
192
74
 
193
- for i in enumerate(data['items']):
75
+ df_by = df.groupby(["担当者名2", "歩合率"]).sum()
194
- date,name, price = it
195
- row = 3 + i
196
- sheet.cell(row, 2, date)
197
- sheet.cell(row, 3, name)
198
- sheet.cell(row, 4, price)
199
- sheet.cell(row, 7, per*price)
200
76
 
201
- out_file = out_dir+'/' + users + '様+xlsx'
77
+ values1=[[cell.value for cell in row1] for row1 in ws1]
202
- book.save(out_file)
78
+
203
- print("save: ", out_file)
204
79
 
205
- if __name__ == "__main__":
206
- gen_salarycal()
80
+ del values1[0]
81
+ conv_values1 = list(zip(*values1))
82
+ torihiki_list = list(set(conv_values1[0]))
83
+
207
84
 
208
- ```
209
- ###上記のエラーコード
210
- ```
211
- Traceback (most recent call last):
212
- File "C:/Users/hannchou6/Desktop/新・給与関係/gen_salary.py", line 37, in <module>
213
- gen_salarycal()
214
- File "C:/Users/hannchou6/Desktop/新・給与関係/gen_salary.py", line 13, in gen_salarycal
215
- users = json.load(fp)
216
- NameError: name 'json' is not defined
217
- ```
218
- ###➁を作る為のコードです。(その➂)
219
- いろいろなサイトを見て書いてみました。
220
- ```
221
- from pathlib import Path
85
+ for torihiki in torihiki_list:
86
+
87
+
88
+ product_data =[]
89
+
90
+
91
+ for i in range(len(values1)):
92
+ if values1[i][0] == torihiki:
93
+ product_data.append(values1[i])
94
+
95
+
96
+ ws2.title = '給与計算表'
97
+
98
+
99
+ for y, row in enumerate(product_data):
100
+ for x, cell in enumerate(row):
101
+ ws2.cell(row= y+2, column= x+1, value=product_data[y][x])
102
+
103
+
222
104
 
223
- import openpyxl as xl
105
+ now = datetime.now()
106
+ hiduke = now.strftime('%Y-%m-%d')
107
+ filename = 'torihiki.xlsx'
224
- import pandas as pd
108
+ wb2.save(filename)
225
109
 
226
-
227
- output_dir = Path("salary01")
228
-
229
- output_dir.mkdir(exist_ok=True)
230
-
231
- df = pd.read_excel("matome2.xlsx")
232
-
233
-
234
-
235
-
236
- df_by = df.groupby(["担当者名2(アポインター)"]).sum()
237
-
238
-
239
- def save_excel(path, df):
240
- writer = pd.ExcelWriter(path)
241
- df.to_excel('salary cal')
242
- writer.save()
243
- display(df)
244
-
245
-
246
- for name, df_by_name in df_by.groupby(level=0):
247
-
248
- output_path = output_dir / f"{name}.xlsx"
249
- print(f"Saving result to '{output_path}'")
250
-
251
-
252
- save_excel(output_path, df_by_name)
253
-
254
110
  ```
255
-
256
- ###➁を作る為のコード(その➂)のエラーコードです。
111
+ ###エラーコードです。
257
- salary01のファイルには"佐藤"のエクセルシートは表示されますが、開くことができませんでした。
258
112
  ```ここに言語を入力
259
- Saving result to 'salary cal\佐藤.xlsx'
260
113
  Traceback (most recent call last):
261
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 713, in __new__
262
- engine = config.get_option(f"io.excel.{ext}.writer", silent=True)
263
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\_config\config.py", line 233, in __call__
264
- return self.__func__(*args, **kwds)
265
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\_config\config.py", line 105, in _get_option
266
- key = _get_single_key(pat, silent)
267
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\_config\config.py", line 91, in _get_single_key
114
+ File "C:\Users\wildl\Desktop\新・給与関係\appointer.py", line 16, in <module>
268
- raise OptionError(f"No such keys(s): {repr(pat)}")
115
+ df_by = df.groupby(["担当者名2", "歩合率"]).sum()
269
- pandas._config.config.OptionError: "No such keys(s): 'io.excel..writer'"
116
+ NameError: name 'df' is not defined
117
+ >>>
118
+ ```
119
+ pandasを使用するのではないかと、思うのですがどの部分に挿入すればよいかがわかりません。
270
120
 
121
+ 基本的なことだとは、思いますが何卒宜しくお願い致します。
122
+ ###元のデータです。
123
+ ```ここに言語を入力
124
+ 顧客コード 日付 顧客名 担当者名(クローザー) 担当者名2(アポインター) 〒 住所1 工事内容 携帯電話 固定電話 メールアドレス 割引金額 金額 歩合率 備考
125
+ 1 2021/6/7 a1 近藤 阿部 千葉県2-12-14 工事 090-xxxx-xxxx ¥2,200,000 12.0% *
126
+ 2 2021/6/8 a2 近藤 阿部 神奈川県2-12-15 工事 91-xxxx-xxxx ¥4,560,000 12.0%
127
+ 3 2021/6/9 a3 近藤 阿部 北海道 工事 92-xxxx-xxxx ¥1,236,000 12.0%
128
+ 4 2021/6/10 a4 近藤 田中 沖縄県 工事 93-xxxx-xxxx ¥1,230,000 12.0%
129
+ 5 2021/6/11 a5 近藤 佐藤 沖縄県 工事 94-xxxx-xxxx ¥1,430,000 12.0% *
130
+ 6 2021/6/12 a6 近藤 齋藤 沖縄県 工事 95-xxxx-xxxx ¥675,000 11.0% *
271
- The above exception was the direct cause of the following exception:
131
+ 7 2021/6/13 a7 近藤 阿部 沖縄県 工事 96-xxxx-xxxx ¥324,000 10.0%
132
+ 8 2021/6/14 a8 近藤 阿部 沖縄県 工事 97-xxxx-xxxx ¥908,000 6.0% *
133
+ 9 2021/6/15 a9 近藤 阿部 沖縄県 工事 98-xxxx-xxxx ¥564,000 9.0%
134
+ 10 2021/6/16 a10 近藤 阿部 沖縄県 工事 99-xxxx-xxxx ¥234,000 8.0%
135
+
272
136
 
273
- Traceback (most recent call last):
274
- File "C:/Users/hannchou6/Desktop/新・給与関係/sample.py", line 32, in <module>
275
- save_excel(output_path, df_by_name)
276
- File "C:/Users/hannchou6/Desktop/新・給与関係/sample.py", line 21, in save_excel
277
- df.to_excel('salary cal')
278
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\generic.py", line 2189, in to_excel
279
- formatter.write(
137
+ ```
280
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\formats\excel.py", line 815, in write
281
- writer = ExcelWriter( # type: ignore[abstract]
282
- File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 717, in __new__
283
- raise ValueError(f"No engine for filetype: '{ext}'") from err
284
- ValueError: No engine for filetype: ''
285
138
 
286
- ```
287
- 自分なりにいろいろと試してはおりますが、テンプレートのエクセルに出力することが、非常に難解でうまくいっておりません。
288
- 初心者ですので、質問の仕方等、至らぬ点も
289
- 多々あるかと思いますが、
290
- 何卒、ご教授の程宜しくお願い致します。
139
+ 何卒、何卒よろしくお願い致します。

1

文法修正

2021/08/25 15:57

投稿

MitAbe
MitAbe

スコア15

title CHANGED
@@ -1,1 +1,1 @@
1
- (再)売上を計上している顧客管理データから各営業担当ごとに給与明細まで自動で出したい
1
+ (再)売上を計上している顧客管理データから各営業担当ごとに給与明細まで自動で出したい
body CHANGED
@@ -20,8 +20,20 @@
20
20
  ●salary cal → 歩合率の計算の為のシートです。
21
21
  ●splite_list1 → ➀の出力結果です。
22
22
  ![イメージ説明](00d5f6e1ecc8d530d826a734f52333a8.png)
23
+ ###売上を計上しているエクセルのコピーです。
24
+ 1 2021/6/7 a1 近藤 阿部 千葉県2-12-14 工事 090-xxxx-xxxx ¥2,200,000 12.0%
25
+ 2 2021/6/8 a2 近藤 阿部 神奈川県2-12-15 工事 91-xxxx-xxxx ¥4,560,000 12.0%
26
+ 3 2021/6/9 a3 近藤 阿部 北海道 工事 92-xxxx-xxxx ¥1,236,000 12.0%
27
+ 4 2021/6/10 a4 近藤 田中 沖縄県 工事 93-xxxx-xxxx ¥1,230,000 12.0%
28
+ 5 2021/6/11 a5 近藤 佐藤 沖縄県 工事 94-xxxx-xxxx ¥1,430,000 12.0%
29
+ 6 2021/6/12 a6 近藤 齋藤 沖縄県 工事 95-xxxx-xxxx ¥675,000 11.0%
30
+ 7 2021/6/13 a7 近藤 阿部 沖縄県 工事 96-xxxx-xxxx ¥324,000 10.0%
31
+ 8 2021/6/14 a8 近藤 阿部 沖縄県 工事 97-xxxx-xxxx ¥908,000 6.0%
32
+ 9 2021/6/15 a9 近藤 阿部 沖縄県 工事 98-xxxx-xxxx ¥564,000 9.0%
33
+ 10 2021/6/16 a10 近藤 阿部 沖縄県 工事 99-xxxx-xxxx ¥234,000 8.0%
23
34
  ###売上を計上しているエクセルです。
24
- ![イメージ説明](f4a3b0ce04a65acfac821c765eb595ea.png)
35
+ ![イメージ説明](149c02d2a30cd692e4244a1adfca29ef.png)
36
+
25
37
  ###➁の歩合率を計算するためのエクセルのシートです。
26
38
  *歩合率は12%~1%まであります。
27
39
  ●12%の歩合率の計算式
@@ -31,13 +43,23 @@
31
43
   *11%以降の歩合率の計算は全て11%のものと一緒です。12%の計算だけ少し違います。
32
44
 
33
45
  ![イメージ説明](d6d880929543eece28cb18e5b5f7407b.png)
46
+ ###
47
+ 給与計算書 担当名
48
+ 契約日 お客様名 売上金額 割引率 歩合率 給与支給額
49
+ ¥0 12.0%
50
+ ¥0 12.0%
51
+ ¥0 12.0%
52
+ ¥0 12.0%
53
+ ¥0 12.0%
54
+ ¥0 12.0% ¥0
34
- ###➂の給与明細です。
55
+ ¥ -1,00011.0%
35
- ![イメージ説明](f14611b4cec490fc66e2d5a3169b69fe.png)
36
- ![イメージ説明](e71e39d9c0f504d1a3592cb9a2bc3121.png)
56
+ ¥ -1,00011.0%
57
+
37
58
 
59
+
38
60
  ![イメージ説明](962aea1f7b343f73d141684519dadad1.png)
39
61
  ###➀の出力結果です。(教えて頂きました。)
40
- ```ここに言語を入力
62
+ ```
41
63
  import pandas as pd
42
64
 
43
65
  in_file = 'matome.xlsx'
@@ -68,10 +90,83 @@
68
90
  齋藤 675000
69
91
  Name: 金額, dtype: int64
70
92
  ```
71
- ###➁を作る為のコードです。
93
+ ###➁を作る為のコードです。(その➀)
72
- 反応しませんでした。
94
+ まずは下記のコードで、JSON形式のファイルに保存が必要との事で作成し、その➁を実行するとうまくいくのかもませんが、エラーが解決きませんでした。
95
+
73
96
  ```
74
97
 
98
+ import openpyxl as excel, json
99
+
100
+
101
+ in_file = 'matome2.xlsx'
102
+ out_file = 'matome2.json'
103
+
104
+
105
+ def split_list():
106
+ users = read_and_split(in_file)
107
+ result = {}
108
+ for name, rows in users.items():
109
+ result[name] = calc_user(rows)
110
+ print(name, result[name]['total'])
111
+ with open(out_file, "wt") as fp:
112
+ json.dump(result, fp)
113
+
114
+ def read_and_split(in_file):
115
+ users = {}
116
+
117
+ sheet = excel.load_workbook(in_file).active
118
+ for i, row in enumerate(sheet.iter_rows()):
119
+
120
+ if i<4:
121
+ continue
122
+ values = [col.value for col in row]
123
+ name = values[1]
124
+ if name not in users: users[name] = []
125
+ users[name].append(values)
126
+ return users
127
+
128
+ def calc_user(rows):
129
+ total = 0
130
+ items = []
131
+
132
+ for row in rows:
133
+ space, usercode, date, username, name, appointer, item, kouji, mobile, nazo, mail, cnt, price, per, bikou = row
134
+ date_s = date.strftime('%m/%d')
135
+ items.append([date_s, name, item, cnt, price, per])
136
+
137
+ total += (cnt or 0) * (price or 0)
138
+ return {'items':items, 'total': total}
139
+
140
+ if __name__ == "__main__":
141
+ split_list()
142
+
143
+ ```
144
+ ###上記のエラーコード
145
+ ```ここに言語を入力
146
+ Traceback (most recent call last):
147
+ File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 44, in <module>
148
+ split_list()
149
+ File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 12, in split_list
150
+ result[name] = calc_user(rows)
151
+ File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 37, in calc_user
152
+ date_s = date.strftime('%m/%d')
153
+ AttributeError: 'str' object has no attribute 'strftime'
154
+ >>>
155
+ =========== RESTART: C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py ==========
156
+ Traceback (most recent call last):
157
+ File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 44, in <module>
158
+ split_list()
159
+ File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 12, in split_list
160
+ result[name] = calc_user(rows)
161
+ File "C:/Users/hannchou6/Desktop/新・給与関係/split_list2.py", line 37, in calc_user
162
+ date_s = date.strptime('%m/%d')
163
+ AttributeError: 'str' object has no attribute 'strptime'
164
+ >>>
165
+
166
+ ```
167
+ ###➁を作る為のコードです。(その➁)
168
+
169
+ ```ここに言語を入力
75
170
  import pandas as pd
76
171
  import openpyxl as excel
77
172
 
@@ -81,9 +176,13 @@
81
176
 
82
177
 
83
178
  df = pd.read_excel(in_file)
84
- for name, date in users.items():
85
- make_user_salaraycal(name, data)
86
179
 
180
+ def gen_salarycal():
181
+ with open(in_file, "rt") as fp:
182
+ users = json.load(fp)
183
+ for name, date in users.items():
184
+ make_user_salarycal(name, data)
185
+
87
186
  def make_user_salarycal(name, data):
88
187
  book = excel.load_workbook(template_file)
89
188
  sheet = book.active
@@ -103,8 +202,89 @@
103
202
  book.save(out_file)
104
203
  print("save: ", out_file)
105
204
 
205
+ if __name__ == "__main__":
206
+ gen_salarycal()
106
207
 
208
+ ```
209
+ ###上記のエラーコード
210
+ ```
211
+ Traceback (most recent call last):
212
+ File "C:/Users/hannchou6/Desktop/新・給与関係/gen_salary.py", line 37, in <module>
213
+ gen_salarycal()
214
+ File "C:/Users/hannchou6/Desktop/新・給与関係/gen_salary.py", line 13, in gen_salarycal
215
+ users = json.load(fp)
216
+ NameError: name 'json' is not defined
217
+ ```
218
+ ###➁を作る為のコードです。(その➂)
219
+ いろいろなサイトを見て書いてみました。
220
+ ```
221
+ from pathlib import Path
107
222
 
223
+ import openpyxl as xl
224
+ import pandas as pd
225
+
226
+
227
+ output_dir = Path("salary01")
228
+
229
+ output_dir.mkdir(exist_ok=True)
230
+
231
+ df = pd.read_excel("matome2.xlsx")
232
+
233
+
234
+
235
+
236
+ df_by = df.groupby(["担当者名2(アポインター)"]).sum()
237
+
238
+
239
+ def save_excel(path, df):
240
+ writer = pd.ExcelWriter(path)
241
+ df.to_excel('salary cal')
242
+ writer.save()
243
+ display(df)
244
+
245
+
246
+ for name, df_by_name in df_by.groupby(level=0):
247
+
248
+ output_path = output_dir / f"{name}.xlsx"
249
+ print(f"Saving result to '{output_path}'")
250
+
251
+
252
+ save_excel(output_path, df_by_name)
253
+
108
254
  ```
255
+
256
+ ###➁を作る為のコード(その➂)のエラーコードです。
257
+ salary01のファイルには"佐藤"のエクセルシートは表示されますが、開くことができませんでした。
258
+ ```ここに言語を入力
259
+ Saving result to 'salary cal\佐藤.xlsx'
260
+ Traceback (most recent call last):
261
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 713, in __new__
262
+ engine = config.get_option(f"io.excel.{ext}.writer", silent=True)
263
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\_config\config.py", line 233, in __call__
264
+ return self.__func__(*args, **kwds)
265
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\_config\config.py", line 105, in _get_option
266
+ key = _get_single_key(pat, silent)
267
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\_config\config.py", line 91, in _get_single_key
268
+ raise OptionError(f"No such keys(s): {repr(pat)}")
269
+ pandas._config.config.OptionError: "No such keys(s): 'io.excel..writer'"
270
+
271
+ The above exception was the direct cause of the following exception:
272
+
273
+ Traceback (most recent call last):
274
+ File "C:/Users/hannchou6/Desktop/新・給与関係/sample.py", line 32, in <module>
275
+ save_excel(output_path, df_by_name)
276
+ File "C:/Users/hannchou6/Desktop/新・給与関係/sample.py", line 21, in save_excel
277
+ df.to_excel('salary cal')
278
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\core\generic.py", line 2189, in to_excel
279
+ formatter.write(
280
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\formats\excel.py", line 815, in write
281
+ writer = ExcelWriter( # type: ignore[abstract]
282
+ File "C:\Users\hannchou6\AppData\Local\Programs\Python\Python39\lib\site-packages\pandas\io\excel\_base.py", line 717, in __new__
283
+ raise ValueError(f"No engine for filetype: '{ext}'") from err
284
+ ValueError: No engine for filetype: ''
285
+
286
+ ```
287
+ 自分なりにいろいろと試してはおりますが、テンプレートのエクセルに出力することが、非常に難解でうまくいっておりません。
109
- 初心者ですので、質問の仕方等、至らぬ点も多々あるかと思いますが、
288
+ 初心者ですので、質問の仕方等、至らぬ点も
289
+ 多々あるかと思いますが、
110
290
  何卒、ご教授の程宜しくお願い致します。