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

回答編集履歴

3

修正

2021/05/30 13:24

投稿

退会済みユーザー
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

追加

2021/05/30 13:24

投稿

退会済みユーザー
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

書き込み先の行頭誤り修正、例外処理追加

2021/05/30 10:45

投稿

退会済みユーザー
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 = 1
73
+ i = 0
74
74
  for idx in range(1,101):
75
+ try:
75
- ws2 = wb.worksheets[idx]
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
  ```