一次excel表格操作
最近在一家公司上班,发现公司的操作过于落后了,忍不住给他们写了个脚本,统计订单。
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表格操作相关推荐
- python处理excel表格实例-python2 对excel表格操作完整示例
本文实例讲述了python2 对excel表格操作.分享给大家供大家参考,具体如下: #!/usr/bin/env python2 # -*- coding: utf-8 -*- "&quo ...
- QT之Excel表格操作
QT之Excel表格操作 提前准备 打开读取excel文件 写入保存excel文件 提前准备 pro文件中添加: QT += axcontainer 在需要使用excel的文件中添加: #includ ...
- Python的excel表格操作,数据提取分析
自己编写了一些表格的操作方法,只需传入表格路径和表的位置,就能在根据自己使用的方法展示不同类型的数据如:字典,列表,字典里套列表,列表里套列表,查询最大行数,在指定的行数插入数据等,有疑问欢迎评论 c ...
- Python3中的Excel表格操作
一.2003以前的表格以.xls后缀,用xlwt来写表格,用xlrd来读取表格:2007的表格以.xlsx后缀,用openpyxl来读写表格. 二.xlrd使用介绍 1.导入模块 import x ...
- 计算机基础表格函数基础知识大全,大一计算机题库和答案:大一计算机基础excel表格操作题求解if函数部分...
大一计算机基础excel表格操作题求解if函数部分 引号呢?字符串必须要用引号引起来,不然就是变量,就非法了.要类似这样: =IF(C3="电子",11000) 大学计算机基础期末 ...
- python对excel表格操作
在python中,对excel表格读数据和写数据,主要用到下面的模块: xlrd 读取excel表中的数据 xlwt 创建一个全新的excel文件,然后对这个文件进行写入内容以及保存 1.xlrd 模 ...
- python数据分析,用python对excel表格操作
用python操作excel表格,进行数据分析 项目场景: 提示:通常我们对excel表格进行删除多个项的时候,如果一条一条的删除就会花费很多时间,并且也不知道要删除的部分是否删除完,进行查询,分类的 ...
- java excel 表格操作_Java实现操作excel表格
最近老师布置了个任务,用Java对excel后缀名为xlsx的文件进行简单的增,删,改,查操作:虽说是个简单的程序,可作为刚接触的我来说还是有些磕磕碰碰.不过好在还是完成了,进行一个简单的总结. 首先 ...
- 无字天书之Python第十五页(Excel表格操作)
博客内容 传送门 正文读 正文写 到此Python基础就此结束- 传送门 无字天书之Python第一页 无字天书之Python第二页 无字天书之Python第三页 无字天书之Python第四页 无字天 ...
- Python Excel表格操作总结
最近无意中帮一个朋友处理下表格,表格有几千行,让我生成一个新格式的表格 我们看源文件格式 期望生成的格式 对比发现其实只要对源文件第二列"题干"进行解析处理,分别读取出题目.选项( ...
最新文章
- boost::mpl::equal_to相关的测试程序
- java获取接口数据类型_java中调用第三方接口获取数据的方式
- win7 右键增加打开 powershell选项
- 开源数据库中间件-MyCa初探与分片实践
- 表达式如何获取复选框的值_Nuke表达式 Expression节点讲解
- 分数怎么化成带分数_人教版五年级下册第4单元带分数及把假分数化成整数或带分数教学视频+知识点...
- 将您的SQL Server工作负载迁移到PostgreSQL –第3部分
- 电脑解锁后黑屏有鼠标_电脑开机黑屏只有鼠标如何解决
- 【路径规划】基于matlab多种算法无人机路径规划【含Matlab源码 1263期】
- ES6数组知识点,巧妙运用数组,对循环说88
- Office 2003如何打开后缀名为docx的Microsoft Word 文档
- 测试大纲法与 场景法
- 基于汽车后市场应用 汽车VIN码识别 车架号识别数据SDK
- C++基础学习之重载和重写的区别
- qt html字体变红,QLineEdit、QLabel字体大小、颜色设置
- 用快递100企业版接口(API)实现快递查询-Python
- 最短路 (Dijstra) 最短路
- Apache 配置------FastCGI方式使用PHP(包含:linux下编译安装fmod_fcgid,配置apache以支持FastCGI)
- 云媒易:做好小红书推广的6个关键点
- 百度AI攻略:实现人体姿态判定打分