用python编写的excel拆分小工具
from datetime import date,datetime
from openpyxl import Workbook
from openpyxl import load_workbook
from openpyxl.styles import Border, Side, Font,Alignment
from tkinter import *
from tkinter import filedialog
from tkinter import messagebox
'''
设置单元格样式
'''
'''
def set_style(name,height,bold=False):
style = xlwt.XFStyle() # 初始化样式
font = xlwt.Font() # 为样式创建字体
font.name = name # 'Times New Roman'
font.bold = bold
font.color_index = 4
font.height = height
style.font = font
# style.borders = borders
return style
'''
'''
def create_file(rows,nrows,ncols,filename):
f = xlwt.Workbook() #创建工作簿
sheet1 = f.add_sheet(u'sheet1',cell_overwrite_ok=True) #创建第一个sheet:
for i in range(0,nrows):
for m in range(0,ncols):
sheet1.write(i,m,rows[i][m],set_style("楷体",300,bold=False))#write(行索引,列列索引,要写入的值,字体)
sheet1.col(m).width = 0x0d00 + m*2500 #设置行宽度
f.save(filename+'.xls')
'''
'''
border = Border(left=Side(border_style=None,color='FF000000'),\
right=Side(border_style=None,color='FF000000'),\
top=Side(border_style=None,color='FF000000'),\
bottom=Side(border_style=None,color='FF000000'),\
diagonal=Side(border_style=None,color='FF000000'),\
diagonal_direction=10,outline=Side(border_style=None,color='FF000000'),\
vertical=Side(border_style=None,color='FF000000'),\
horizontal=Side(border_style=None,color='FF000000'))
alignment=Alignment(horizontal='general',vertical='bottom',\
text_rotation=0,wrap_text=False,shrink_to_fit=False,indent=0)
'''
font = Font(name='楷体',size=15,bold=False,italic=False,\
vertAlign=None,underline='none',strike=False,color='FF000000')
def create_file(rows,nrows,ncols,filename):
f = Workbook() #创建工作簿
sheet = f.active #创建第一个sheet:
for i in range(1,nrows+1):
for m in range(1,ncols+1):
#write(行索引,列列索引,要写入的值,字体)
sheet.cell(row = i,column = m,value = rows[i-1][m-1]).font = font
#sheet.cell(row = i,column = m).border = border
#sheet.cell(row = i,column = m).alignment = alignment
#sheet1.col(m).width = 0x0d00 + m*2500 #设置行宽度
#下一句为改变列宽的方法,还是从国外网站找的,非常有用
sheet.column_dimensions[sheet.cell(row = i,column = m).column].width = 30
f.save(filename_save+filename+'.xlsx')
def create_list(list_name):
list_name = []
return list_name
def main(filepath,col_str):
#workbook = xlrd.open_workbook(filepath)
wb = load_workbook(filename = filepath,data_only = True)#不读取公式
sheetnames = wb.get_sheet_names()
sheet = wb.get_sheet_by_name(sheetnames[0])
nrows = sheet.max_row
ncols = sheet.max_column
#print(nrows)
#sheet = workbook.sheet_by_index(0) # sheet索引从0开始
'''
# 获取所有sheet
#print(workbook.sheet_names()) # [u'sheet1', u'sheet2']
#sheet2_name = workbook.sheet_names()[1]
# 根据sheet索引或者名称获取sheet内容
#sheet2 = workbook.sheet_by_name('sheet2')
# sheet的名称,行数,列数
#print(sheet.name,sheet.nrows,sheet.ncols,type(sheet.nrows))
# 获取整行和整列的值(数组)
'''
rows = []
col_num = 0
row_num = 0
for i in range(1,nrows+1):
list_temp = []
for m in range(1,ncols+1):
data = sheet.cell(row=i,column=m).value
#print(type(data))
#获取划分条件所在的列数,作为main函数的参数传入
if data == col_str:
col_num = m
row_num = i
if (type(data) == datetime):
#转换日期,更加方便,无需datemode打开
data = data.strftime('%Y/%m/%d')
list_temp.append(data) #循环获取表格的所有内容
rows.append(list_temp)
#cols = sheet.col_values(2) # 获取第三列内容
#print(rows)
list_name = []
for i in range(1,nrows+1):
list_name.append(str(sheet.cell(row = i,column = col_num).value))
list_name.append("None")
list_name_unique = list(set(list_name))
list_name_unique.remove(col_str)
list_name_unique.remove("None")#目的是去除空值,这里空值显示为None
for m in list_name_unique:
list_num = [rows[row_num-1]]#col_num为逻辑序号,需要做-1处理
for i in range(0,nrows):
if m == rows[i][col_num-1]:
list_num.append(rows[i])
create_file(list_num,len(list_num),ncols,m)
messagebox.showinfo('提示框','拆分成功',default = 'ok')
root = Tk()
def choosefile():
filename_file = filedialog.askopenfilename()
global filename_save
filename_save = filename_file.rsplit(sep = '/',maxsplit = 1)[0]+'/'
e_file.delete(0,END)
e_file.insert(0,filename_file)
#判断拆分按钮是否可用
def checkButton1(a):
if a.strip() == ""or v2.get().strip() == "":
bton2['state'] = DISABLED
return True
else:
bton2['state'] = NORMAL
return True
def checkButton2(a):
if a.strip() == ""or v1.get().strip() == "":
bton2['state'] = DISABLED
return True
else:
bton2['state'] = NORMAL
return True
Label(root,text = "文件").grid(row = 0)
Label(root,text = "字段").grid(row = 1)
bton1 = Button(root,text = "选择文件",width = 10,command = choosefile)
bton1.grid(row = 3,column = 0,sticky = W,padx = 10,pady = 5)
bton2 = Button(root,text = "开始拆分",state = DISABLED,width = 10,command = lambda:main(e_file.get(),e_name.get()))
bton2.grid(row = 3,column = 1,sticky = E,padx = 10,pady = 5)
checkButtonCMD1 = root.register(checkButton1)
checkButtonCMD2 = root.register(checkButton2)
v1 = StringVar()
v2 = StringVar()
e_file = Entry(root,textvariable = v1,validate = "key",validatecommand = (checkButtonCMD1,'%P'))
e_name = Entry(root,textvariable = v2,validate = "key",validatecommand = (checkButtonCMD2,'%P'))
e_file.grid(row = 0,column = 1,padx = 10,pady = 5)
e_name.grid(row = 1,column = 1,padx = 10,pady = 5)
mainloop()
用python编写的excel拆分小工具的更多相关文章
- 利用 Python 写一个颜值测试小工具
我们知道现在有一些利用照片来测试颜值的网站或软件,其实使用 Python 就可以实现这一功能,本文我们使用 Python 来写一个颜值测试小工具. 很多人学习python,不知道从何学起.很多人学习p ...
- 小白突破百度翻译反爬机制,33行Python代码实现汉译英小工具!
表弟17岁就没读书了,在我家呆了差不多一年吧. 呆的前几个月,每天上网打游戏,我又不好怎么在言语上管教他,就琢磨着看他要不要跟我学习Python编程.他开始问我Python编程什么?我打开了我给学生上 ...
- Python编写的Linux邮件发送工具
之前有用过Linux自带的mail工具来定时发送邮件,但是要装mailx还有配mail.rc,这还比较正常,关键是到了ubantu下这工具用起来真是操蛋,如果哪天其他的unix like操作系统也有需 ...
- Python编写类似nmap的扫描工具
文主要是利用scapy包编写了一个简易扫描工具,支持ARP.ICMP.TCP.UDP发现扫描,支持TCP SYN.UDP端口扫描,如下: usage: python scan.py <-p pi ...
- 用python编写的定向arp欺骗工具
刚学习了scapy模块的一些用法,非常强大,为了练手,利用此模块编写了一个arp欺骗工具,其核心是构造arp欺骗包.加了一个-a参数用于进行全网欺骗,先暂不实现.代码如下: #--*--coding= ...
- Python学习之旅:用Python制作一个打字训练小工具
一.写在前面 说道程序员,你会想到什么呢?有人认为程序员象征着高薪,有人认为程序员都是死肥宅,还有人想到的则是996和 ICU. 别人眼中的程序员:飞快的敲击键盘.酷炫的切换屏幕.各种看不懂的字符代码 ...
- 用 Python 制作一个艺术签名小工具,给自己设计一个优雅的签名
生活中有很多场景都需要我们签字(签名),如果是一些不重要的场景,我们的签名好坏基本无所谓了,但如果是一些比较重要的场景,如果我们的签名比较差的话,就有可能给别人留下不太好的印象了,俗话说字如其人嘛,本 ...
- Python写的大小写转换小工具
几行代码的小工具,用于进行如下转换 TRANSACTIONS ON CLOUD COMPUTING => Transactions On Cloud Computing orig = 'TRAN ...
- python抓取网站URL小工具
1.安装Python requests模块(通过pip): 环境搭建好了! 2.测试一下抓取URL的过程: 抓取出来的URL有JavaScript代码,正则上还有待更加完善,有兴趣的可以研究下~! 工 ...
随机推荐
- liberOJ #6173. Samjia 和矩阵 hash+后缀数组
#6173. Samjia 和矩阵 题目链接 : 点这里 题目描述 给你一个只包含大写字母的矩阵,求有多少本质不同的子矩阵. 输入格式 第一行包含两个整数 nnn , mmm ,表示矩阵 nnn 行 ...
- webservice client setTimeOut
一:eclipse生成的client,基于axis client_sub.getOptions().setTimeOutInMilliSeconds(1000*60); client_sub表示一个客 ...
- delphi 中OutputDebugString 函数的妙用(使用DebugView或者Pascal Analyzer软件,在运行过程中就能监视和捕捉日志,而且通过网络就能监视)
原文地址 https://www.peganza.com/delphi-and-outputdebugstring.html 曾经想要实时监控您的Delphi应用程序,并能够查看日志消息吗?当然,您始 ...
- swt进度条 线程
import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import java.util.Rando ...
- UISegmentedControl方法与属性的总结
SegmentedControl又被称作分段控制器,是IOS开发中经常用到的一个UI控件. 初始化方法:传入的数组可以是字符串也可以是UIImage对象的图片数组 - (instancetype)in ...
- JVM Safepoint 安全点
一.什么是安全点: 在可达性分析算法中查找存活的对象,首先要找到哪些是GC Roots: 有两种查找GC Roots的方法: 一种是遍历方法区和栈区来查找(保守式GC): 一种是通过OopMap的数据 ...
- css3中我们不知道的一些属性
1.图片作为边框:border-image; 2.圆角问题:border-radius:上.下.左.右: 3.字体的阴影与自动换行: 阴影: h1 {text-shadow: 5px 5px 5px ...
- LR问题汇总
关于录制打开IE问题 1.LR11用IE11录制脚本时能打开web页面,但是一直是0事件,也没有脚本代码; 解决方法: LR版本和IE版本兼容性问题,这个问题是我们安装环境时不注意,导致LR无法录制. ...
- eclipse本地覆盖版本库
1,右键team,与资源库同步 2,选中冲突文件,右键“更新”,此时本地代码出现冲突 3,选中冲突文件,右键点击“标记为解决”,勾选第二项,以本地版本为准 4,冲突被解决,正常提交本地代码
- codeforces 672D D. Robin Hood(二分)
题目链接: D. Robin Hood time limit per test 1 second memory limit per test 256 megabytes input standard ...