回答編集履歴

5

ロジックに誤りがあったため

2020/01/04 18:59

投稿

frederick_1974
frederick_1974

スコア303

test CHANGED
@@ -1,27 +1,75 @@
1
- エラー該当部分は、以下のコードでいいのではないかと思い
1
+ 以下の通りにしてみした
2
2
 
3
3
  ```Python
4
4
 
5
- wb = px.Workbook()
5
+ import glob
6
6
 
7
- ws = wb.active
7
+ import openpyxl as px
8
8
 
9
- for j in range(1,6):
10
9
 
11
- ws.cell(row=i,column=2).value = l
12
10
 
11
+ a = glob.glob("C:.../*.txt")
12
+
13
+ print (a)
14
+
15
+
16
+
17
+ wb = px.Workbook()
18
+
19
+ ws = wb.active
20
+
21
+
22
+
23
+ j = 1
24
+
25
+ for i in a:
26
+
27
+ path = i
28
+
29
+ with open(path) as f:
30
+
31
+ lines = f.readlines()
32
+
33
+ lines_strip = [line.strip() for line in lines]
34
+
35
+ m = [line for line in lines_strip if 'test=' in line]
36
+
37
+ s = ''.join(m)
38
+
39
+ l = int(s.lstrip('test='))
40
+
41
+ print(l)
42
+
43
+
44
+
45
+ ws.cell(row=j,column=2).value = l
46
+
47
+ j += 1
48
+
49
+
50
+
13
- wb.save('C:...\samp.xlsx')
51
+ wb.save('C:...\samp.xlsx')
14
52
 
15
53
  ```
16
54
 
17
- 修正箇所は2箇所です。
18
-
19
- 一つは`ws.cell(row=i,column=2).value = l`
55
+ 一つのテキストファイルに一つの数値で、Excelのセルに保存していくということなの、ループを一つにしました
20
-
21
- セルの指定について、rowが行番号になり1,2,3…は1行目,2行目3行目…に相当し、columnが列番号になり1,2,3…はA列,B列,C列…に相当します。そのため、iをループさせることで、B1,B2,B3を指定していくことになります。
22
56
 
23
57
 
24
58
 
25
- もう一つは`for j in range(1,6):`です。
59
+ ワークブックとシートの指定をループの外に置き、ファイルのリスト`a`を`i`ループさせます。同時にExcelの行数に利用するための`j`もカウンタ変数として使用します。
26
60
 
61
+ 本当は、リストとカウンタ変数を同時に使う方法もありますが、変化が多くなりそうなので使用していません。`for`と`enumerate`で検索してみてください。
62
+
63
+
64
+
65
+ `s.lstrip('test=')`の部分は切り出した数字が文字列になっていますので、`int`で整数化しています。
66
+
67
+
68
+
69
+ セルの指定は`ws.cell(row=j,column=2).value = l`です。
70
+
27
- 質問者さんは`for j in range(5):`でープを回しいます、この場合、iは0から4までのループになりますので、セルB1からB5まで記入されたいのであれば`for j in range(1,6):`とた方がよいと思います。一般に`range(n,m):`でnからm-1の連番生成します。
71
+ の指定につい、row行番号になり1,2,3…は1行目,2行目3行目…相当しcolumnが列番号になり1,2,3…はA列,B列,C列…に相当します。そのため、カウンタ変数`j`をループさせること、B1,B2,B3指定ていくことになります。
72
+
73
+
74
+
75
+ ループを抜けたところでエクセルファイルを保存して終了となります。

4

コードの修正

2020/01/04 18:58

投稿

frederick_1974
frederick_1974

スコア303

test CHANGED
@@ -2,15 +2,15 @@
2
2
 
3
3
  ```Python
4
4
 
5
+ wb = px.Workbook()
6
+
7
+ ws = wb.active
8
+
5
9
  for j in range(1,6):
6
-
7
- wb = px.Workbook()
8
-
9
- ws = wb.active
10
10
 
11
11
  ws.cell(row=i,column=2).value = l
12
12
 
13
- wb.save('C:...\samp.xlsx')
13
+ wb.save('C:...\samp.xlsx')
14
14
 
15
15
  ```
16
16
 

3

文言の追加

2020/01/04 18:23

投稿

frederick_1974
frederick_1974

スコア303

test CHANGED
@@ -1,11 +1,27 @@
1
- `ws.cell(row=i,column=2).value = l`セルを指定して値を書き込めます。
1
+ エラー該当部分は、以下のコードいいのではないかと思います。
2
2
 
3
+ ```Python
4
+
5
+ for j in range(1,6):
6
+
7
+ wb = px.Workbook()
8
+
9
+ ws = wb.active
10
+
11
+ ws.cell(row=i,column=2).value = l
12
+
13
+ wb.save('C:...\samp.xlsx')
14
+
15
+ ```
16
+
17
+ 修正箇所は2箇所です。
18
+
19
+ 一つは`ws.cell(row=i,column=2).value = l`です。
20
+
3
- rowが行番号になり1,2,3…は1行目,2行目3行目…に相当し、columnが列番号になり1,2,3…はA列,B列,C列…に相当します。そのため、iをループさせることで、B1,B2,B3を指定していくことになります。
21
+ セルの指定について、rowが行番号になり1,2,3…は1行目,2行目3行目…に相当し、columnが列番号になり1,2,3…はA列,B列,C列…に相当します。そのため、iをループさせることで、B1,B2,B3を指定していくことになります。
4
22
 
5
23
 
6
24
 
7
- ただ、`for j in range(5):`でループを回していますが、この場合0から4までのループになりますので、セルB1からB5までに記入されたいのであれば、`for j in range(1,6):`とした方がよいと思います。
25
+ もう一つは`for j in range(1,6):`す。
8
26
 
9
-
10
-
11
- 一般に`range(n,m):`でnからm-1の連番を生成します。
27
+ 質問者さんは`for j in range(5):`でループを回していますが、この場合、iは0から4までのループになりますので、セルB1からB5までに記入されたいのであれば、`for j in range(1,6):`とした方がよいと思います。一般に`range(n,m):`でnからm-1の連番を生成します。

2

文言の追加

2020/01/04 18:16

投稿

frederick_1974
frederick_1974

スコア303

test CHANGED
@@ -1,4 +1,6 @@
1
1
  `ws.cell(row=i,column=2).value = l`でセルを指定して値を書き込めます。
2
+
3
+ rowが行番号になり1,2,3…は1行目,2行目3行目…に相当し、columnが列番号になり1,2,3…はA列,B列,C列…に相当します。そのため、iをループさせることで、B1,B2,B3を指定していくことになります。
2
4
 
3
5
 
4
6
 
@@ -6,4 +8,4 @@
6
8
 
7
9
 
8
10
 
9
- `range(n,m):`でnからm-1の連番を生成しますので
11
+ 一般に`range(n,m):`でnからm-1の連番を生成します。

1

一部、語句の修正

2020/01/04 17:17

投稿

frederick_1974
frederick_1974

スコア303

test CHANGED
@@ -1,4 +1,4 @@
1
- セルの指定を`ws.cell(row=i,column=2).value = l`で指定きます。
1
+ `ws.cell(row=i,column=2).value = l`でセルを指定して値を書込めます。
2
2
 
3
3
 
4
4