python xlwings单元格数据类型_全网最详细的xlwings库解析(4) -- Python操作区域&单元格...

上篇介绍了如何使用xlwings来操作Excel工作簿和工作表,这次我们继续学习用xlwings来操作区域和单元格,下面开始!

注意:Excel单元格不要处于编辑状态,不然代码会卡主,无法运行

上篇文章已经说了,要操作一个对象,首先要引用他,所以我们在操作区域或者单元格之前,首先就要引用他们,下面我们就来介绍如何引用一个区域。

引用

1. 引用区域

引用区域的方式有很多种,下面列举出所有可用的引用方式:

xw.Range('A1:C3')

xw.Range((1,1), (3,3))

xw.Range(xw.Range('A1'),xw.Range('C3'))

xw.Range(xw.Range('A1:F6'),xw.Range('B2:D5'))

xw.Range('NamedRange')

app.range("A1")

sht.range('A1')

xw.books['MyBook.xlsx'].sheets[0].range('A1')cell1 (str or tuple or Range) – 区域左上角的名字,可以是A1表示法、坐标元组、名字或者是xw.Range对象。也可用用区域操作符号(例如 ‘A1:B2’ )来表示。 cell2 (str or tuple or Range, default None) – 区域右下角角的名字,可以是A1表示法、坐标元组、名字或者是 xw.Range 对象。

要理解这些引用方式的不同点,只需要彻底理解上面这段官方说明即可,这里就不做解释了。

注意:单元格也是区域的一种哦,可以简单理解为是最小的区域。

2. 返回选中的区域

app.selection

wb.selection

3. 调整区域

3-1.偏移区域

rng.offset(row_offset=3,column_offset=5)返回一个从指定单元格为起始点的区域对象

这句话什么意思呢?就是将选区范围进行偏移,row_offset决定行偏移量(正数表示向下偏移,负数相反),column_offset决定列偏移量(正数表示向右偏移,负数相反)

注意:是将选区范围进行偏移,而不是将选区内容进行偏移,注意区别哦!

3-2.扩展区域

rng.expand(mode='table')

参数可选取 'down' , 'right' ,'table' ,效果分别等同于Ctrl+Shift+↓,Ctrl+Shift+→,Ctrl+Shift+↓→,这是Excel的一种快捷操作,懂得都懂

注意:实际效果与预期的可能并不相符,尤其是存在空白单元格的时候,小朋友们要自己去尝试哦

3-3.调整区域大小

rng.resize(row_size=6, column_size=4)

参数:row_size (int > 0)新的区域的行数(如果为 None , 区域保持原来的行数不变)

column_size (int > 0)新的区域的列数(如果为 None , 区域保持原来的列数不变)

3-4.全选区域

rng.current_region

与Ctrl + A效果相同,不解释

OK,到了现在,无论如何,我们终于选中了想要的区域,下面我们就要看看这片区域的属性,并对它进行操作了。

属性

1. 名称管理

'获取区域名称'

rng.name

'设置区域名称'

rng.name = "zhouxiaodi"

如果没有名称,则返回空

2. 获取区域宽高

rng.height

rng.width

3. 计数

rng.count

rng.size

返回区域内单元格数量

注意:我在测试过程中未发现这两种方式有何不同,暂且看做是同一种功能的不同写法吧

4. 定位边界单元格

rng.end(direction)

rng.end('down')

返回区域内的边界单元格

参数可选:'up','down','right','left'。得到的结果与按 Ctrl+Up , Ctrl+down , Ctrl+left 或 Ctrl+right 组合键得到的结果相同

5. 定位右下角单元格

rng.last_cell

返回指定区域的右下角单元格

6. 返回区域所属的工作表

rng.sheet

7. 返回区域引用字符串

rng.address

返回:'$C$1:$D$1'

rng.get_address(row_absolute=True, column_absolute=True, include_sheetname=False, external=False)

参数:row_absolute (bool, default True) – 设为 True 时,返回行部分的绝对引用。

column_absolute (bool, default True) – 设为 True 时,返回列部分的绝对引用。

include_sheetname (bool, default False) – 设为 True 时,返回的地址中包含工作表名。如果 external=True ,不管这里的设置如何,都带工作表名。

external (bool, default False) – 设为 True 时,返回带有工作簿名和工作表名的外部引用地址。

这里涉及到了绝对引用和相对引用,算是Excel 的基本常识,懂的自然懂,不懂的……连这都不懂,建议你赶紧关掉这篇文章

8. 其他

'返回A列的左边缘到区域的左边界的距离'

rng.left

'返回从第一行的边缘到区域边缘的距离'

rng.top

操作

1. 选中区域

rng.select()

注意:只能在活动的工作表中选,如果rng区域并不属于当前活动工作表,就会报错。

2. 赋值

'获取区域值'

rng.value

'设置区域的值'

rng.value = 1

另外,还有一种赋值方式:

rng.raw_value不经过xlwings的数据处理,直接对底层引擎(pywin32 或 appscript)处理的值进行读取或者设置。这样能够提升速度但是也自然就依赖底层引擎了,举例来说,可能就把跨平台的兼容性丢掉了

以上是官方的解释,我的理解就是:反正我不用!

3. 设置公式

'获取公式'

rng.formula

'设置公式'

rng.formula = "=1+5"

'设置数组公式'

rng.formula_array='=sum(b1:b5)'

'获取数组公式'

rng.formula_array

'检测区域内是否包含数组公式'

rng.has_array

整个区域都是数组公式返回True,这些数组公式并不需要一样

4. 设置数字格式

'获取数字格式'

rng.number_format

'设置数字格式'

rng.number_format = '0.00%'

5. 复制

rng.copy(destination=None)

把一个区域拷贝到目的区域或者剪贴板

参数:destination 设置目标区域,如果省略,rng区域会被拷贝到剪贴板上

6. 粘贴

rng.paste(paste=None, operation=None, skip_blanks=False, transpose=False)

将剪贴板里内容粘贴到指定区域

参数:pasteall_merging_conditional_formats(将粘贴所有内容,并且将合并条件格式)

all(粘贴全部内容)

all_except_borders(粘贴除边框外的全部内容)

all_using_source_theme(使用源主题粘贴全部内容)

column_widths(粘贴复制的列宽)

comments(粘贴批注)

formats(粘贴复制的源格式)

formulas(粘贴公式)

formulas_and_number_formats(粘贴公式和数字格式)

validation(粘贴有效性)

values(粘贴值)

values_and_number_formats(粘贴值和数字格式)

operationadd(加)

divide(除)

multiply(乘)

subtract(减)

skip_blanks (bool, default False)设为 True 时忽略空白单元格

transpose (bool, default False)设为 True 时对行列转置

7. 清除

'清除区域的内容,保留格式'

rng.clear_contents()

'清除区域的内容和格式'

rng.clear()

8. 删除

rng.delete(shift=None)

参数:shift (str, default None) – 使用 left 或 up 。如果省略,Excel根据区域的形状决定

可以理解为右侧单元格左移 或者 下方单元格上移

注意:区域删除后,会被其他单元格补上,但是此时xlwings中的rng已经没了,需要重新选定这个区域才能继续操作

9. 插入

rng.insert(shift=None, copy_origin='format_from_left_or_above')

参数:shift (str, default None)指定单元格的移动方向,可选:right 或者 down 。如果省略,Excel根据区域的形状决定。

copy_origin这个参数决定了**从何处复制插入单元格的格式,**可选 format_from_left_or_above 或 format_from_right_or_below,这里不做详细解释了,小朋友们自己去试一下喽。

10. 设置行高列宽

'返回区域第一行的行号'

rng.row

'返回区域的第一列的号'

rng.column

注意返回的列号不是ABCD,而是1234

'获取行高'

rng.row_height

'设置行高'

rng.row_height = 20

'获取列宽'

rng.column_width

'设置列宽'

rng.column_width = 20

到了这一步,小朋友又要发问了,如果各列宽度不统一,返回啥啊?答案是:返回None!

'返回一个代表指定区域内的行的 RangeRows 对象'

rng.rows

'返回一个代表指定区域内的行的 RangeColumns 对象'

rng.columns

什么TMD叫 RangeRows 和 RangeColumns 啊?别急,下篇文章咱们会介绍的

11. 自适应行高列宽

'调节行高列宽'

rng.autofit()

'宽度自适应'

rng.columns.autofit()

'高度自适应'

rng.rows.autofit()

12. 合并

12-1.合并单元格

rng.merge(across=False)

参数across默认为False,如果为True,则实现 跨越合并

注意:执行合并单元格时,会出现如下提示框,需要手动点击:

12-2.返回所在合并单元格区域

rng.merge_area

上面代码的返回的是rng所在的合并单元格区域,如果rng位于合并单元格内,则返回这个合并单元格,如果rng位于合并单元格外,则返回rng。

此时,聪明的小朋友又有疑问了:如果rng有一部分位于合并单元格内,有一部分位于合并单元格外,那返回什么?答案是:报错!

12-3.检测是否包含合并单元格

rng.merge_cells

如果rng区域内包含合并的单元格,则返回True,否则返回False

注意:这里的包含是rng区域完全在合并单元格内

12-4.取消合并单元格

rng.unmerge()

rng可以是其中的一个是单元格,或者是整个区域

13. 背景色

'获取指定区域的背景色'

rng.color

'设置背景色'

xw.Range('A1').color = (255,255,255)

'去除背景色'

xw.Range('A2').color = None

14. 设置超链接

rng.add_hyperlink(r'www.baidu.com','百度','提示:点击即链接到百度')

参数1:超链接地址

参数2:超链接的显示字符串,缺省为超链接地址本身

参数3:当鼠标停留在超链接上方是显示的屏幕提示

'返回指定区域的超链接(仅适合单个单元格)'

rng.hyperlink

OK,到此为止,关于Range的介绍终于完结了。

这篇文章拖更了蛮久的,好多小朋友都在催,不过好歹是写出来了,下一篇我们继续介绍剩下的图表,图片,形状等的操作,xlwings基本篇也该结束了。

后面还有API篇、番外篇以及实战篇,本以为上中下三篇文章就可以结束了,没想到……唉,不过这次绝不拖更!

  • 10
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值