一、基本信息

安装

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()  # 销毁系统进程

备用知识

  1. 活动对象
# 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
  1. 对象的完全限定
    圆括号与方括号都可以正常使用
xw.apps[763].books['Book1'].sheets['Sheet1'].range('A1')
xw.apps(10559).books('Book1').sheets('Sheet1').range('A1')
  1. 在子线程中使用时,若是需要新建excel,下列内容必须加入
import pythoncom # 导入的库
pythoncom.CoInitialize()