最近在一家公司上班,发现公司的操作过于落后了,忍不住给他们写了个脚本,统计订单。

import xlwt as xw
import xlrd as xr
from pandas.core.dtypes.inference import is_numberxlsx_file_path = input("请输入送货单模版文件(带上路径)比如E:/filename.xlsx  :")
xls_file_path = input("请输入将要保存的出库信息表路径,比如E:/ :")
xls_sheet_name = input("请输入出库日期,比如0902等 :")excel_obj = xr.open_workbook(xlsx_file_path)
excel_sheet_names = excel_obj.sheet_names()
excel_sheets = excel_obj.sheets()account_datas = []
for excel_sheet in excel_sheets:if excel_sheet.nrows > 3:if(excel_sheet.row_values(3)[0] == "送货单"):account_data = {}#获取用户名name_row_value = excel_sheet.row_values(4)if(name_row_value[0] == "客户名称:"):account_data['name'] = name_row_value[1]#获取客户地址address_row_value = excel_sheet.row_values(5)if(address_row_value[0] == "客户地址"):account_data['address'] = address_row_value[1]#获取客户代码和送货时间code_row_value = excel_sheet.row_values(6)if(code_row_value[0] == "客户代码:"):account_data['code'] = code_row_value[1]#获取送货时间str_code_row_value = ''.join(map(str,code_row_value))list_split_date_value = str_code_row_value.split("送货日期:")if(len(list_split_date_value) >= 2):account_data['date'] = list_split_date_value[1]else:account_data['date'] = ""#获取客户详细订单order_header_row_value = excel_sheet.row_values(7)flag = 0account_data['order'] =[]order_data_start = 0header_name = []tmp_count = 0if(order_header_row_value[0] == "序号"):for orv in order_header_row_value:if(orv == "商品名称"):flag = 1order_data_start = tmp_countif(flag == 1):header_name.append(orv)if(orv == "备注"):breakif(flag == 0):tmp_count = tmp_count + 1else:tmp_count = tmp_count + 1else:continueorder_data_row_num = 8tmp_order_data_start = order_data_startwhile 1:#读取具体订单商品数据order_data_detail_row = excel_sheet.row_values(order_data_row_num)if(is_number(order_data_detail_row[0]) == 0):breakaccount_order = {}for hn in header_name:account_order[hn] = order_data_detail_row[tmp_order_data_start]tmp_order_data_start = tmp_order_data_start + 1#如果表单无实收重量则按发送重量if(('实收重量' in header_name) == 0):account_order['实收重量'] = account_order['送货重量']if(account_order['送货重量'] != '' and float(account_order['送货重量'])*1000 > 0):account_data['order'].append(account_order)order_data_row_num = order_data_row_num + 1tmp_order_data_start = order_data_startif(len(account_data['order']) > 0):account_datas.append(account_data)else:print(excel_sheet.name + ":不是一张单据")else:print(excel_sheet.name + ":不是一张单据")#写入销售明细表
write_excel_obj = ""
write_excel_sheet_name = xls_sheet_name
write_excel_head_name = "广东xxxx有限公司"write_excel_obj = xw.Workbook(encoding = 'utf-8')
write_excel_obj_worksheet = write_excel_obj.add_sheet(write_excel_sheet_name)
#设置单元格列宽
write_excel_obj_worksheet.col(0).width = 11*500
write_excel_obj_worksheet.col(1).width = 22*500
write_excel_obj_worksheet.col(2).width = 23*500
write_excel_obj_worksheet.col(3).width = 12*500
write_excel_obj_worksheet.col(4).width = 12*500
write_excel_obj_worksheet.col(5).width = 12*500
write_excel_obj_worksheet.col(6).width = 12*500
write_excel_obj_worksheet.col(7).width = 12*500
write_excel_obj_worksheet.col(8).width = 18*500#创建新的单元格样式def create_style( font_height, bold, is_currency = False, is_date = False):#设置单元格格式style = xw.XFStyle()font = xw.Font()font.name = u"宋体"font.height = font_heightfont.bold = boldstyle.font = fontalignment = xw.Alignment()alignment.horz = xw.Alignment.HORZ_CENTERalignment.vert = xw.Alignment.VERT_CENTERstyle.alignment = alignmentstyle.alignment.wrap = 1borders = xw.Borders()borders.left = xw.Borders.NO_LINEborders.right = xw.Borders.THINborders.top = xw.Borders.NO_LINEborders.bottom = xw.Borders.THINborders.right_colour = 0x40borders.left_colour = 0x40borders.top_colour = 0x40borders.bottom_colour = 0x40style.borders = bordersif(is_currency):style.num_format_str = '"¥"#,##0.00'if(is_date):style.num_format_str = 'yyyy-mm-dd'return stylestyle_header = create_style(16*20,True,False,False
)style_header2 = create_style(22*20,True,False,False
)style_normal = create_style(16*20,False,False,False
)style_date = create_style(16*20,True,False,True
)style_currency = create_style(16*20,True,True,False
)style_currency2 = create_style(16*20,False,True,False
)
write_excel_obj_worksheet.write_merge(0,0,0,8, write_excel_head_name, style_header2)write_excel_obj_worksheet_title = ['日期','客户名称','商品名称','单位','送货重量','实收重量','单价','金额','备注']
#写入标头
cur_col = 0
for weow in write_excel_obj_worksheet_title:write_excel_obj_worksheet.write(1,cur_col,weow, style_header)cur_col = cur_col + 1
#写入具体数据
cur_row = 2
for account_data in account_datas:for od in account_data['order']:for title, value in od.items():if((title in write_excel_obj_worksheet_title) == 0):continuetitle_col = write_excel_obj_worksheet_title.index(title)if(title_col >= 0):if(title == "金额"):Fn = 'F' + str(cur_row+1)Gn = 'G' + str(cur_row+1)write_excel_obj_worksheet.write(cur_row,title_col,xw.Formula(Fn + '*' + Gn),style_currency)elif(title == '单价'):write_excel_obj_worksheet.write(cur_row,title_col,value,style_currency2)else:write_excel_obj_worksheet.write(cur_row,title_col,value,style_normal)else:continuedate_col = write_excel_obj_worksheet_title.index('日期')write_excel_obj_worksheet.write(cur_row,date_col,account_data['date'],style_date)name_col = write_excel_obj_worksheet_title.index("客户名称")write_excel_obj_worksheet.write(cur_row,name_col,account_data['name'],style_normal)write_excel_obj_worksheet.height_mismatch = Truewrite_excel_obj_worksheet.row(cur_row).height = 18*1000cur_row = cur_row + 1print(account_data['name'] + "写入完毕")
E3 = "E3"
En = "E" + str(cur_row)
H3 = "H3"
Hn = "H" + str(cur_row)
total_name_index = write_excel_obj_worksheet_title.index('单位')
total_value_index= total_name_index + 1
write_excel_obj_worksheet.write(cur_row,total_name_index,'总出货量:',style_header)
write_excel_obj_worksheet.write(cur_row,total_value_index,xw.Formula('SUM('+E3+':'+En+')'),style_normal)
#总额
total_price_index = write_excel_obj_worksheet_title.index('单价')
total_p_v_index= total_price_index + 1
write_excel_obj_worksheet.write(cur_row,total_price_index,'总额:',style_header)
write_excel_obj_worksheet.write(cur_row,total_p_v_index,xw.Formula('SUM('+H3+':'+Hn+')'),style_currency2)print("全部写入完毕")file_name ="出库信息表" + xls_sheet_name + ".xls"
#生成xlsx文件
write_excel_obj.save(xls_file_path + "/" + file_name)

一次excel表格操作相关推荐

  1. python处理excel表格实例-python2 对excel表格操作完整示例

    本文实例讲述了python2 对excel表格操作.分享给大家供大家参考,具体如下: #!/usr/bin/env python2 # -*- coding: utf-8 -*- "&quo ...

  2. QT之Excel表格操作

    QT之Excel表格操作 提前准备 打开读取excel文件 写入保存excel文件 提前准备 pro文件中添加: QT += axcontainer 在需要使用excel的文件中添加: #includ ...

  3. Python的excel表格操作,数据提取分析

    自己编写了一些表格的操作方法,只需传入表格路径和表的位置,就能在根据自己使用的方法展示不同类型的数据如:字典,列表,字典里套列表,列表里套列表,查询最大行数,在指定的行数插入数据等,有疑问欢迎评论 c ...

  4. Python3中的Excel表格操作

    一.2003以前的表格以.xls后缀,用xlwt来写表格,用xlrd来读取表格:2007的表格以.xlsx后缀,用openpyxl来读写表格. 二.xlrd使用介绍 1.导入模块   import x ...

  5. 计算机基础表格函数基础知识大全,大一计算机题库和答案:大一计算机基础excel表格操作题求解if函数部分...

    大一计算机基础excel表格操作题求解if函数部分 引号呢?字符串必须要用引号引起来,不然就是变量,就非法了.要类似这样: =IF(C3="电子",11000) 大学计算机基础期末 ...

  6. python对excel表格操作

    在python中,对excel表格读数据和写数据,主要用到下面的模块: xlrd 读取excel表中的数据 xlwt 创建一个全新的excel文件,然后对这个文件进行写入内容以及保存 1.xlrd 模 ...

  7. python数据分析,用python对excel表格操作

    用python操作excel表格,进行数据分析 项目场景: 提示:通常我们对excel表格进行删除多个项的时候,如果一条一条的删除就会花费很多时间,并且也不知道要删除的部分是否删除完,进行查询,分类的 ...

  8. java excel 表格操作_Java实现操作excel表格

    最近老师布置了个任务,用Java对excel后缀名为xlsx的文件进行简单的增,删,改,查操作:虽说是个简单的程序,可作为刚接触的我来说还是有些磕磕碰碰.不过好在还是完成了,进行一个简单的总结. 首先 ...

  9. 无字天书之Python第十五页(Excel表格操作)

    博客内容 传送门 正文读 正文写 到此Python基础就此结束- 传送门 无字天书之Python第一页 无字天书之Python第二页 无字天书之Python第三页 无字天书之Python第四页 无字天 ...

  10. Python Excel表格操作总结

    最近无意中帮一个朋友处理下表格,表格有几千行,让我生成一个新格式的表格 我们看源文件格式 期望生成的格式 对比发现其实只要对源文件第二列"题干"进行解析处理,分别读取出题目.选项( ...

最新文章

  1. boost::mpl::equal_to相关的测试程序
  2. java获取接口数据类型_java中调用第三方接口获取数据的方式
  3. win7 右键增加打开 powershell选项
  4. 开源数据库中间件-MyCa初探与分片实践
  5. 表达式如何获取复选框的值_Nuke表达式 Expression节点讲解
  6. 分数怎么化成带分数_人教版五年级下册第4单元带分数及把假分数化成整数或带分数教学视频+知识点...
  7. 将您的SQL Server工作负载迁移到PostgreSQL –第3部分
  8. 电脑解锁后黑屏有鼠标_电脑开机黑屏只有鼠标如何解决
  9. 【路径规划】基于matlab多种算法无人机路径规划【含Matlab源码 1263期】
  10. ES6数组知识点,巧妙运用数组,对循环说88
  11. Office 2003如何打开后缀名为docx的Microsoft Word 文档
  12. 测试大纲法与 场景法
  13. 基于汽车后市场应用 汽车VIN码识别 车架号识别数据SDK
  14. C++基础学习之重载和重写的区别
  15. qt html字体变红,QLineEdit、QLabel字体大小、颜色设置
  16. 用快递100企业版接口(API)实现快递查询-Python
  17. 最短路 (Dijstra) 最短路
  18. Apache 配置------FastCGI方式使用PHP(包含:linux下编译安装fmod_fcgid,配置apache以支持FastCGI)
  19. 云媒易:做好小红书推广的6个关键点
  20. 百度AI攻略:实现人体姿态判定打分

热门文章

  1. osgb转json_cesuim加载倾斜摄影OSGB三维数据完整过程(超详细)
  2. 预约活动报名登记缴费小程序开发制作功能介绍
  3. 【边缘计算】移动边缘计算中延迟和能量约束任务卸载的最优拍卖
  4. filenet安装前置工作-总结安装一天的成果
  5. kafka下载及安装
  6. mac上安装和启动kafka
  7. mock server java_1分钟搭建极简mock server
  8. 计算机教案word格式模板,大学授课教案模板Word格式
  9. 使用c++实现一个FTP客户端(一)
  10. 水经注万能地图下载器如何导出透明TIF标签