GVKun编程网logo

如何使用xlwings从Python调用Excel宏?(python调用excel的宏)

11

最近很多小伙伴都在问如何使用xlwings从Python调用Excel宏?和python调用excel的宏这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Excel不再复杂:Pyt

最近很多小伙伴都在问如何使用xlwings从Python调用Excel宏?python调用excel的宏这两个问题,那么本篇文章就来给大家详细解答一下,同时本文还将给你拓展Excel不再复杂:Python与xlwings的黄金组合、Python 3使用xlrd+xlwt读取/写入Excel数据、python excel xldr xlwt xlutils 使用简介、python xlwings Excel 内容截图等相关知识,下面开始了哦!

本文目录一览:

如何使用xlwings从Python调用Excel宏?(python调用excel的宏)

如何使用xlwings从Python调用Excel宏?(python调用excel的宏)

我已经阅读了xlwings的API文档,并在解释器中玩过Workbook和Sheet对象,但是我不知道如何从Python调用宏。

如何使用xlwings从Python调用Excel宏?

答案1

小编典典

尚未实现,但是有一个未解决的问题,请参见此处。同时,您可以像这样解决它(这适用于Windows,但Mac版本适用,请在问题中再次查看):

from xlwings import Workbookwb = Workbook(...)wb.application.xl_app.Run("your_macro")

更新 :对于最新版本,您必须执行以下操作:

from xlwings import Workbook, Applicationwb = Workbook(...)Application(wb).xl_app.Run("your_macro")

更新2 :> = v0.7.1现在本地支持此功能。假设有一个VBA函数YourMacro将两个数字相加:

>>> import xlwings as xw>>> wb = xw.Book(r''C:\path\to\mybook.xlsm'')>>> your_macro = wb.macro(''YourMacro'')>>> your_macro(1, 2)3.0

Excel不再复杂:Python与xlwings的黄金组合

Excel不再复杂:Python与xlwings的黄金组合

大家好,我是涛哥,本文内容来自 涛哥聊Python ,转载请标原创。

Excel是许多人日常工作中不可或缺的工具,而Python是一门强大的编程语言,能够帮助你处理各种数据和自动化任务。将二者结合起来,将拥有无限的潜力。

本文将详细介绍xlwings,这是一个用于在Python中操作Excel的强大工具。将深入探讨如何安装xlwings、基本操作、数据导入导出、自动化任务以及与Excel VBA的比较,以帮助你充分利用xlwings的功能。

安装xlwings

要开始使用xlwings,首先需要安装它。

使用pip来安装xlwings,只需运行以下命令:

pip install xlwings

安装完成后,就可以在Python中导入xlwings并开始使用它了。

import xlwings as xw

基本操作

打开和保存工作簿

使用xlwings,可以轻松地打开现有的Excel工作簿或创建新的工作簿。

# 打开现有工作簿
wb = xw.Book(''example.xlsx'')

# 创建新工作簿
wb = xw.Book()

你还可以保存工作簿。

wb.save(''new_workbook.xlsx'')

选择工作表和单元格

xlwings允许选择工作簿中的工作表,并在工作表上选择单元格。

# 选择工作表
sheet = wb.sheets[''Sheet1'']

# 在工作表上选择单元格
cell = sheet.range(''A1'')

读取和写入数据

可以轻松地读取和写入单元格中的数据。

# 读取数据
data = cell.value

# 写入数据
cell.value = ''Hello, xlwings!''

数据导入导出

从Excel导入数据

xlwings可以将Excel中的数据导入到Python中,以便进行进一步的处理。

import pandas as pd

# 从Excel导入数据到DataFrame
df = sheet[''A1''].expand().options(pd.DataFrame).value

导出数据到Excel

可以将Python中的数据导出到Excel工作簿中。

# 将DataFrame导出到Excel
df = pd.DataFrame({''A'': [1, 2, 3], ''B'': [4, 5, 6]})
sheet[''A1''].options(index=False, header=True).value = df

自动化任务

xlwings还支持自动化任务,可以使用Python脚本来操作Excel,执行各种任务。

# 示例:自动填充公式
sheet[''C1''].formula = ''=A1 + B1''

与Excel VBA的比较

xlwings和Excel VBA都是用于与Microsoft Excel集成的工具,但它们有不同的工作方式和用途。

1. 编程语言:

  • xlwings: 使用Python作为编程语言。如果熟悉Python,可以使用Python的强大功能来与Excel进行交互。
  • Excel VBA: 使用VBA(Visual Basic for Applications)作为编程语言。它是专门为Excel设计的编程语言,与Excel深度集成。

2. 学习曲线:

  • xlwings: 对于已经熟悉Python的开发人员来说,学习xlwings相对容易。Python是一种广泛使用的编程语言,拥有大量的资源和社区支持。
  • Excel VBA: 学习VBA可能需要更多的时间,尤其是对于不熟悉编程的Excel用户来说。

3. 功能:

  • xlwings: 具有强大的Python生态系统支持,可以使用Python库进行数据分析、图形处理、Web请求等。与Python生态系统的集成使其适用于更广泛的应用。
  • Excel VBA: Excel VBA专注于Excel应用程序的自动化,可以轻松访问Excel对象模型和VBA函数。它在Excel自动化方面非常强大。

4. 跨平台支持:

  • xlwings: 支持跨平台,可在Windows和macOS上使用。
  • Excel VBA: 主要针对Windows平台,对macOS支持有限。

5. 集成:

  • xlwings: 可以轻松与其他Python库和工具集成,如Pandas、NumPy等。
  • Excel VBA: 集成主要是针对Excel应用程序,可能不太适用于与其他编程语言和库的深度集成。

6. 自动化任务:

  • xlwings: 适用于数据分析、报告生成、数据处理、自动化任务等。
  • Excel VBA: 主要用于Excel文件和应用程序的自动化。

总结

xlwings是一个强大的Python库,它提供了出色的能力来与Excel进行集成,实现自动化任务、数据导入导出以及复杂数据处理。通过xlwings,可以使用Python的强大功能,而不必依赖Excel的VBA宏。在本文中,分享了xlwings的使用方式,包括安装、基本操作、数据导入导出以及自动化任务。还比较了xlwings与Excel VBA之间的差异,强调了xlwings在数据处理和自动化方面的优势。

无论是数据分析师、财务专业人士还是任何需要频繁使用Excel的人,xlwings都能够提高工作效率,可以更轻松地处理Excel文件。掌握xlwings,让Python和Excel成为工作中的得力助手,为工作带来便捷和高效。

Python 3使用xlrd+xlwt读取/写入Excel数据

Python 3使用xlrd+xlwt读取/写入Excel数据

开发前置环境

  • 安装Python(如Python 3.7)
  • 安装Office办公软件(或WPS Office)
  • 安装开发工具(如PyCharm,下载地址:https://www.jetbrains.com/pycharm/download)

1 xlrd模块读取Excel

xlrd为Python第三方模块,用来读取Excel表格数据(仅支持.xls格式)。

1.1 xlrd常用函数

import xlrd

# 读取Excel文件
data = xlrd.open_workbook("data1.xls")
# print(data.sheet_loaded(0)) # 加载索引为0的工作表  True
# data.unload_sheet(0) # 卸载
# print(data.sheet_loaded(0))  # 未被加载,False
# print(data.sheet_loaded(1))  # True
print(data.sheets()) # 获取全部sheet  [Sheet  0:<Sheet1>, Sheet  1:<Sheet2>, Sheet  2:<Sheet3>]
print(data.sheets()[0]) # 获取指定索引的工作表对象  Sheet  0:<Sheet1>
print(data.sheet_by_index(0)) # 根据索引获取工作表 Sheet  0:<Sheet1>
print(data.sheet_by_name('Sheet1'))  # 根据名字sheetname(区分大小写)获取工作表 Sheet  0:<Sheet1>
print(data.sheet_names()) # 获取所有工作表的name ['Sheet1', 'Sheet2', 'Sheet3']
# 查看共有多少个工作表
print(len(data.sheet_names())) # 返回所有工作表的名称组成的list的长度 3
print(data.nsheets) # 返回excel工作表的数量 3

data1.xls——Sheet1:

在这里插入图片描述

data1.xls——Sheet2:

在这里插入图片描述


1.2 xlrd操作Excel行

import xlrd

data = xlrd.open_workbook("data1.xls")

# 操作excel行
sheet1 = data.sheet_by_index(0) # 获取第一个工作表
print(sheet1.nrows) # 获取sheet下的有效行数  11
sheet2 = data.sheet_by_index(1) # 获取第2个工作表
print(sheet2.nrows) # 获取sheet下的有效行数  10
print(sheet1.row(0)) # 输出第一行数据
# [text:'1月份销售额明细表', empty:'', empty:'', empty:'', empty:'', empty:'', empty:'']
print(sheet1.row(1)) # 输出第2行数据,返回该行单元格对象组成的列表
# [text:'日期', text:'货号', text:'颜色', text:'尺码', text:'原价', text:'折扣', text:'备注']
print(sheet1.row_types(1)) # 获取单元格的数据类型,返回指定行数据的数据类型
# (xlrd单元格数据类型表示:0:empty,1:string,2:number,3:date,4:boolean,5:error)
# array('B', [1, 1, 1, 1, 1, 1, 1])
print(sheet1.row(1)[2]) # 获取单元格的数据类型 text:'颜色'
print(sheet1.row(1)[2].value) # 获取单元格value 颜色
print(sheet1.row_values(1)) # 得到指定行单元格的值 ['日期', '货号', '颜色', '尺码', '原价', '折扣', '备注']
print(sheet1.row_len(1)) # 得到单元格的长度 7

1.3 xlrd操作Excel列

import xlrd

data = xlrd.open_workbook("data1.xls")

# 操作excel列
sheet1 = data.sheet_by_index(0) # 获取第一个工作表
print(sheet1.ncols) # 获取工作表有效列数
print(sheet1.col(1)) # 该列单元格对象组成的列表
# [empty:'', text:'货号', text:'X0001', text:'X0002', text:'X0003', text:'X0004', text:'X0005', text:'X0006', text:'X0007', text:'X0008', text:'X0009']
print(sheet1.col(1)[2]) # text:'X0001'
print(sheet1.col(1)[2].value) # X0001
print(sheet1.col_values(1)) # 返回该列所有单元格的value组成的列表
# ['', '货号', 'X0001', 'X0002', 'X0003', 'X0004', 'X0005', 'X0006', 'X0007', 'X0008', 'X0009']
print(sheet1.col_types(1)) # 获取该列单元格的数据类型 [0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1]

1.4 xlrd操作Excel单元格

import xlrd

data = xlrd.open_workbook("data1.xls")

# 操作excel单元格
sheet1 = data.sheet_by_index(0) # 获取第一个工作表
print(sheet1.cell(1,2)) # text:'颜色'
# 获取单元格数据类型
print(sheet1.cell_type(1,2)) # 1
print(sheet1.cell(1,2).ctype) # 1
# 获取单元格的值
print(sheet1.cell(1,2).value) # 获取第二行,第三列单元格的值 颜色
print(sheet1.cell_value(1,2)) # 颜色

2 xlwt写入Excel

xlwt为Python第三方模块,用来写入Excel表格数据(仅支持.xls格式)。

2.1 xlwt写入Excel步骤

  • 创建工作簿
  • 创建工作表
  • 填充工作表内容
  • 保存文件
import xlwt

# 第一步:创建工作簿
wb = xlwt.Workbook()
# 第二步:创建工作表
ws = wb.add_sheet("CNY")
# 第三步:填充数据
ws.write_merge(0, 1, 0, 5, "2019年货币兑换表")

# 写入货币数据
data = (("Date", "英镑", "人民币", "港币", "日元", "美元"),
        ("01/01/2019", 8.722551, 1, 0.877885, 0.062722, 6.8759),
        ("02/01/2019", 8.634922, 1, 0.875731, 0.062773, 6.8601))
for i,item in enumerate(data):
    for j,val in enumerate(item):
        ws.write(i+2, j, val)

# 创建第二个工作表
wsImage = wb.add_sheet("image")
# 写入图片
wsImage.insert_bitmap("2021-07-01_172956.bmp", 0, 0)
# 第四步:保存
wb.save("2019-CNY.xls")

执行效果:

在这里插入图片描述

在这里插入图片描述

2.2 写入格式化(添加样式)

import xlwt

titleStyle = xlwt.XFStyle() # 初始化样式
titleFont = xlwt.Font()
titleFont.name = "宋体"
titleFont.bold = True # 加粗
titleFont.height = 11*20 # 字号
titleFont.colour_index = 0x08 # 字体颜色
titleStyle.font = titleFont

# 单元格对齐方式
cellAlign = xlwt.Alignment()
cellAlign.horz = 0x02 # 水平居中
cellAlign.vert = 0x01 # 垂直居中
titleStyle.alignment = cellAlign

# 边框
borders = xlwt.Borders()
borders.right = xlwt.Borders.DASHED
borders.bottom = xlwt.Borders.DottED
titleStyle.borders = borders

# 背景颜色
dataStyle = xlwt.XFStyle()
bgColor = xlwt.Pattern()
bgColor.pattern = xlwt.Pattern.soLID_PATTERN
bgColor.pattern_fore_colour = 22 # 背景颜色
dataStyle.pattern = bgColor

# 第一步:创建工作簿
wb = xlwt.Workbook()
# 第二步:创建工作表
ws = wb.add_sheet("CNY")
# 第三步:填充数据
ws.write_merge(0, 1, 0, 5, "2019年货币兑换表", titleStyle) # 合并单元格,1~2行,1~6列

# 写入货币数据
data = (("Date", "英镑", "人民币", "港币", "日元", "美元"),
        ("01/01/2019", 8.722551, 1, 0.877885, 0.062722, 6.8759),
        ("02/01/2019", 8.634922, 1, 0.875731, 0.062773, 6.8601))
for i,item in enumerate(data):
    for j,val in enumerate(item):
        if j==0:
            ws.write(i+2, j, val, dataStyle)
        else:
            ws.write(i+2, j, val)

# 创建第二个工作表
wsImage = wb.add_sheet("image")
# 写入图片
wsImage.insert_bitmap("2021-07-01_172956.bmp", 0, 0)
# 第四步:保存
wb.save("2019-CNY.xls")

执行效果:

在这里插入图片描述

3. 实战:基于xlrd模块实现考试系统题库管理

3.1 Excel导入试题到数据库的操作步骤

  • 通过xlrd模块读取Excel数据
  • 通过pyMysqL模块连接数据库
  • 组装数据、执行插入操作
  • 关闭数据库连接

建表sql:

DROP TABLE IF EXISTS `question`;
CREATE TABLE `question`  (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `subject` varchar(255) DEFAULT NULL COMMENT '题目',
  `questionType` varchar(255) DEFAULT NULL COMMENT '题型',
  `optionA` varchar(255) DEFAULT NULL COMMENT '选项A',
  `optionB` varchar(255) DEFAULT NULL COMMENT '选项B',
  `optionC` varchar(255) DEFAULT NULL COMMENT '选项C',
  `optionD` varchar(255) DEFAULT NULL COMMENT '选项D',
  `score` int(11) DEFAULT NULL COMMENT '分值',
  `answer` varchar(255) DEFAULT NULL COMMENT '正确答案',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1 CHaraCTER SET = utf8;

MysqLhelper.py:

import pyMysqL

class dbhelper():
    def __init__(self,host,port,user,passwd,db,charset="utf8"):
        self.host=host
        self.port=port
        self.user=user
        self.passwd=passwd
        self.db=db
        self.charset=charset
    #创建一个链接
    def connection(self):
        #1. 创建连接
        self.conn = pyMysqL.connect(host=self.host, port=self.port, user=self.user, passwd=self.passwd, db=self.db,charset=self.charset)
        #2. 创建游标
        self.cur = self.conn.cursor()
    #关闭链接
    def closeconnection(self):
        self.cur.close()
        self.conn.close()
    #查询一条数据
    def getonedata(self,sql):
        try:
            self.connection()
            self.cur.execute(sql)
            result=self.cur.fetchone()
            self.closeconnection()
        except Exception:
            print(Exception)
        return result
    #查询多条数据
    def getalldata(self,sql):
        try:
            self.connection()
            self.cur.execute(sql)
            result=self.cur.fetchall()
            self.closeconnection()
        except Exception:
            print(Exception)
        return result
    #添加/修改/删除
    def executedata(self,sql):
        try:
            self.connection()
            self.cur.execute(sql)
            self.conn.commit()
            self.closeconnection()
        except Exception:
            print(Exception)
    #批量插入
    def executemanydata(self,sql,vals):
        try:
            self.connection()
            self.cur.executemany(sql,vals)
            self.conn.commit()
            self.closeconnection()
        except Exception as e:
            print(e)

data2.xls:

在这里插入图片描述

excelproject.py:

import xlrd

data = xlrd.open_workbook("data2.xls")
sheet = data.sheet_by_index(0) # 获取到工作表
questionList = []  # 构建试题列表

# 试题类
class Question:
    pass

for i in range(sheet.nrows):
    if i>1:
        obj = Question() # 构建试题对象
        obj.subject = sheet.cell(i, 1).value # 题目
        obj.questionType = sheet.cell(i, 2).value # 题型
        obj.optionA = sheet.cell(i, 3).value # 选项A
        obj.optionB = sheet.cell(i, 4).value # 选项B
        obj.optionC = sheet.cell(i, 5).value # 选项C
        obj.optionD = sheet.cell(i, 6).value # 选项D
        obj.score = sheet.cell(i, 7).value # 分值
        obj.answer = sheet.cell(i, 8).value # 正确答案
        questionList.append(obj)

print(questionList)
# 导入操作 pyMysqL pip install
from MysqLhelper import *
# 1.连接到数据库
db = dbhelper('127.0.0.1', 3306, "root", "123456", "test")
# 插入语句
sql = "insert into question(subject, questionType, optionA, optionB, optionC, optionD, score, answer) values (%s, %s, %s, %s, %s, %s, %s, %s)"
val = [] # 空列表来存储元组
for item in questionList:
    val.append((item.subject, item.questionType, item.optionA, item.optionB, item.optionC, item.optionD, item.score, item.answer))
#print(val)
db.executemanydata(sql, val)

执行效果:

在这里插入图片描述

python excel xldr xlwt xlutils 使用简介

python excel xldr xlwt xlutils 使用简介

在python中如果想调用excel数据需要额外安装插件

安装方法:百度搜索xldr,点击下图所示 下载插件并解压

然后在命令行输入(以放在d盘根目录为例):d: 然后回车,进入d盘,接着输入  cd d:/xlrd-1.1.0\ 进入所在文件夹

然后输入 python setup.py install 进行安装,如果安装失败参考提示,可以选择调整编码,也可以重新安装python

xlwt xlutils 都用同样的方法安装。

插件用法:(xlrd) xlrd仅能读取excel的数据

 import xlrd # 首先调用插件

account_excel = xlrd.open_workbook(r''D:\Meitu\1.xls'') #打开excel表格

 sheet1=account_excel.sheets()[0]#把表格内的第一个sheet 复制到sheet1中, [0]代表第一个sheet

此后可以从sheet1中读取整行,整列的数据例:cols = sheet1.col_values(2)   获取第三列的数据

获取单元格的数据:a = sheet1.cell(1,2).value 这是获取第二列第三行的数据

注意:上面的语句如果读取的单元格中没有数据那么会报错

xlwt:仅可以写入空的sheet中,如果sheet已经有数据那么会覆盖原有数据

excel1 = xlwt.Workbook() #创建工作簿

sheet1 = excel1.add_sheet#创建sheet1

row0=[列表数据]#以列表形式形成行

写入的代码:write_merge(x, x + m, y, w + n, string, sytle)
x表示行,y表示列,m表示跨行个数,n表示跨列个数,string表示要写入的单元格内容,style表示单元格样式。其中,x,y,w,h,都是以0开始计算的。

例如写一个这样的输入在第14行,1~2列合并单元格输入1、

write_merge(13,13, 0, 1,''1'', sytle)

python xlwings Excel 内容截图

python xlwings Excel 内容截图

import xlwings as xw
from PIL import ImageGrab


def excel_save_img(path, sheet=0, img_name="1", img_suffix="png"):
    app = xw.App(visible=True, add_book=False)
    # 1. 使用 xlwings 的 读取 path 文件 启动
    wb = app.books.open(path)

    # 2. 读取 sheet
    sht = wb.sheets[sheet]

    # 3. 获取 行与列
    nrow = sht.api.UsedRange.Rows.count
    ncol = sht.api.UsedRange.Columns.count
    print(nrow)
    print(ncol)

    # 4. 获取有内容的 range
    range_val = sht.range(
        (1, 1),  # 获取 第一行 第一列
        (nrow, ncol)  # 获取 第 nrow 行 第 ncol 列
    )
    print(range_val.value)

    # 5. 复制图片区域
    range_val.api.CopyPicture()

    # 6. 粘贴
    sht.api.Paste()

    pic = sht.pictures[0]  # 当前图片
    pic.api.Copy()  # 复制图片

    img = ImageGrab.grabclipboard()  # 获取剪贴板的图片数据
    img.save(img_name + "." + img_suffix)  # 保存图片
    pic.delete()  # 删除sheet上的图片

    wb.close()  # 不保存,直接关闭
    app.quit()  # 退出


path = r"D:\1.xlsx"

excel_save_img(path, sheet=1, img_name=''1'')

  

我们今天的关于如何使用xlwings从Python调用Excel宏?python调用excel的宏的分享已经告一段落,感谢您的关注,如果您想了解更多关于Excel不再复杂:Python与xlwings的黄金组合、Python 3使用xlrd+xlwt读取/写入Excel数据、python excel xldr xlwt xlutils 使用简介、python xlwings Excel 内容截图的相关信息,请在本站查询。

本文标签: