作者Pettitte1 (低調奢華有內涵)
看板Python
標題[問題] xlwings判斷範圍內其中一格的值
時間Sun Sep 4 19:38:40 2022
請問使用xlwings
如果我有一個excel表如下
date 1101 1102 1103 1104 1107
2021/8/27 47.45 44.2 22.05 20.8
2021/8/30 47.6 44.7 22.05 20.75
2021/8/31 48.45 44.9 22.35 20.85
2021/9/1 48.4 45.65 22.55 21.15
2021/9/2 47.9 44.85 22.4 21
我想要判斷這整個範圍('A1:F6')只要其中一格是None
就print('yes')
其他就print('no')
要怎麼打呢?
我用if 判斷其中一格是None都沒問題
但是儲存格改成範圍後 都只會回傳no
請問要怎麼打呢? 謝謝
代碼如下
if sheet.range((2,6),(2,6)).value or sheet.range((2,7),(2,7)).value is None:
print('Yes')
else:
print('No')
===>都只會回傳NO
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 59.115.70.141 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1662291524.A.8AB.html
1F:→ surimodo: if (sheet.range((2,6),(2,6)).value is None) or (she 09/04 19:59
2F:→ surimodo: et.range((2,7),(2,7)).value is None): 09/04 19:59
3F:→ surimodo: ==== 09/04 20:43
4F:→ Pettitte1: 可以了 我在想想怎麼變成i 謝謝 09/04 21:05
5F:→ Pettitte1: 是不是不能直接用(sheet.range((2,2),(i,j)).value is 09/04 21:22
6F:→ Pettitte1: None): 這樣 要用While? 09/04 21:23
7F:→ surimodo: 不能 我想到的是用領個for迴圈偵測 09/04 21:49
謝謝回答 不過會跳出TypeError: 'float' object is not iterable
我是寫成
# for i in range(6,15):
# i1 = i - 1
# i2 = i - 2
# i3 = i - 3
# i4 = i - 4
# if (sma5_sheet.cells[i,2].value is None) or
(sma5_sheet.cells[i1,2].value is None) or ((sma5_sheet.cells[i2,2].value is
None)) or (sma5_sheet.cells[i3,2].value is None) or
(sma5_sheet.cells[i4,2].value is None):
# print('Yes')
# else:
# print('No')
每一格都判斷一次 這樣是有用的 但是就變成很長一串
如果要變成60的話要弄到i60
請問有沒有更快的寫法呢?
謝謝
※ 編輯: Pettitte1 (59.115.70.141 臺灣), 09/04/2022 22:07:31
9F:→ surimodo: 但這方法沒到很好 應該能用function包裝跑幾比快 09/04 21:52
10F:→ surimodo: 而且有一些問題 09/04 21:52
11F:→ surimodo: 對 這就是我說的問題 因為你的測資有很多可能 09/04 22:15
12F:→ surimodo: 要把程式兩個為圈改成一個迴圈 09/04 22:16
13F:→ surimodo: 如果範圍是('A1:F6') 理論上正常 09/04 22:19
14F:→ surimodo: 但你丟了其他 可能是A1:A6 之類就會跳ERROR 09/04 22:20
15F:推 lycantrope: 有any可以用吧 09/04 23:05
17F:→ Pettitte1: any可以用 不過all比較適合我 謝謝囉 09/05 16:34
18F:→ lycantrope: all is not None與any is None等價,你開心就好... 09/05 16:45