在實際的工作中,經常會遇到,把一個表信息 顛過來倒過去的情況。這會產生大量的重復工作。
比如說:發貨表里頭記錄了 很多客戶發貨訂單信息。但是我們給客戶發貨的時候,需要制作一張送貨單,告訴客戶 貨物的詳情。
這個時候如果代碼可以搞定,就可以減少很多不必要的工作啦!
截圖比較隨意,大致就是這個意思了。
下面是代碼,截圖太惡心了 不理解需求的可以看下。
import xlwings as xw
def delivery_doc(l,src,dst,model): wb = xw.Book(r'%s'%src) ws = wb.sheets["2021年"] ws.activate i = l[0] order_name = ws.range('c%s'%i).value order_place = ws.range('f%s'%i).value order_id = ws.range('p%s'%i).value receiver = str(ws.range('g%s'%i).value)+""+str(int(ws.range('h%s'%i).value)) goods_name = ws.range('k%s'%i).value goods_model = ws.range('l%s'%i).value goods_amount = ws.range('m%s'%i).value wb1 = xw.Book(r"%s"%model) ws1 = wb1.sheets['牙膏'] ws1.range('c5').value = order_name ws1.range('g5').value = order_place ws1.range('c8').value = order_id ws1.range('g9').value = receiver ws1.range('b12').value = goods_name ws1.range('c12').value = goods_model ws1.range('d12').value = goods_amount for j in range(1,len(l)): i= l[j] order_name = ws.range('c%s'%i).value order_place = ws.range('f%s'%i).value order_id = ws.range('p%s'%i).value receiver = str(ws.range('g%s'%i).value)+""+str(int(ws.range('h%s'%i).value)) goods_name = ws.range('k%s'%i).value goods_model = ws.range('l%s'%i).value goods_amount = ws.range('m%s'%i).value if ws1.range('c5').value == order_name: if ws1.range('b12').value == goods_name: ws1.range('a%s'%r).value += goods_amount r = 12 + j ws1.api.Rows(r).Insert() ws1.range('a%s'%r).value = '%s'% (j+1) ws1.range('b%s'%r).value = goods_name ws1.range('c%s'%r).value = goods_model ws1.range('d%s'%r).value = goods_amount ws1.range('e%s'%r).value = '個' ws1.name = order_place wb1.save(r'%s\驗收回執單-%s.xlsx'%(dst,order_place)) wb1.close() wb.close() l = [40,41,42] src = 'E:\\Yzh\\3.16 中煙\\中煙訂單操作\\湖北中煙發貨表-2021年.xlsx' dst = 'E:\\Yzh\\中煙\\5月 中煙\\5.13 中煙\\回執' model = "E:\\Yzh\\中煙\\5月 中煙\\5.13 中煙\\回執\\驗收回執單-南平 牙膏.xlsx" delivery_doc(l,src,dst,model)
這里提煉幾個xlwings 的常用方法:
# 插入一行 第十三行 ws1.api.Rows(13).Insert() # 刪除整行 ws1.range('a12').api.EntireRow.Delete() # 復制sheet 頁 ws1.api.Copy(After=ws1.api)
更新一下,增加一下判斷條件
order_name不同時,另起一張回執
order_name == ‘待補單’時,待補單空白,有多少個產品,起多少張回執
order_name 相同,但是 order_place 不同時,另起一張回執
order_name 相同,order_place 相同,但是order_id 不同時,另起一張回執
import xlwings as xw import time l = range(681,688) src = 'E:\\發貨表-2021年.xlsx' dst = 'E:\\回執' model = "E:\\回執\\model.xlsx" wb = xw.Book(r'%s' %src) ws = wb.sheets["2021年"] ws.activate wb1 = xw.books.open(r"%s"%model) model_sheet = wb1.sheets["model"] dict = {} for i in l: order_name = ws.range('c%s'%i).value order_place = ws.range('f%s'%i).value order_id = ws.range('p%s'%i).value + "-1" receiver = ws.range('g%s'%i).value + ws.range('h%s'%i).value goods_name = ws.range('k%s'%i).value goods_model = ws.range('l%s'%i).value goods_amount = ws.range('m%s'%i).value if order_name not in dict: model_sheet.api.Copy(After = model_sheet.api) ws1 = wb1.sheets['model (2)']
if order_name == '待補單':
ws1.range('c5').value = ''
else: ws1.range('c5').value = order_name ws1.range('g5').value = order_place ws1.range('c8').value = order_id ws1.range('g9').value = receiver ws1.range('b12').value = goods_name ws1.range('c12').value = goods_model ws1.range('d12').value = goods_amount ws1.name = order_name + order_place dict[order_name] = [order_place] else: if order_name == '待補單': model_sheet.api.Copy(After = model_sheet.api) ws1 = wb1.sheets['model (2)'] ws1.range('c5').value = ‘’ ws1.range('g5').value = order_place ws1.range('c8').value = order_id ws1.range('g9').value = receiver ws1.range('b12').value = goods_name ws1.range('c12').value = goods_model ws1.range('d12').value = goods_amount ws1.name = order_name + order_place+str(len(dict[order_name])) dict[order_name].append(order_place) else: if order_place not in dict[order_name]: model_sheet.api.Copy(After = model_sheet.api) ws1 = wb1.sheets['model (2)'] ws1.range('c5').value = order_name ws1.range('g5').value = order_place ws1.range('c8').value = order_id ws1.range('g9').value = receiver ws1.range('b12').value = goods_name ws1.range('c12').value = goods_model ws1.range('d12').value = goods_amount ws1.name = order_name + order_place dict[order_name].append(order_place) else: j = dict[order_name].count(order_place) r = 12 + j ws1.api.Rows(r).Insert() ws1.range('a%s'%r).value = '%s'% (j+1) ws1.range('b%s'%r).value = goods_name ws1.range('c%s'%r).value = goods_model ws1.range('d%s'%r).value = goods_amount ws1.range('e%s'%r).value = '個' dict[order_name].append(order_place) time_now = time.strftime("%Y%m%d %H%M%S",time.localtime()) model_sheet.delete() wb1.save(r'%s\驗收回執單 %s.xlsx'%(dst,time_now)) wb1.close() wb.close()
| order_name | order_place | order_id | receiver | goods_name | goods_model | goods_amount | cellphone | address | ||
| HD_20210511 | shenzhen | FH20210511 | zhangsan | apple | apple 11 | 1 | 1234567 | -- | ||
| HD_20210511 | guangzhou | FH20210511 | lisi | lenovo | lenevo plus | 1 | 1234567 | --- |

