python初学各个模块汇集的小程序以及出现问题后的debug
先上程序运行效果图:
![这里写图片描述](https://i-blog.csdnimg.cn/blog_migrate/984dd9043dee1794b239da6690a51654.jpeg)
代码涉及读取excel文件内容,写入word文档,路径、文件等相关切换、删除等,布局,label,entry,button,listbox,Scrollbar等。后面代码会一一讲解。
代码部分:
1.文档说明:
2.首先引入各类模块:
import xlrd
import os
import time
import datetime
import tkinter as tk
from tkinter import *
from docx import Document
from docx.shared import Inches, Pt
from docx.oxml.ns import qn
from docx.enum.text import WD_ALIGN_PARAGRAPH
3.求描述:
4.定义获取日期的函数,使用时只需将参数n传入,代表距离当前日期多久前的日期是多少号,此函数的主要目的是为了解决日期与文件名匹配。因为我需要处理的excel文件名格式为‘app1_20180723.6.mon.xls’,然后将这个文件的内容,贴到word文档中,所以需要将文件名与文件内容匹配,写入字典中,才方便贴到word文档中:
def getXterday(n):
today = datetime.date.today()
nday = datetime.timedelta(days=n)
Xterday = today-nday
return Xterday
5.此函数作用是将execl中的某个sheet中的一列的最大值取出,入参为获取的excel文件的标识,sheet名称,n为第几列:
def maxInList(fname,bk,sheetname,n):
try:
sh_used = bk.sheet_by_name(sheetname)
except:
print("no sheet in {%s} named {}".format(fname,sheetname))
usedrows = sh_used.nrows
usedcols = sh_used.ncols
used_list = []
for i in range(1,usedrows-2):
value = sh_used.cell_value(i,n)
used_list.append(value)
max_used1 = max(used_list)
return float('%0.1f'%max_used1)
6.此函数主要是为了获取某一行某一列的值。入参也是excel文件标识,sheet名称,n第几列,其中flag主要是解决需要返回多个列的问题。:
def acquireFromList(fname,bk,sheetname,n,flag):
try:
sh_netsend = bk.sheet_by_name(sheetname)
except:
print("no sheet in {%s} named {}".format(fname,sheetname))
netsendrows = sh_netsend.nrows
netsendcols = sh_netsend.ncols
max_net1 = sh_netsend.cell_value(netsendrows-n,1)
if flag == 1:
return float('%0.1f'%max_net1)
else:
max_net2 = sh_netsend.cell_value(netsendrows-n,flag)
return float('%0.1f'%max_net1),float('%0.1f'%max_net2)
7.主要的函数来了,从excel中读取数据。可先看ls相关的额代码,这段代码主要是为了在界面上刷新代码日志。其中,ls是listbox的对象,ls.insert是为了在listbox中插入日志,ls.yview_moveto(1)是为了将listbox关联的下拉按钮送到listbox展示内容的最下一行,frame3是代码执行窗口的第三个框架,update()刷新,实时展示日志进度。:
<