xlwings 创建工作表
1.新建一个工作簿
# 创建Excel文件 import xlwings as xw wb = xw.Book() # 创建一个Excel进程App, 并在App中新建一个Book,Book下自动创建一个Sheet wb.save('new.xlsx') wb.close() # 创建Excel文件2 app = xw.App(visible=False, add_book=False) # 创建一个进程 App,不可见,不自动创建Book wb = app.books.add() # 在app下 创建一个Book wb.save('1.xlsx') wb.close() app.quit() # 结束进程
2.打开已有工作簿
# 打开已有Excel 文件 import xlwings as xw app = xw.App(visible = True, add_book = False) app.display_alerts = False # 不显示Excel 消息框 app.screen_updating = False # 关闭屏幕更新,可加快宏的执行速度 wb = app.books.open('1.xlsx') print(wb.fullname) # 输出文件的绝对路径 wb.save() app.quit() # 退出程序 或者 使用 app.kill() 杀死进程 强制退出 # 以第一种方式创建Book时,打开文件的操作可如下: wb = xw.Book('1.xlsx') """ 注意: (1)每个App对应一个PID值,这个PID值可以认为是一个标签,用来识别不同的App。 (2)创建工作簿之前要先创建App: app=xw.App(visible=Ture,add_book=False) (3)通过xlwings可以创建多个App,每个App又可以创建多个工作簿,每一个工作簿中又可以创建多个Sheet。 (4)需要注意的是这些App之间是相互独立的,也就是操作不同的工作簿的时候就要找到对应的App。 建议使用 xw.Book('filename.xlsx')来打开工作簿或者引用工作簿,不容易出错 """
3.获取单元格值
import xlwings as xw wb = xw.Book('1.xlsx') # 实例化一个工作簿 ws = wb.sheets['sheet1'] # 实例化一个工作表 ws.range('A1').value = '写入第一个值' print(ws.range('A1').value) # 读取值 并打印 ws.range('A1').clear() # 清空单元格值,如果单元格中是图片 则无效 ws.range('A1').value = [[1,2,3],[4,5,6]] # 传入列表 写入多行值 # 传入pandas dataframe import pandas as pd df = pd.DataFrame([[1,2],[3,4]],columns = ['a','b']) ws.range('A1').value = df ws.range('A1').options(pd.DataFrame,expand = 'table').value # 读取数据,输出为DataFrame
# 传入图片 import matplotlib.pyplot as plt fig = plt.figure() plt.plot(x,np.log(x)) ws.pictures.add(fig,name='MyPlot',updae=True)
4.列标转化为数字
# Tips: 对于A-Z的单元格可以这样进行访问,在进行循环读写的时候比较好用 n =65 n = chr(n) # ASCII字符 pos = '%s%d' % (n, 1) print(pos) #A1
5.xlwings 的层次结构
apps->books->sheets->range
6.范围取值和写值
# 范围取值 import xlwings as xw wb = xw.Book('1.xlsx') ws = wb.sheets['sheet1'] range1 = ws.range('A1:D4') print(range1) print(range1.value) range2 = ws[:3,:3] print(range2)
# 范围写值 ws.range('A1').options(transpose = True).value = [1,2,3,4] # 转置写值 ws.range('A1').options(expand = 'table').value = [[1,2],[3,4],[5,6]] # 写入二维表格
7 .获取当前工作表的行列数
# 获取当前工作表的行列数 shape = ws.used_range.shape print(shape) # 获取当前工作表的行列数2 rng = ws.range('A1').expand() nrow2 = rng.last_cell.row ncol2 = rng.last_cell.column print(nrow2) # 3 print(ncol2) # 1
# UsedRange属性返回工作表中所有已使用范围的单元格区域是指:单元格中有数值、公式、单元格格式化设置(例如:单元格字体设置、边框设置等等)
# 当然我们可以使用遍历的方式去寻找Excel文件中非空行的数量
row = 1
while ws.range('A'+ str(row)).value != None:
row+=1
print(row-1)
8.单元格还有其他一些属性和方法:
# 获取"AB2"单元格的行标和列标 print(ws.range('A2').row) print(ws.range('A2').column) # 高度和宽度 print(ws.range('A2').row_height) print(ws.range('A2').column_width) # 设置单元格填充色,可根据RGB颜色表寻找自己想要的颜色 ws.range('A2').color = (255,0,0) # 获取颜色 print(ws.range('A2').color) # 清除颜色格式 ws.range('A2').color = None # 使用公式 ws.range('A2').formula='=SUM(A1,A2) # 另外还可以获取某一个单元格的公式 print(ws.range('AB2').formula_array) # 清除工作表的所有内容但是保留原有格式 ws.clear_contents() # 当然了还有很多其他的属性 #range.address range.current_region range.end #range.api range.autofit range.expand