回答編集履歴
3
修正
answer
CHANGED
@@ -15,7 +15,8 @@
|
|
15
15
|
下記修正例では、シートを切り替えるごとに書き込み先が2行目から始まるように、
|
16
16
|
同じように余りを求める式を使っています。
|
17
17
|
[追記]
|
18
|
-
・数値を貼り付けるには、load_workbookでdata_only=Trueを指定します。
|
18
|
+
~~・数値を貼り付けるには、load_workbookでdata_only=Trueを指定します。~~
|
19
|
+
・書式が文字列となっている数字を、数値として貼り付ける場合は、float()で囲ってください。
|
19
20
|
|
20
21
|
```
|
21
22
|
import openpyxl
|
@@ -52,13 +53,14 @@
|
|
52
53
|
|
53
54
|
# k = 書き込み先の行番号。シートを切り替えるたびに、2~11行目となる。
|
54
55
|
k = (i - 2) % 10 + 2
|
55
|
-
ws2.cell(k, 1).value = ws1[A].value
|
56
|
+
ws2.cell(k, 1).value = float(ws1[A].value)
|
56
|
-
ws2.cell(k, 2).value = ws1[B].value
|
57
|
+
ws2.cell(k, 2).value = float(ws1[B].value)
|
57
|
-
ws2.cell(k, 3).value = ws1[C].value
|
58
|
+
ws2.cell(k, 3).value = float(ws1[C].value)
|
58
|
-
ws2.cell(k, 4).value = ws1[D].value
|
59
|
+
ws2.cell(k, 4).value = float(ws1[D].value)
|
59
|
-
ws2.cell(k, 5).value = ws1[E].value
|
60
|
+
ws2.cell(k, 5).value = float(ws1[E].value)
|
60
|
-
ws2.cell(k, 6).value = ws1[F].value
|
61
|
+
ws2.cell(k, 6).value = float(ws1[F].value)
|
61
62
|
|
63
|
+
|
62
64
|
wb.save('teratail.xlsx')
|
63
65
|
```
|
64
66
|
|
@@ -85,7 +87,7 @@
|
|
85
87
|
for num_column, cell in enumerate(data_row):
|
86
88
|
ws2.cell(
|
87
89
|
row=num_row+1,
|
88
|
-
column=num_column+1).value = cell.value
|
90
|
+
column=num_column+1).value = float(cell.value)
|
89
91
|
i += 1
|
90
92
|
|
91
93
|
wb.save('teratail.xlsx')
|
2
追加
answer
CHANGED
@@ -14,10 +14,13 @@
|
|
14
14
|
|
15
15
|
下記修正例では、シートを切り替えるごとに書き込み先が2行目から始まるように、
|
16
16
|
同じように余りを求める式を使っています。
|
17
|
+
[追記]
|
18
|
+
・数値を貼り付けるには、load_workbookでdata_only=Trueを指定します。
|
19
|
+
|
17
20
|
```
|
18
21
|
import openpyxl
|
19
22
|
|
20
|
-
wb = openpyxl.load_workbook('data.xlsx')
|
23
|
+
wb = openpyxl.load_workbook('data.xlsx', data_only=True)
|
21
24
|
ws1 = wb['リスト']
|
22
25
|
ws2 = wb['Sheet1']
|
23
26
|
|
@@ -64,7 +67,7 @@
|
|
64
67
|
```
|
65
68
|
import openpyxl
|
66
69
|
|
67
|
-
wb = openpyxl.load_workbook('data.xlsx')
|
70
|
+
wb = openpyxl.load_workbook('data.xlsx', data_only=True)
|
68
71
|
ws1 = wb['リスト']
|
69
72
|
ws2 = wb['Sheet1']
|
70
73
|
|
1
書き込み先の行頭誤り修正、例外処理追加
answer
CHANGED
@@ -60,7 +60,7 @@
|
|
60
60
|
```
|
61
61
|
|
62
62
|
# 別解
|
63
|
-
下記のようにすれば
|
63
|
+
下記のようにすれば短いコードになります。
|
64
64
|
```
|
65
65
|
import openpyxl
|
66
66
|
|
@@ -70,16 +70,20 @@
|
|
70
70
|
|
71
71
|
idx = wb.index(ws2)
|
72
72
|
rng1 = ws1["A2":"F1001"]
|
73
|
-
i =
|
73
|
+
i = 0
|
74
74
|
for idx in range(1,101):
|
75
|
+
try:
|
75
|
-
|
76
|
+
ws2 = wb.worksheets[idx]
|
77
|
+
except IndexError:
|
78
|
+
print(f"エラー:存在しないシートインデックス[{idx}]が指定されました。")
|
79
|
+
break
|
76
80
|
for num_row in range(1,11):
|
77
81
|
data_row = rng1[i]
|
78
82
|
for num_column, cell in enumerate(data_row):
|
79
83
|
ws2.cell(
|
80
84
|
row=num_row+1,
|
81
85
|
column=num_column+1).value = cell.value
|
82
|
-
i+=1
|
86
|
+
i += 1
|
83
87
|
|
84
88
|
wb.save('teratail.xlsx')
|
85
89
|
```
|