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

 

posted @ 2021-05-03 15:53  正在学Python  阅读(6085)  评论(0编辑  收藏  举报