python自动化:uiautomation、pyautogui操作会计记账系统(5):财务公开

#coding=utf-8
#Beijia To Excel accounting disclosure财务公开
import xlrd, xlwt, pyautogui, time, pyperclip, openpyxl,pandas,os, tkinter,\
    datetime, win32gui, uiautomation, subprocess, xlwings,json, easygui

pyautogui.PAUSE = 1
mont_list =['一月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '十一月', '十二月']
mont_input = 12
year_input = 2021

def creat_file(year_input):
    print('开始运行创建文件夹自定义函数……')
    with open('**电脑端账套号生成村委会文件夹用.txt', 'r') as f:
        dic = []
        for line in f.readlines():
            line = line.strip('\n')  # 去掉换行符\n
            b = line.split('\t')  # 将每一行以空格为分隔符转换成列表
            #print(list(b))
            dic.append(b)

        print(dic)
        admin_villi_dict=dict(dic)
        print('账套所在的村委会文件夹列表是:')
        print(admin_villi_dict)#列表转字典
    if not os.path.exists('D:\**会计系统导出数据'):
        os.mkdir('D:\**会计系统导出数据')

    admin_villi_list=['前锋', '西海', '八家', '冲洋', '新围', '竹洛', '竹湖', '新屋', '达材', '朝中', '官窦', '伞塘', '白岗', '稔坪', '西坑', '三和', '居委']

    year = time.strftime("%Y")
    #print("当前年份是:", year)
    if year_input==year:#等于
        time1 = time.strftime("%Y%m%d", time.localtime())  # 加上秒不会出现同名
    else:


        time1= year_input #赋值
    #print('创建第3层文件夹folder3_1')
    folder3_1 = r"D:\**会计系统导出数据" + '\\' + time1 + '财务公开系列表'
    #print('判断文件夹是否存在,不存在则创建,文件保存在:'+folder3_1)
    if not os.path.exists(folder3_1):
        os.mkdir(folder3_1)
    #print('创建第4层文件夹folder4_i')
    for i in range(0,16):
        folder_admin_villi=time1+admin_villi_list[i]+'财务公开系列表'
        folder4_i=r'D:\**会计系统导出数据'+'\\'+ time1 + '财务公开系列表'+'\\' +folder_admin_villi
        if not os.path.exists(folder4_i):
            os.mkdir(folder4_i)
            #print('创建文件夹:'+folder4_i)

    return  admin_villi_dict,folder3_1


def check_file(folder3_1):
    # 打开文件

    path= folder3_1
    dirs = os.listdir(path)
    year = time.strftime("%Y")



    file_accnt_num_list=[]
    for home, dirs, files in os.walk(path):
        for file_name in files:
            #filelist.append(os.path.join(home, file_name))
            if os.path.splitext(file_name)[1] == '.xls':
                #print(file_name)
                file_year = file_name[0:4]  # 截取文件名前4个字符
                #print(file_year)
                # os.rename(file, new)  # 进行重命名

                if file_year == year:
                    # 取整方法是可以去除0,但是遇到字符串不能转化为整型会报错
                    # file_accnt_num=int(file_name[9:12])
                    s = file_name[9:12]
                    file_accnt_num = "".join(s[::1]).lstrip("0")
                    #print(file_accnt_num)
                else:
                    s = file_name[5:8]
                    file_accnt_num = "".join(s[::1]).lstrip("0")
                    #print(file_accnt_num)
                file_accnt_num_list.append((file_accnt_num))

    #print(filelist)
    #print(file_accnt_num_list)
    #print('对列表进行排序,查找时可能减少遍历次数。也便于根据账套号顺序查找')
    #file_accnt_num_list2=file_accnt_num_list.sort()
    #print('sort影响列表本身,sorted不影响列表本身,用sort排序')
    file_exist_list = sorted(file_accnt_num_list)
    print('已导出的文件列表','file_exist_list:')
    print(file_exist_list)
    print('已导出的文件数量',len(file_exist_list))
    return file_exist_list

def accnt_login(account_Num):
    wc1 = uiautomation.WindowControl(searchDepth=1, Name='帐套登陆')

    # 设置为顶层
    #pyautogui.alert(text="按回车键继续程序", title="提示")  # 窗口前置才能用键盘快捷键
    wc1.SetTopmost(True)  # 置顶能用快捷键
    pc2_1= wc1.PaneControl(searchDepth=1, Name='帐套信息')
    ec3_8=pc2_1.EditControl(searchDepth=1, Name='', foundIndex=2)
    ec3_8.SetFocus()
    #print('ec3_8')
    #print('账套号输入框的位置是:')
    #print(ec3_8.BoundingRectangle)
    pyperclip.copy(account_Num) #account_Num是账套号
    pyautogui.hotkey('ctrl', 'v')  # 再粘贴
    pyautogui.press('enter')



def user_login():
    wc1=uiautomation.WindowControl(searchDepth=1, Name='用户注册')
    # 设置为顶层
    wc1.SetTopmost(True)  # 置顶能用快捷键
    pyautogui.press('down')  # 向下选择超级用户
    pyautogui.press('enter')  # 点击确定
    pyautogui.press('enter')  # 点击确定
    #print('超级用户登录成功')

def  select_year(screenWidth, screenHeight, year_input):
    #print('选择年份')
    #print('深度1')
    wc1 = uiautomation.WindowControl(searchDepth=1, Name='**经营管理系统V2007 - [财务公开]')
    # 设置为顶层
    #wc1.SetTopmost(True)
    #print(wc1.Name)

    #print('深度2') #isum自创字母后的数字表示深度
    #sbc2_1= wc1.StatusBarControl(searchDepth=1, ClassName= 'TStatusBar')
    pc2_2= wc1.PaneControl(searchDepth=1,ClassName='MDIClient')
    #print(pc2_2.Name)#工作区

    #print('深度3')
    wc3_1= pc2_2.WindowControl(searchDepth=1,Name='财务公开')
    #print(wc3_1.Name)  # 工作区

    #print('深度4')
    pc4_3= wc3_1.PaneControl(searchDepth=1, ClassName='TPanel',Name= '', foundIndex=3)
    #print(pc4_3.BoundingRectangle)
    #print(pc4_3)
    #print('深度5')
    pc5_2 = pc4_3.PaneControl(searchDepth=1, ClassName='TPanel',Name= '', foundIndex=2)
    #print(pc5_2)
    #print('深度6')
    rbc6_3= pc5_2.RadioButtonControl(searchDepth=1, Name='特定数据')
    #print('点击:'+rbc6_3.Name)
    rbc6_3.Click()



    cbc6_4 = pc5_2.ComboBoxControl(searchDepth=1, ClassName='TComboBox')
    cbc6_4.Click()
    #print(cbc6_4)
    mont_show = cbc6_4.GetValuePattern().Value  # month show会计系统4
    # 显示月份
    #print(mont_show)
    tc7_1 = cbc6_4.TextControl(searchDepth=1, Name='')
    #print(tc7_1)

    for c in range(len(mont_list)):
        if mont_show == mont_list[c]:  # 一月对应的i是0
            # print('c+1')

            # print(c+1)
            #print(mont_list[c])
            if mont_input > c + 1:
                for t in range(abs(mont_input - (c + 1))):
                    pyautogui.press('down')
            else:
                for t in range(abs(mont_input - (c + 1))):
                    pyautogui.press('up')

    year = time.strftime("%Y")
    #print("当前年份是:", year)
    if year_input!=year:
        #pyautogui.press('tab')
        #tc7_1.DoubleClick()
        #tc7_1.Click()
        ec6_5 = pc5_2.EditControl(searchDepth=1, ClassName = 'TEdit')
        ec6_5.SetFocus()
        ec6_5.DoubleClick()
        pyperclip.copy(year_input)
        pyautogui.hotkey('ctrl', 'v')
        # 选项出现较慢,需要等待
        #print('点击生成')
        # #pyautogui.click(screenWidth/8.3478, screenHeight /13.5)  # 系统中等字体显示,点击生成按钮(230,80)
        # pyautogui.click(screenWidth /10.6667, screenHeight / 16.6154)  # 系统小字体显示,点击生成按钮(180,65)
        time.sleep(1)



    #pc5_2 = pc4_3.PaneControl(searchDepth=1, ClassName='TPanel', foundIndex=2)
    #print('深度6')
    pc6_1b= pc5_2.PaneControl(searchDepth=1, Name='')
    #print(pc6_1b)
    rbc7_1b =pc6_1b.RadioButtonControl(searchDepth=1, Name='A4') #选择A4纸
    #print(rbc7_1b)
    rbc7_1b.Click()
    cbc6_4b = pc5_2.ComboBoxControl(searchDepth=1, ClassName = 'TComboBox')
    # tc7_1b = cbc6_4b.TextControl(searchDepth=1, Name='') #月份下拉框
    # # print(tc7_1b)
    # tc7_1b.SetFocus()
    # tc7_1b.Click()
    # for i in range(3):
    #     pyautogui.press('Down')




# #代替三方鼠标定位软件
# x1,y1,x2,y2=700,27,788,51 #另选账套位置
# x1,y1,x2,y2=316,184,1919,986 #序时簿显示的范围
# x1,y1,x2,y2=259,560,1607,700#空白的区域
# x1,y1,x2,y2=315,183,1920,1013
# # pyautogui.moveTo(x1,y1,duration=2)
# # pyautogui.moveTo(x2,y1,duration=2)
# # pyautogui.moveTo(x2,y2,duration=2)
# # pyautogui.moveTo(x1,y2,duration=2)
# # pyautogui.moveTo(x1,y1,duration=2)
#
#




def to_excel(screenWidth, screenHeight, year_input, accnt_Num_name, i,admin_villi_dict, tabl_type):


    wc1 = uiautomation.WindowControl(searchDepth=1, Name='**经营管理系统V2007 - [财务公开]')
    # time1 =time.strftime("%Y%m%d%H%M%S", time.localtime())#加上秒不会出现同名
    year = time.strftime("%Y")
    # print("当前年份是:", year)
    if year_input == year:  # 等于
        time1 = time.strftime("%Y%m%d", time.localtime())  # 加上秒不会出现同名
    else:
        time1 = year_input  # 赋值
    # file_path= r"D:\**会计系统导出数据"+'\\'+time1+'现金三栏明细账'+'\\'+file_name+'.xls'
    # 字典必须传入字符串,admin_villi_dict[str(i)]
    #fie_path_pare = r"D:\**会计系统导出数据" + '\\' + time1 + '财务公开系列表'

    file_path = r"D:\**会计系统导出数据" + '\\' + time1 + '财务公开系列表' + '\\' + time1 + admin_villi_dict[str(i)] + '财务公开系列表'
    if not os.path.exists(file_path):
        # print('如果没有预先归类到行政村文件夹,就放在上一级文件夹')
        file_path = r"D:\**会计系统导出数据" + '\\' + time1 + '财务公开系列表'



    # print('判断文件夹是否存在,不存在则创建,文件保存在:'+file_path)
    # if not os.path.exists(file_path):
    #     os.mkdir(file_path)
    file_name = time1 + " " + accnt_Num_name + tabl_type #table type表格类型
    #file_title = "序时簿(" + accnt_Num_name + ")"

    print('文件保存路径是:' + file_path)
    file_full_path = file_path + '\\' + file_name + '.xls'
    print("文件名是:", end="")
    print(file_name)
    if os.path.exists(file_full_path):  # 如果文件不存在(即未导出)
        print('{}--文件已经存在,不需导出。'.format(file_full_path))
    else:
        pyautogui.click(screenWidth / 8.5333, screenHeight /15.4286)  # 系统小等字体点击导出(225,70)
        time.sleep(0.5)
        pyautogui.keyDown('backspace')#长摁删除键
        time.sleep(0.5)
        pyautogui.keyUp('backspace')
        #pyautogui.typewrite(file_name) #不能写入中文
        pyperclip.copy(file_full_path)  # 写入文件名
        pyautogui.hotkey('ctrl', 'v')  # 再粘贴
        pyautogui.press('enter')  # 点击确定
        print('导出Excel表会自动打开,所以需要等待较长时间。')
        wc1.Minimize()  # 最小化缩小窗口
        time.sleep(20)#等待自动打开Excel,必须足够长时间,不然会出现文件名出现不了
        pyautogui.click(screenWidth / 3.2, screenHeight / 4.6957)  # 点击标题,使得WPS前置。(600,230),Excel的显示方式必须是全屏
        # pyautogui.typewrite(" ")
        # pyautogui.press('backspace')
        # #yautogui.press('insert')  #
        # #print('修改表格标题:'+file_title)
        # pyperclip.copy(file_title)  # 写入表格标题
        # pyautogui.hotkey('ctrl', 'v')  # 再粘贴
        # time.sleep(0.5)
        pyautogui.hotkey('alt', 'f4')  # 关闭Excel
        time.sleep(0.5)
        pyautogui.press('enter')  # 点击确定,保存更改
        time.sleep(1)
    wc1.Restore()  # 将窗口回复到最大化
    return  file_full_path
    #这里需要加一个,假如保存文件失败之后,**系统错误提示
    #标题是错误,内容是路径不存在或者文件不可写! 确定。
    #pyautogui.press('enter')


def excel_modifier(file_full_path):
    # 创建app,打开工作表
    app = xlwings.App(visible=False, add_book=False)
    app.screen_updating = False
    app.display_alerts = False
    load_wb = app.books.open(file_full_path)
    load_ws = load_wb.sheets.active
    print('\t已打开工作表……')
    # 处理列,将指定列从大到小删除(避免先删除小列导致后续列号变动)
    #错误方法:for cell in ['J1', 'M1', 'N1', 'O1', 'P1', 'Q1']:
    for cell in ['Q1', 'P1', 'O1', 'N1', 'M1', 'J1']:
        load_ws.range(str(cell)).api.EntireColumn.Delete()  # 删除 ’J1‘ 单元格所在的列。删除对应出纳单号、制单、审核、过帐、审核标志、过帐标志
        print('删除{}列'.format(cell))
        #load_ws.api.columns('M').delete

    # load_ws.range('P1').api.EntireColumn.Delete()
    # load_ws.range('J1').api.EntireColumn.Delete()
    # load_ws.range('M1').api.EntireColumn.Delete()
    # load_ws.range('N1').api.EntireColumn.Delete()
    # load_ws.range('O1').api.EntireColumn.Delete()
    # load_ws.range('P1').api.EntireColumn.Delete()
    # load_ws.range('Q1').api.EntireColumn.Delete()

    print('\t开始处理表格……需要等待一定时间')
    load_wb.save()
    load_wb.close()
    app.quit()
    print('处理完毕===>>>', file_full_path, '\n\n')


def chage_accnt():
    #print('深度1')
    wc1 = uiautomation.WindowControl(searchDepth=1, Name='**经营管理系统V2007 - [凭证查询]')
    # 设置为顶层
    #wc1.SetTopmost(True)
    #print(wc1.Name)

    #print('深度2') #isum自创字母后的数字表示深度
    #sbc2_1= wc1.StatusBarControl(searchDepth=1, ClassName= 'TStatusBar')
    pc2_2= wc1.PaneControl(searchDepth=1,ClassName='MDIClient')
    #print(pc2_2.Name)#工作区

    mbc2=wc1.MenuBarControl(searchDepth=1, Name= '应用程序')
    #print('mbc2')
    #print(mbc2.Name)

    mic3_9=mbc2.MenuItemControl(searchDepth=1, Name='', foundIndex=9)
    #print('mic3_9')
    #print(mic3_9.BoundingRectangle)#(700,27,788,51)[88x24]
    #print('点击另选账套')
    mic3_9.Click()

    #另选账套的坐标:Rect: (700,27,788,51)
    #这四个 参数 分别代表的意思是: left   top   right   bottom   是 左 上 右 下。


def open_fold():
    # #open folder,打开文件夹,用win+E快捷键
    pyautogui.hotkey('win', 'e')
    pyautogui.press('tab')
    #pyautogui.press('insert')
    pyautogui.press('enter')
    pyperclip.copy('D:\**会计系统导出数据')
    pyautogui.hotkey('ctrl', 'v')
    pyautogui.press('enter')



def func(year_input):
    #print('当前屏幕分辨率宽 X 高:')
    screenWidth, screenHeight = pyautogui.size()
    #print(screenWidth, screenHeight)  # 屏幕分辨率1920 1080,导出的按钮595,80
    msg = '浏览需要导出的村委会Excel表格文件并打开'
    title = '打开文件'
    filePath = easygui.fileopenbox(msg, title)
    #print(filePath)
    df = pandas.read_excel(filePath)

    #df=pandas.read_excel('**电脑端账套号pandas.xlsx')
    #df = pd.read_excel(src_file, header=1, usecols='B:F')
    #header参数为一个整数,从0开始索引,其为选择的行,比如1表示Excel中的第2行。
    #usecols参数设定选择的Excel列范围范围(A-…),例如,B:F表示读取B到F列。

    accnt_dict=dict(zip(df['账套号'],df['账套号加单位简称']))

    #print('获取字典的键,要转化为列表。第一个键是:',end='')

    account_Num= list(accnt_dict)[0]
    print(account_Num)





    year = time.strftime("%Y")
    #print("当前年份是:", year)
    #year_input = pyautogui.prompt('请输入账套查询的年份:')
    #print('弹窗输入年份:' + year_input)
    #print('不要把创建文件夹自定义函数放在循环内,先创建文件夹……')
    admin_villi_dict,folder3_1 = creat_file(year_input)
    #print('遍历3级文件夹下所有文件,检查表格上账套号对应的Excel表是否已导出')
    file_exist_list=check_file(folder3_1)

    #print('Excel文件上要导出的文件数量及文件列表是:','list_accnt_dict(要先将字典的键转化为字符串格式,两个列表的元素都是字符串才能做减法)')
    list_accnt_dict= [str(t) for t in list(accnt_dict)]
    #print(len(list_accnt_dict),list_accnt_dict)

    print('已导出的数量及文件列表', 'file_exist_list:')
    print(len(file_exist_list),file_exist_list)
    print('删除两个列表重复值,一个列表减去另一个列表,用set(集合)操作')
    accnt_list2=list(set(list_accnt_dict)-set(file_exist_list))
    print('sort影响列表本身,sorted不影响列表本身,用sort排序')
    accnt_list2 = sorted(accnt_list2)
    print('未导出的文件数量及文件列表是:')

    print(len(accnt_list2),accnt_list2)
    list_tabl_accn_disc =['资产负债表', '收益分配表', '财务收支情况公布表', '应收款', '应付款', '现金收支明细表', '银行收支明细表', '固定资产明细表', '在建工程明细表']
    list_tabl_accn_disc = ['资产负债表', '收益分配表', '应收款', '应付款', '固定资产明细表', '在建工程明细表']
    #list_tabl_accn_disc = ['在建工程明细表']

    file_numb = 0
    for i in accnt_list2:
        #print('i在之前转化为字符串,要重新转化为数值格式')
        i=int(i)
        #print('直接用遍历字典的键值循环,i就是账套号')
        accnt_Num_name=accnt_dict[i]
        print('账套号是:' + str(i)+',账套' '名称是:'+accnt_Num_name)
        time.sleep(1)



        #账套号登录自定义函数
        accnt_login(i)
        time.sleep(1)
        #用户登录自定义函数
        user_login()

        time.sleep(1)

        # 选项出现较慢,需要等待
        #print('点击财务公开')
        pyautogui.click(screenWidth / 2.8235, screenHeight / 1.08)  # 系统小字体显示,点击财务公开(680, 100)
        time.sleep(1)

        select_year(screenWidth, screenHeight,year_input)
        #print('等待2秒,数据生成需要时间')
        time.sleep(3)
        #print('导出Excel表涉及到创建文件夹,创建文件,需要输入屏幕长宽、年份、账套号、账套名称、账套所在村委会字典')
        # 导出财务公开系列表
        wc1 = uiautomation.WindowControl(searchDepth=1, Name='**经营管理系统V2007 - [财务公开]')
        # 设置为顶层
        # wc1.SetTopmost(True)
        # print(wc1.Name)

        # sbc2_1= wc1.StatusBarControl(searchDepth=1, ClassName= 'TStatusBar')
        pc2_2 = wc1.PaneControl(searchDepth=1, ClassName='MDIClient')
        # print(pc2_2.Name)#工作区
        wc3_1 = pc2_2.WindowControl(searchDepth=1, Name='财务公开')
        # print(wc3_1.Name)  # 工作区
        pc4_3 = wc3_1.PaneControl(searchDepth=1, ClassName='TPanel', Name='', foundIndex=3)
        # print(pc4_3.BoundingRectangle)
        print(pc4_3)
        # print('深度5')

        pc5_1 = pc4_3.PaneControl(searchDepth=1, ClassName='TPanel', Name='')
        # print(pc5_1)
        lc6_3c = pc5_1.ListControl(searchDepth=1, ClassName='TListView')
        # print(lc6_3c)
        # lc7_3 = lc6_3c.ListItemControl(searchDepth=1, Name ='收益分配表')
        # print(lc7_3)
        # lc7_3.Click()
        #先点击一个类型表(如资产负债表)再点击生成按钮才不会报错。才能生成系列表格。
        time.sleep(1)
        tabl_type = '资产负债表'
        lc7_tabl_type = lc6_3c.ListItemControl(searchDepth=1, Name=tabl_type)
        lc7_tabl_type.Click()
        time.sleep(2)

        pyautogui.click(screenWidth / 27.4286, screenHeight / 15.4286)  # 点击生成按钮(70, 70)




        # pc2_5c = wc1_c.PaneControl(searchDepth=1, ClassName='TPanel', foundIndex=2)
        # #print(pc2_5c)
        # ec3_2c = pc2_5c.EditControl(searchDepth=1, ClassName='TSpinEdit')#年份
        # #print(ec3_2c)
        # #ec3_2c.Click()
        # cbc3_1c = pc2_5c.ComboBoxControl(searchDepth=1, ClassName='TComboBox')#月份父级
        # #cbc3_1c.SetFocus()
        # tc4_1_c = cbc3_1c.TextControl(searchDepth=1, ClassName='') #月份
        # #tc4_1_c.SetFocus()
        #
        #
        # #不是区间段?
        # ec3_4c = pc2_5c.EditControl(searchDepth=1, ClassName='TSpinEdit',foundIndex=2),#年份
        # print(ec3_4c)
        # ec3_2c.Click()
        # cbc3_5c = pc2_5c.ComboBoxControl(searchDepth=1, ClassName='TComboBox', foundIndex=2)#月份父级
        # cbc3_5c.SetFocus()
        # tc4_1_c2 = cbc3_1c.TextControl(searchDepth=1, ClassName='') #月份
        # tc4_1_c2.SetFocus()
        # tc4_1_c2.Click()


        # pyautogui.press('Tab')
        # pyautogui.press('Tab')
        # pyautogui.press('Tab')
        time.sleep(1)

        # pyperclip.copy(mont_input)
        # pyautogui.hotkey('ctrl', 'v')  # 再粘贴月份
        # pyautogui.press('Tab')

        wc1_c = uiautomation.WindowControl(searchDepth=1, Name='报表生成')
        #print(wc1_c.BoundingRectangle)
        pc2_5c = wc1_c.PaneControl(searchDepth=1, ClassName = 'TPanel', foundIndex=2)
        print(pc2_5c)
        cbc3_5c = pc2_5c.ComboBoxControl(searchDepth=1, ClassName = 'TComboBox', foundIndex=2)
        cbc3_5c.Click()
        print(cbc3_5c)
        mont_show = int(cbc3_5c.GetValuePattern().Value)  # month show会计系统4
        # 显示月份
        # print(mont_show)

        if mont_show < mont_input:  # 一月对应的i是0
            for t in range(abs(mont_show - mont_input)):
                pyautogui.press('down')
        elif mont_show > mont_input:
            for t in range(abs(mont_show - mont_input)):
                pyautogui.press('up')
        else:
            pass
        pyautogui.press('enter')
        time.sleep(1)
        pyautogui.press('tab')
        pyperclip.copy(year_input)
        pyautogui.hotkey('ctrl', 'v')  # 再粘贴年份
        #pyautogui.press('Down')
        # 点击生成按钮
        pyautogui.click(screenWidth / 1.9592, screenHeight / 1.7143)  # (980,630)
        time.sleep(2)
        pyautogui.hotkey('Y') #弹出对话框:报表已经建立,是否重新建立报表?是(),否(N)
        #ControlType: TextControl    ClassName: Static    AutomationId: 65535    Rect: (880,518,1074,537)[194x19]    Name: '不能建立当前财务月度以后的报表!' 的上一级是wc2_1c
        time.sleep(9)
        if wc1_c.WindowControl(searchDepth=1, Name = '**软件').Exists():  #wc2_1c
            pyautogui.press('enter')
            time.sleep(1)




            # 点击取消按钮按钮
            pyautogui.click(screenWidth / 1.8113, screenHeight / 1.7143)  # (1060,630)
            time.sleep(1)
        else:

            for t in range(len(list_tabl_accn_disc)): #第一级循环用i,第二季循环用t
                time.sleep(1)
                tabl_type = list_tabl_accn_disc[t]
                if tabl_type == '在建工程明细表': #在建工程必须向下翻页,显示出来才能定位。
                    sbc7_1c =lc6_3c.ScrollBarControl(searchDepth=1, Name = '垂直滚动条')
                    bc8_3_c = sbc7_1c.ButtonControl(searchDepth=1, Name='向下翻页')
                    bc8_3_c.Click()
                    bc8_3_c.Click()
                    bc8_4_c = sbc7_1c.ButtonControl(searchDepth=1, Name='下一行')
                    bc8_4_c.Click()
                    bc8_4_c.Click()
                    time.sleep(1)
                lc7_tabl_type = lc6_3c.ListItemControl(searchDepth=1, Name=tabl_type)
                lc7_tabl_type.Click()
                time.sleep(1)
                file_full_path= to_excel(screenWidth, screenHeight, year_input, accnt_Num_name, i,admin_villi_dict, tabl_type=tabl_type)
                time.sleep(2)






        #pyautogui.click(722,37)  #另选账套
        #account_Num+=1
        #print('系统小字体显示点击另选账套坐标135,36')
        pyautogui.click(screenWidth/3.2,screenHeight/30)  #另选账套
        time.sleep(3)#另选账套必须足够长时间,因为窗口切换幅度大
        file_numb+=1
        print('导出第{}个文件'.format(file_numb))
    #pyautogui.alert(text=r"文件保存在D:\**会计系统导出数据", title="提示")  #
if __name__ == "__main__":
    #creat_file('2019')
    print('桌面不能打开其他程序,程序在左下角运行。程序运行时不能操作鼠标和键盘,不能打开word和WPS。文件保存在D:\**会计系统导出数据.')
    #pyautogui.alert(text="桌面不能打开其他程序,程序在左下角运行。程序运行时不能操作鼠标和键盘。文件保存在D:\**会计系统导出数据",title="提示")
    time.sleep(1)

    #time.sleep(20)
    # 打开程序
    proc_list = ['D:\**经营管理系统2007版\BJACCOUNT.EXE', 'E:\**经营管理系统2007版\BJACCOUNT.EXE', 'C:\**经营管理系统2007版\BJACCOUNT.EXE',
                 'F:\**经营管理系统2007版\BJACCOUNT.EXE', 'G:\**经营管理系统2007版\BJACCOUNT.EXE','H:\**经营管理系统2007版\BJACCOUNT.EXE',
                 'I:\**经营管理系统2007版\BJACCOUNT.EXE', 'J:\**经营管理系统2007版\BJACCOUNT.EXE', 'K:\**经营管理系统2007版\BJACCOUNT.EXE',
                 'D:\Program Files\**经营管理系统2007版\BJACCOUNT.EXE', 'E:\Program Files\**经营管理系统2007版\BJACCOUNT.EXE',
                 'C:\Program Files\**经营管理系统2007版\BJACCOUNT.EXE', 'F:\Program Files\**经营管理系统2007版\BJACCOUNT.EXE',
                 'G:\Program Files\**经营管理系统2007版\BJACCOUNT.EXE', 'H:\Program Files\**经营管理系统2007版\BJACCOUNT.EXE',
                 'I:\Program Files\**经营管理系统2007版\BJACCOUNT.EXE', 'J:\Program Files\**经营管理系统2007版\BJACCOUNT.EXE',
                 'K:\Program Files\**经营管理系统2007版\BJACCOUNT.EXE',
                 'D:\Program Files (x86)\**经营管理系统2007版\BJACCOUNT.EXE', 'E:\Program Files (x86)\**经营管理系统2007版\BJACCOUNT.EXE',
                 'C:\Program Files (x86)\**经营管理系统2007版\BJACCOUNT.EXE', 'F:\Program Files (x86)\**经营管理系统2007版\BJACCOUNT.EXE',
                 'G:\Program Files (x86)\**经营管理系统2007版\BJACCOUNT.EXE', 'H:\Program Files (x86)\**经营管理系统2007版\BJACCOUNT.EXE',
                 'I:\Program Files (x86)\**经营管理系统2007版\BJACCOUNT.EXE', 'J:\Program Files (x86)\**经营管理系统2007版\BJACCOUNT.EXE',
                 'K:\Program Files (x86)\**经营管理系统2007版\BJACCOUNT.EXE',
                 ]
    for i in range(len(proc_list)):
        try:
            subprocess.Popen(proc_list[i])
            #print('程序在:{}'.format(proc_list[i]))
            break
        except:
            #print('程序不在:{}'.format(proc_list[i]))
            pass

    time.sleep(3)
    wc = uiautomation.WindowControl(searchDepth=1, Name='帐套登陆')
    # 设置为顶层
    # pyautogui.alert(text="按回车键继续程序", title="提示")  # 窗口前置才能用键盘快捷键
    #print('窗口前置才能用键盘快捷键')
    wc.SetTopmost(True)  # 置顶能用快捷键
    # accnt_Num_txt = wc.EditControl()
    # print('accnt_Num_txt',accnt_Num_txt)
    for year_input in range(2021, 2020, -1):
        year_input=str(year_input)
        print(year_input)
        func(year_input)

    open_fold()











# '''首先,找到xlwings安装目录下的文件:你的python安装位置\Python39\Lib\site-packages\xlwings\_xlwindows.py,
#  然后,找到代码313行 self._xl=COMRetryObjectWrapper(DispatchEx('Excel.Application'))
#  默认使用的是win32com模块下面的DispatchEx方法,此方法会启动一个新进程,把DispatchEx修改为Dispatch就可以啦
#   self._xl = COMRetryObjectWrapper(Dispatch('Excel.Application'))
# 如果你用的是WPS,修改代码为: self._xl = COMRetryObjectWrapper(Dispatch('ket.Application'))
# '''
#
# def del_datas(file_full_path):
#     print('delete column datas from Excel')
#     df = pandas.read_excel(file_full_path,header=1)
#     print(df)
#     df1 = df.drop(['制单','审核','过帐'],axis=1) #删除列
#     print(df1)
#     # 其实问题理解axis有问题,也许简单的来记就是axis=0代表往跨行(down),而axis=1代表跨列(across),作为方法动作的副词。换句话说:
#     # 使用0值表示沿着每一列或行标签\索引值向下执行方法;使用1值表示沿着每一行或者列标签模向执行对应的方法。
#     # 轴axis用来为超过一维的数组定义的属性,二维数据拥有两个轴:第0轴沿着行的垂直往下,第1轴沿着列的方向水平延伸。
#     # 所以问题当中df.drop(‘列名’, axis=1)代表将‘列名’对应的列标签(们)沿着水平的方向依次删掉。
#     # header = None准们针对没有表头的表,这也是默认值;
#     # header = 1指定第一行作为表头;
#     for i in accnt_dict.keys():
#         print(i)
#     #nrows = df.shape[0]  # 行数