每次搞考勤都要弄很久很久,一直想著搞一個代碼出來,一直拖一直拖一直拖,直到這次忍不了了,結果用的時間都可以搞兩次考勤了,而且因為手殘還把代碼搞沒了,重寫了一次==
都是淚,所以一定要記下來
python操作excel用到了3個包,讀數據(只能讀不能寫)import xlrd,寫數據(只能寫入一個新的文件不能讀)import xlwt,因為需要讀寫同一個文件,所以參考了網上的方法,用到了from xlutils.copy import copy,通過只讀的方式打開,然后用copy方法操作,這里是原文的鏈接。
小程序還用到了:修改單元格背景色,識別單元格背景色,合并單元格幾個操作
0、excel之外,還學了一招,在命令行輸出中文:
print(repr(['遲到的夾心餅干']).decode('string-escape'))
1、讀寫同一個表格的曲線救國方法:
rb = xlrd.open_workbook(filename) ?#打開file
table = rb.sheet_by_index(0) # xlrd中的方法
value = table.cell(1,2).value.encode('utf-8') #讀取文件內容,有中文時用utf-8編碼
wb = copy(rb) # 用到xlutils的copy
#通過get_sheet()獲取的sheet有write()方法
ws = wb.get_sheet(0)? #1代表是寫到第幾個工作表里,從0開始算是第一個。
ws.write(x, y, 'changed!') #寫入同一個文件
wb.save(filename) #保存相當于關文件
我試過用xlrd和xlwt同時打開一個文件,結果是悲劇的,write會覆蓋源文件的所有,就好像是在源文件上貼了一張白紙==
2、修改單元格背景色:
通過寫入時設置樣式來改變單元格背景色,很奇特的是excel的顏色是數字表示的,不是RGB,是單純的數字,也是用的網上的例子,原文在這里。
file=xlwt.Workbook() #xlwt新建文件的方法
table=file.add_sheet('sheet name',cell_overwrite_ok=True) #這個True要打開,沒試過不打開啥樣
for i in range(0,256):
stylei= xlwt.XFStyle()? ? ? ? ? ? #初始化樣式
patterni= xlwt.Pattern()? ? ? ? ? #為樣式創建圖案
patterni.pattern=1? ? ? ? ? ? ? ? #設置底紋的圖案索引,1為實心,2為50%灰色,對? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 應為excel文件單元格格式中填充中的圖案樣式
patterni.pattern_fore_colour=i? ? #設置底紋的前景色,對應為excel文件單元格格式? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 中填充中的背景色
#patterni.pattern_back_colour=35? #設置底紋的背景色,對應為excel文件單元格格式? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 中填充中的圖案顏色
stylei.pattern=patterni? ? ? ? ? #為樣式設置圖案
table.write(i,0,i,stylei)? ? ? ? #使用樣式
file.save('colour.xls')
這一小段代碼就把顏色和對應的數字給找出來了,贊。
3、識別單元格背景顏色
也是用的網上的例子,網絡真是個好東西^_^,原文在這里?。
book = xlrd.open_workbook("colour.xls", formatting_info=1) #這個formatting要打開,不然操作過后之前設置的顏色就全沒了,別問我為什么知道
sheet = book.sheet_by_index(0)
xfx = sheet.cell_xf_index(row, col)
xf = book.xf_list[xfx]?
bgx = xf.background.pattern_colour_index # 這一步取出來的bgx就是表示背景顏色的數字
4、合并單元格
這個最簡單了
sheet.write_merge(row_begin,row_end,col_begin,col_end,value)
#這個參數是我試出來的==,因為網上的代碼沒有注釋,試完了想起來好像可以去找官方文檔讀一讀。。。