python进行EXCEL表格自动填充

这几天看了看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,咋导出啊。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值