添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接
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") #自动调整列宽
指定列宽
sheet.range("A:Q").column_width=18
sheet.range("A:Q").row_height=18
#设置批注
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

2023年3月24日

连续写一段单元格

#连续写(赋值)一段单元格,批量写数据
result_sheet.range("A{}:E{}".format(i,i)).value = source_sheet.range('A{}:E{}'.format(num,num)).value
c=[[1,2,3],[4,5,6],[7,8,9]]
sheet.range('A1').value=c  #从A1开始写如三行三列

2023年7月31日

重命名sheet名称:

sheet.name='新名称'

指定单元格格式

#'@'就表示文本格式,这个可以用录制宏的方式查看
sheet.range("K:K").api.NumberFormatLocal="@"

调整sheet的顺序

sheet.api.Move(Before=sheet2.api)   #移动到sheet2前面
#sheet.api.Move(None,After=sheet2.api)   #移动到sheet2后面

新建sheet页

sheet=workBook.sheets.add("sheet名")
删除sheet
workBook.sheets[sheet名称].delete()
sheet.range('B1').api.Font.Bold = True
wb = xlwings.books.active    #获取当前激活的sheet
active_window = wb.app.api.ActiveWindow    
active_window.SplitColumn = 0  # 冻结至哪一列
active_window.SplitRow = 1  # 冻结至哪一行
active_window.FreezePanes = True    #开启冻结

设置单元格规则(条件格式):

#还是那句话,录制宏后改造下
sheet.range("A:B").api.FormatConditions.Add(Type=1,    #单元格值
                               Operator=3, #相等
                            Formula1="={}".format(变量))    #等于某个预设的变量值
sheet.range("A:B").api.FormatConditions(sheet.range("A:B").api.FormatConditions.Count).SetFirstPriority
sheet.range("A:B").api.FormatConditions(1).Font.Color = -16754788
sheet.range("A:B").api.FormatConditions(1).Font.TintAndShade = 0
sheet.range("A:B").api.FormatConditions(1).Interior.PatternColorIndex = -4105    #xlAutomatic:一个全局常量
sheet.range("A:B").api.FormatConditions(1).Interior.Color = 10284031
sheet.range("A:B").api.FormatConditions(1).Interior.TintAndShade = 0
sheet.range("A:B").api.FormatConditions(1).StopIfTrue = False