一、基本信息
安装
pip install xlwings
参考链接:https://docs.xlwings.org/zh_CN/latest/installation.html
架构图
xw.apps
返回一个Apps,各子元素为App
>>> Apps([<Excel App 1668>, <Excel App 1644>])
xw.books
连接活动app实例中的工作簿,返回一个Books, 各子元素为当前打开的工作簿Book
>>> Books([<Book [xie1.xlsx]>, <Book [xie2.xlsx]>])
sheets
连接活动工作簿实例中的工作表,返回一个Sheets,子元素为当前活跃的工作簿的所有工作表Sheet
xw.sheets
>>> Sheets([<Sheet [xie2.xlsx]Sheet1>, <Sheet [xie2.xlsx]Sheet2>, <Sheet [xie2.xlsx]Sheet3>])
二、模块类
class ExcelApi(object):
"""
给未打开工作簿的程序使用
"""
def __init__(self):
self.wb = None
self.app = xw.App(visible=False, add_book=False) # 创建一个应用,程序不可见,不新增工作簿
self.app.display_alerts = False # 不显示Excel消息框
self.app.screen_updating = False # 关闭屏幕更新,可加快宏的执行速度
def create_file(self, file_path):
"""
创建excel表,并保存在指定路径
:param file_path:需要保存的文件的全路径
:return:
"""
self.wb = self.app.books.add()
self.wb.save(file_path)
self.wb.close()
def open_file(self, file_path):
"""
打开一个excel 工作簿;
:param file_path:
:return:
"""
if os.path.exists(file_path):
try:
self.wb = self.app.books.open(file_path)
return True
except Exception as err:
print(err)
return False
else:
return False
def read_cell(self, sht_name, row, col):
"""
读取指定单元格的内容
:param sht_name: sheet页名称
:param row: 行号
:param col: 列号
:return:返回的值,读取出错,返货None
"""
if str(self.wb.sheets[sht_name].range(row, col).value) == "None":
return ""
else:
return str(self.wb.sheets[sht_name].range(row, col).value)
def write_cell(self, sht_name, row, col, value):
"""
写指定单元格的内容
:param sht_name: sheet页名称
:param row: 行号
:param col: 列号
:param value: 具体的值
:return: True:成功,False:失败
"""
try:
self.wb.sheets[sht_name].range(row, col).value = value
return True
except AttributeError:
return False
def close_file(self, save=True):
if save:
self.wb.save()
self.wb.close()
self.wb = None
self.app.quit() # 关闭app
self.app.kill() # 销毁系统进程
备用知识
- 活动对象
# Active app (i.e. Excel instance)
>>> app = xw.apps.active
# Active book
>>> wb = xw.books.active # in active app
>>> wb = app.books.active # in specific app
# Active sheet
>>> sheet = xw.sheets.active # in active book
>>> sheet = wb.sheets.active # in specific book
# Range on active sheet
>>> xw.Range('A1') # on active sheet of active book of active app
- 对象的完全限定
圆括号与方括号都可以正常使用
xw.apps[763].books['Book1'].sheets['Sheet1'].range('A1')
xw.apps(10559).books('Book1').sheets('Sheet1').range('A1')
- 在子线程中使用时,若是需要新建excel,下列内容必须加入
import pythoncom # 导入的库
pythoncom.CoInitialize()