日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

python自动填表格_Python读写Excel自动填表

發布時間:2024/8/1 python 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python自动填表格_Python读写Excel自动填表 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

前面一篇文章提到: Excel復雜排序和不同表復制數據業務實戰

對于非程序員來說,基本也只能這樣操作了,對于希望實現程序自動化的筆者來說,寫個小工具不成問題,這里用Python寫個Excel賬單自動填表,可以省掉很多事

需要準備的Python庫

xlrd讀Excel

xlwt寫Excel

xlutils是Excel工具庫,安裝這個庫的前提是安裝了xlrd和xlwt,安裝很簡單Python2.7下三個pip命令搞定

pip install xlrd

pip install xlwt

pip install xlutils下面直接給出Python2.7的代碼,demo1是電信公司賬單,最初可能是csv格式的,需要轉成xls格式然后改為demo1.xls,demo2是分攤表,建議去掉多余的數據,否則會報錯

# -*- coding: UTF-8 -*-

import xlrd

import xlwt

from xlutils.copy import copy;

workbook = xlrd.open_workbook('demo1.xls')

sheet1 = workbook.sheets()[0]

nrows = sheet1.nrows #行數

ncols = sheet1.ncols #列數

#搜索電信公司賬單行列 字符串為 業務號碼 實收

flag = False #判斷搜索完成的標志

buss_num_col = 0

real_pay_col = 0

start_row = 0

for i in range(nrows):

rowi_value = sheet1.row_values(i) #得到一行數據

for j in range(ncols):

cellij_value = rowi_value[j]

if isinstance(cellij_value, basestring):

if cellij_value ==u'業務號碼':

buss_num_col = j

start_row = i

elif cellij_value ==u'實收':

real_pay_col = j

flag = True

if flag:

break

data = {} #初始化字典

for i in range(start_row+1,nrows):

cell_num = sheet1.cell(i,buss_num_col).value

cell_pay = sheet1.cell(i,real_pay_col).value

cell_num = cell_num.replace('0731-','') #去掉前綴0731-

#存到字典里

data[cell_num] = cell_pay

print u'賬單號碼個數' + str(len(data)-1) #因為把最后一列總計也算進去了,所以減1

#下面操作新工作簿,寫工作簿之前先讀工作簿里的工作表

#先讀取所有號碼

workbook2 = xlrd.open_workbook('demo2.xls')

sheet_names = workbook2.sheet_names()

index = sheet_names.index(u'7月')

sheet2 = workbook2.sheet_by_index(index)

nrows = sheet2.nrows #行數

ncols = sheet2.ncols #列數

#搜索分攤表行列 字符串為 電話號碼 話費,這里的電話號碼占兩行,話費占一行,起始行以話費為準

flag = False

buss_num_col = 0

real_pay_col = 0

start_row = 0

for i in range(nrows):

rowi_value = sheet2.row_values(i) #得到一行數據

for j in range(ncols):

cellij_value = rowi_value[j]

if isinstance(cellij_value, basestring):

if cellij_value ==u'電話號碼':

buss_num_col = j

elif cellij_value ==u'話費':

real_pay_col = j

start_row = i

flag = True

if flag:

break

#讀取號碼所在行

row_data = {} #初始化字典

for i in range(start_row+1,nrows):

cell_num = sheet2.cell(i,buss_num_col).value

cell_pay = sheet2.cell(i,real_pay_col).value

if cell_num:

cell_num = str(int(cell_num))

#這里電話號碼有可能出現重復,按理說應該是不重復的,重復就寫到日志,這里懶得寫了

#程序里行數和列數從0開始,但是用戶看到的excel表格打開是從1開始,為了方便用戶查看就加1

if row_data.has_key(cell_num):

print u'號碼在分攤表中出現重復!'+ u'號碼為:' + str(cell_num) + u'上一次出現的行:'+ str(row_data[cell_num]+1) + u'本次次出現的行:'+ str(i+1)

#存到字典里

row_data[cell_num] = i

print u'分攤表號碼(去重)個數' + str(len(row_data)) #分攤表總計那一個單元格是空,已經被if排除掉了

#在原有excel上寫數據并保留格式,后來發現保留格式太難了,有特殊字體和跨列合并單元格出現的基本就沒法保留

oldWb = xlrd.open_workbook('demo2.xls', formatting_info=True); #刪除多余數據,調好格式可以保留,最后再粘貼回去就好了,保留格式主要為了方便粘貼合并的單元格,實際保留的效果并不很好很差

print oldWb; #

newWb = copy(oldWb);

print newWb; #

sheet_names = oldWb.sheet_names()

index = sheet_names.index(u'7月')

newWs = newWb.get_sheet(index);

#遍歷寫入

for cell_num in row_data.keys():

if data.has_key(cell_num):

newWs.write(row_data[cell_num], real_pay_col, data[cell_num])

else:

print u"原賬單不存在此號碼:" + cell_num + u'號碼所在行為:'+ str(row_data[cell_num]+1)

newWs.write(row_data[cell_num], real_pay_col, 0.0)

print u'成功寫入新數據'

newWb.save('demo2.xls')

print u'成功寫入同名文件'結果截圖

總結

以上是生活随笔為你收集整理的python自动填表格_Python读写Excel自动填表的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。