这几天看了看VBA,他们的操作速度慢的原因似乎是:通过操作鼠标进行选中和修改。
有点像UIBOT、selenium等程序。
然后从网上找的教程,手撕了一个python脚本。
需要加入的部分:当有同名文件的时候,需要删除源文件或者直接说:文件存在。
懒得写。
第二,默认路径是F:\k1,理论上可以写一个LOG.txt储存全局变量。下次读取的时候读取LOG文件。
懒得写。
第三,CSV在数据中有‘,’的时候会报错。会将文本直接拆分为两行
cells(1,1)=‘’张工,李工’
结果会:cells(1,1)=‘张工’,cells(1,2)=‘李工’
加入转义符即可。
已修复。代码没改。
第四,循环只有走完才执行,没有分步
懒得改。(真的会有人拿我的程序跑几个G的文件吧,不会吧不会吧)
解决:修改文件流,直接刷出。
没写。
第五,当读取文件出现bug的时候(比如说文件开启状态下),程序会死。
解决方案:手写try……except……函数。
懒得写。
反正有这些bug。
我就是不改。
from tkinter import *
from excel_fun import *
from tkinter import filedialog
from xlwt import *
root="F:\\k1\\"
def change_list():
global root
root=filedialog.askdirectory()
root=root.replace('/','\\')+'\\'
e1.delete('0.0','end')
e1.insert('0.0','路径改变为'+root)
#!/usr/bin/python
# -*- coding:utf8 -*-
def xls_csv():
excel_list=get_xls(root)
e1.delete(0.0,'end')
for i in range(0,len(excel_list)):
excel=excel_list[i]
data=xlrd.open_workbook(excel)
for j in range(0,len(data.sheets())):
table = data.sheet_by_index(j)
file=excel.replace('.xls','')+'-'+data.sheet_names()[j]+'.csv'
e1.insert('end',file+"正在生成"+'\n')
l1=open(file,mode='w+')
for k in range(0,table.nrows):
for s in range(0,len(table.row_values(k))):
l1.write(str(table.row_values(k)[s]))
if s!=(len(table.row_values(k))-1):
l1.write(',')
l1.write('\n')
l1.close()
e1.insert('end','已经生成,路径为' +root)
return 1
def xls_csv_fill():
excel_list=get_xls(root)
e1.delete(0.0,'end')
for i in range(0,len(excel_list)):
excel=excel_list[i]
data=xlrd.open_workbook(excel)
for j in range(0,len(data.sheets())):
table = data.sheet_by_index(j)
file=excel.replace('.xls','')+'-'+data.sheet_names()[j]+'.csv'
e1.insert('end',file+"正在生成"+'\n')
l1=open(file,mode='w+')
history_rows=[]
for k in range(0,table.nrows):
history_rows.append('')
for k in range(0,table.nrows):
for s in range(0,len(table.row_values(k))):
data_=str(table.row_values(k)[s])
if data_=='':
data_=history_rows[s]
l1.write(data_)
if s!=(len(table.row_values(k))-1):
l1.write(',')
history_rows[s]=data_
l1.write('\n')
l1.close()
e1.insert('end','已经生成,路径为' +root)
return 1
def xls_fill_xls():
excel_list=get_xls(root)
e1.delete(0.0,'end')
for i in range(0,len(excel_list)):
excel=excel_list[i]
data=xlrd.open_workbook(excel)
for j in range(0,len(data.sheets())):
table = data.sheet_by_index(j)
file=excel.replace('.xls','')+'-'+data.sheet_names()[j]+'.xls'
book=Workbook(encoding='gbk')
sheet=book.add_sheet(data.sheet_names()[j])
e1.insert('end',file+"正在生成"+'\n')
#l1=open(file,mode='w+')
history_rows=[]
for k in range(0,table.nrows):
history_rows.append('')
#k,s代表行、列
for k in range(0,table.nrows):
for s in range(0,len(table.row_values(k))):
data_=table.row_values(k)[s]
#l1.write(data_)
if data_=="":
data_=history_rows[s]
sheet.write(k,s,label=data_)
history_rows[s]=data_
book.save(file)
#l1.write('\n')
#l1.close()
e1.insert('end','已经生成,路径为' +root)
return 1
def show_list():
l1=get_sheet(root)
e1.delete(0.0,'end')
e1.insert(0.0,l1)
win=Tk()
Label(win, text="First").grid(row=0, column=0,sticky=W)
def ins():
print('i')
e1 = Text(win)
e1.grid(row=1, column=1,rowspan=10,stick=W)
Button(win,text="更换路径",command=change_list).grid(row=0,column=2,sticky=W+E)
Button(win,text="显示待处理EXCEL",command=show_list).grid(row=1,column=2,sticky=W+E)
Button(win,text="批量生成csv",command=xls_csv).grid(row=2,column=2,sticky=W+E)
Button(win,text="批量补全csv",command=xls_csv_fill).grid(row=3,column=2,sticky=W+E)
Button(win,text="批量补全excel",command=xls_fill_xls).grid(row=4,column=2,sticky=W+E)
win.mainloop()
import os
import xlrd
root="F:\\k1\\"
list_dir="F:\\Get\\"
#get_xls格式为 ['F:\\k1\\山东亿信通网络科技有限公司(三期)1.xls', 'F:\\k1\\新建 XLS 工作表.xls', 'F:\\k1\\新建 XLSX 工作表.xlsx']
def get_xls(root):
file=os.listdir(root)
file_=[]
for i in range(0,len(file)):
#print(file[i])
if file[i].find('.xls')!=-1:
file_.append(root+file[i])
file=file_
#print(file)
return file
def get_sheet(root):
excel_list=get_xls(root)
print(excel_list)
table_list=[]
table_list_=''
try:
for i in range(0,len(excel_list)):
excel=excel_list[i]
#print(excel)
table_list.append(excel+'\n')
data=xlrd.open_workbook(excel)
#print(data.sheet_names())
for j in range(0,len(data.sheet_names())):
table_list.append(data.sheet_names()[j]+'\n')
print(table_list)
#拼接字符串显示用
for i in range(0,len(table_list)):
table_list_=table_list_+table_list[i]
table_list_=table_list_+'/n获取excel文件结束'
except:
table_list_="无法获取数据,出现问题"
#print(table_list_)
return table_list_
# print (get_xls(root))
#excellist是路径列表,excel是单个表格的路径,data是excel的句柄,table是table的句柄
#sheet_names()[i]当前表名字
def fun():
excel_list=get_xls(root)
for i in range(0,len(excel_list)):
excel=excel_list[i]
data=xlrd.open_workbook(excel)
for j in range(0,len(data.sheets())):
table = data.sheet_by_index(j)
print(excel+' '+data.sheet_names()[j]+'\n')
for k in range(0,table.nrows):
print(table.row(k))
return 1
'''excel=excel_list[0]
data=xlrd.open_workbook(excel)
table=data.sheet_by_index(0)
print(table.row(0))'''
pandas就几十行,但是XXXpandas300M,咋导出啊。