python 之xlwings的常用操作(隱藏,檢查隱藏,自動調整,邊框,設置批注,對齊方式,合並單元格)


import xlwings

def main1():
    #打開Excel程序並新建一個工作簿
    app = xlwings.App(visible=True,add_book=False)  #啟動Excel程序窗口但是不新建工作簿。visible設置窗口可見性,add_book設置啟動Excel程序窗口后是否新建工作簿
    workbook = app.books.add()                      #新建工作簿

def main2():
    #創建並保存一個空白的Excel文件
    app = xlwings.App(True,False)                                   #打開Excel程序窗口
    workBook = app.books.add()                                      #新建工作簿
    workBook.save(r'C:\Users\Administrator\Desktop\temp\2.xlsx')    #保存到該路徑,文件名為2.xlsx
    workBook.close()                                                #關閉工作簿
    app.quit()                                                      #關閉Excel程序

def main3():
    #打開存在的Excel文件
    app = xlwings.App(visible= True,add_book= False)
    workBook = app.books.open(r'C:\Users\Administrator\Desktop\temp\2.xlsx')

def main4():
    #給單元格賦值
    app = xlwings.App(visible= True,add_book= False)
    workBook = app.books.open(r'C:\Users\Administrator\Desktop\temp\2.xlsx')
    workSheet = workBook.sheets['sheet1']       #選擇工作表名為sheet1的工作表
    workSheet.range('A1').value = 'A1'          #設置sheet1工作表的A1單元格的值為‘A1’
    #input("將關閉")                             
    workBook.close()                            #不保存、關閉工作簿
    app.quit()                                  #關閉Excel程序

def main5():
    app = xlwings.App(visible=True,add_book=False)
    workBook = app.books.add()
    workSheet = workBook.sheets.add("123")      #新增一個工作簿“123”

def main6():
    #簡單實現vlookup函數的效果
    #我不大會用vlookup
    appTestInstruction = xlwings.App(False,add_book = False)
    workBookTestInstruction = appTestInstruction.books.open(r'D:\OneDrive - Platinum\05工作目錄\03xxxxx\xxx\009xxx\v1.3\xxxx.xlsx')
    workSheetTestInstruction = workBookTestInstruction.sheets['V1.3xxx結果']
    appInstructionUsage = xlwings.App(False,add_book = False)
    workBookInstructionUsage = appInstructionUsage.books.open(r'D:\OneDrive - Platinum\05工作目錄\03xxxxx\xxx\009xxxx\v1.3\xxxxxxx(v1.3).xlsx')
    workSheetInstructionUsage = workBookInstructionUsage.sheets['xxxxx統計(4月份)']
    index = 1
    InstructionUsage_dict = {}      #用於存儲xxx使用量的字典:{command:使用量}
    while True:
        #print("進來{}:".format(index),end='')
        index += 1
        cell_A_Name = 'A{}'.format(index)
        if workSheetInstructionUsage.range(cell_A_Name).value != None:
            cell_B_Name = 'B{}'.format(index)
            InstructionUsage_dict[workSheetInstructionUsage.range(cell_A_Name).value] = workSheetInstructionUsage.range(cell_B_Name).value
            #print(workSheetInstructionUsage.range(cell_A_Name).value)
        else:
            break
    print("指令使用量字典的長度:{}".format(len(InstructionUsage_dict)))
    #寫入對應的值
    index = 1
    while True:
        index += 1
        #print("進來{}:\t".format(index),end='')
        cell_A_Name = 'A{}'.format(index)
        if workSheetTestInstruction.range(cell_A_Name).value != None:
            #print(workSheetTestInstruction.range(cell_A_Name).value)
            cell_K_Name = 'K{}'.format(index)
            for key,value in InstructionUsage_dict.items():
                #print(type(key))
                if key == workSheetTestInstruction.range(cell_A_Name).value:
                    print('{} = {}'.format(workSheetTestInstruction.range(cell_A_Name).value,value))
                    workSheetTestInstruction.range(cell_K_Name).value = value
                    break
        else:
            break
    workBookTestInstruction.save()
    workBookTestInstruction.close()
    appTestInstruction.quit()
    workBookInstructionUsage.save()
    workBookInstructionUsage.close()
    appInstructionUsage.quit()

def main7():
    #假設上一行中的A列、B列和下一行中的A列、B列值相同,就刪除下一行
    #假設上一行中的A列、B列和下一行中的A列、B列值不相同,就將下一行的A列和B列的值設為比較基准
    #初始基准值為A2、B2值
    #本節重點:刪除一行
    excel = xlwings.App(visible=False,add_book=False)
    workBook = excel.books.open(r'D:\OneDrive - Platinum\05工作目錄\03xxxx\xxx\016temp\剔除重復服務.xlsx')
    workBookSheet_1 = workBook.sheets['Sheet1']
    A_value = workBookSheet_1.range('A2').value   #初始基准值1
    B_value = workBookSheet_1.range('B2').value   #初始基准值2
    print("基准值:A_value:{}\tB_value:{}".format(A_value,B_value))
    index = 2
    isAdd = True                                  #是否指導index增加
    while True:
        if isAdd:
            index += 1
        A_tempValue = workBookSheet_1.range('A{}'.format(index)).value
        B_tempValue = workBookSheet_1.range('B{}'.format(index)).value
        if A_tempValue != None and B_tempValue != None: 
            if A_value == A_tempValue and B_value == B_tempValue:
                #刪除下一行,禁止index增加
                workBookSheet_1.range('A{}'.format(index)).api.EntireRow.Delete()
                isAdd = False
            else:
                #將當前值設置為基准值,指導index增加
                A_value = A_tempValue
                B_value = B_tempValue
                isAdd =True
                print("基准值:A_value:{}\tB_value:{}".format(A_value,B_value))

        else:
            break
    workBook.save()
    workBook.close()
    excel.quit()

def main8():
    #若第一個工作表的A列值與第二個工作表的A列值相等,就將第一個工作表的當前行寫入到第三個工作表中
    #本節重點:復制
    excel = xlwings.App(visible=False,add_book=False)
    workBook = excel.books.open(r'D:\OneDrive - Platinum\05工作目錄\03xxxxx\xxxx\016temp\剔除重復服務.xlsx')
    workBookSheet_1 = workBook.sheets['全量去重']
    workBookSheet_2 = workBook.sheets['V1.3xx']
    workBookSheet_3 = workBook.sheets['V1.3對應的服務']

    index_1 = 1                 #控制第一個工作表的下標
    index_2 = 1                 #控制第二個工作表的下標
    index_3 = 1                 #控制第三個工作表的下標
    workBookSheet_2_valueList = []  #存儲V1.3的command碼
    while True:
        index_2 += 1
        workBookSheet_2_AValue = workBookSheet_2.range('A{}'.format(index_2)).value
        if workBookSheet_2_AValue != None:
            workBookSheet_2_valueList.append(workBookSheet_2_AValue)
        else:
            break

    while True:     #以第一個工作表作為基礎遍歷
        index_1 += 1
        workBookSheet_1_AValue = workBookSheet_1.range('A{}'.format(index_1)).value
        if workBookSheet_1_AValue != None:  
            for workBookSheet_2_AValue in workBookSheet_2_valueList:
                if workBookSheet_1_AValue == workBookSheet_2_AValue:
                    #寫入到第三個工作表中
                    workBookSheet_3.range('A{}:c{}'.format(index_3,index_3)).value = workBookSheet_1.range('A{}:c{}'.format(index_1,index_1)).value
                    index_3 += 1
                    break
            print("workBookSheet_1_AValue:{}".format(workBookSheet_1_AValue))
        else:
            break
    workBook.save()
    workBook.close()
    excel.quit()

main()

 

上面的都搜索的到

1、隱藏某列

    workSheet_shijuan.api.Columns( "C:C").EntireColumn.Hidden  =  True      #隱藏C列
    workSheet_shijuan.api.Columns( "E:E").EntireColumn.Hidden  =  True      #隱藏E列

如果xlwings找不到操作,請直接搜索使用VBA如何如何,然后通過api調用對應的函數。

關於autofit自動調整,若是之前指定了某個單元格的具體高和寬,隨后又使用autofit來自動調整該單元格所在的行或者列的時候,會發現不起作用或者起到反作用,是因為這兩種方式以手動指定的高寬為高優先級。

    workSheet_shijuan.range("B:B").autofit()                            #自動調整B列的高,但是之前不能設置B列的高為固定數值

 2、判斷單元格是否隱藏

if examinationPaper_Sheet.range("A{}".format(index)).height != 0:   #隱藏的單元格的高度或者寬度為0,我這里根據我自己的需要只判斷高度為0

 2021年11月9日更新,有部分可能會重復,大家看的時候ctrl+f搜索一下有沒有需要的。

#設置邊框線,主要是調用vba去實現的。
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.Borders(7).LineStyle = 1  #左線
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.Borders(7).Weight = 1
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.Borders(8).LineStyle = 1  #頂線
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.Borders(8).Weight = 1
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.Borders(9).LineStyle = 1  #底線
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.Borders(9).Weight = 1
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.Borders(10).LineStyle = 1  #右線
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.Borders(10).Weight = 1
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.Borders(11).LineStyle = 1 #內垂直線
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.Borders(11).Weight = 1
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.Borders(12).LineStyle = 1 #內水平線
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.Borders(12).Weight = 1
#自動調整列寬,resultOutExcel_BookSheet_0:工作表
 resultOutExcel_BookSheet_0.autofit(axis="columns") #自動調整列寬
#設置批注
resultOutExcel_BookSheet_0.range('AY4').api.AddComment(Text='篩選時請勿直接點選,而應該輸入需要查詢的模板ID。')
#內容居中對齊
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.HorizontalAlignment = -4108  #-4108 水平居中。 -4131 靠左,-4152 靠右。
resultOutExcel_BookSheet_0.range("A3:AZ{}".format(4+len(EPC_APN_ContentALL))).api.VerticalAlignment  = -4108   # -4108 垂直居中(默認)。 -4160 靠上,-4107 靠下, -4130 自動換行對齊。
#內容左對齊
resultOutExcel_BookSheet_0.range("A1:E1").api.HorizontalAlignment = -4131
resultOutExcel_BookSheet_0.range("U4").api.HorizontalAlignment = -4131
#合並單元格
resultOutExcel_BookSheet_0.range("A3:C3").api.Merge()   #合並單元格,SHOW EPCAPNNAME

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM