with xw.App(visible=True) as app:
app.activate(True)
预期:Excel显示在桌面最前方(一闪而过)。
## 2、创建工作簿
在Excel中,「新建」一个工作簿,并返回工作簿对象Book,有三种创建方式:
* `xw.Book()`
* `xw.books.add()`
* `app.books.add()`
**实例**
import xlwings as xw
with xw.App(visible=True) as app:
print(‘自带一个工作簿:’, app.books[0])
book2 = xw.Book()
print(book2)
book3 = xw.books.add()
print(book3)
book4 = app.books.add()
print(book4)
print(app.books)
输出:
自带一个工作簿: <Book [工作簿1]>
<Book [工作簿2]>
<Book [工作簿3]>
<Book [工作簿4]>
Books([<Book [工作簿1]>, <Book [工作簿2]>, <Book [工作簿3]>, …])
### 2.1、使用工作簿
1)「使用」指定的工作簿,根据工作簿的`名字`/`索引`/`序号`,并返回工作簿对象,有五种方式。
注意:`()` 根据 `序号` 选择,从1开始;`[]`根据 `索引` 选择,从0开始。
* app.books (`序号`)
* app.books [`索引`]
* xw.books [`索引`]
* xw.books (`序号`)
* xw.Book (`名字`)
**实例**
import xlwings as xw
with xw.App(visible=True) as app:
print(app.books)
print(app.books(1))
print(app.books[0])
print(xw.books[0])
print(xw.books(1))
print(xw.Book(‘工作簿1’))
输出:
Books([<Book [工作簿1]>])
<Book [工作簿1]>
<Book [工作簿1]>
<Book [工作簿1]>
<Book [工作簿1]>
<Book [工作簿1]>
2)使用指定的工作簿,根据「文件路径」(用r字符串包裹路径),有三种方式
* xw.Book( `路径` )
* xw.books.open( `路径` )
* app.books.open( `路径` )
**实例**
import xlwings as xw
with xw.App(visible=True) as app:
print(xw.Book(r’E:\test.xlsx’))
print(xw.books.open(r’E:\test.xlsx’))
print(app.books.open(r’E:\test.xlsx’))
print(app.books)
输出:
<Book [test.xlsx]>
<Book [test.xlsx]>
<Book [test.xlsx]>
Books([<Book [工作簿1]>, <Book [test.xlsx]>])
### 2.2、操作工作簿
* `book.name`:返回工作簿的名字
* `book.sheets`:返回工作簿的所有sheet页(列表)
* `book.app`:返回工作簿所在的App对象(Excel程序)
**实例**
import xlwings as xw
with xw.App(visible=True) as app:
book = app.books[0]
print(book.name)
print(book.sheets)
print(book.app, app)
print(book.selection)
输出:
工作簿1
Sheets([<Sheet [工作簿1]Sheet1>])
<App [excel] 18392> <App [excel] 18392>
<Range [工作簿1]Sheet1!$A$1>
* `book.save()`:保存工作簿,如果不指定路径,则保存到当前路径。
**语法**
book.save( path, password )
**参数**
* path :(可选)文件保存路径
* password :(可选)文件打开密码
**实例**
import xlwings as xw
with xw.App(visible=True) as app:
book = app.books[0]
book.save(r’E:/test1.xlsx’, 123456)
预期:文件保存到E盘,打开需要「输入密码」。
* `book.to_pdf()`:导出PDF,如果不指定路径,则保存到当前路径。
注意:Excel必须有「内容」,才能导出PDF,否则会报错
**语法**
book.to_pdf( path, include, exclude, show )
**参数**
* path :(可选)PDF文件保存路径,默认当前目录
* include :(可选)包含哪些工作表,单个工作表名 或 多个工作表名的列表
* exclude :(可选)不包含哪些工作表,单个工作表名 或 多个工作表名的列表
* show :(可选)创建后使用默认应用打开PDF,默认值False
**实例**
import xlwings as xw
with xw.App(visible=True) as app:
book = app.books[0]
book.sheets[0][‘A1’].value = ‘text’
book.to_pdf(show=True)
预期:PDF文件保存到当前目录下,并「自动打开」。
## 3、创建工作表
使用工作簿对象 Book ,「创建」工作表,返回工作表对象 Sheet ,一个 Sheet 对应一个工作表,有两种创建方式:
* `app.books[0].sheets.add()`
* `xw.books[0].sheets.add()`
创建工作表时,可以「设置表名」。参数2中, after 表示插入到某个表后面, before 表示插入到某个表前面。
* `app.books[0].sheets.add('name1')`
* `xw.books[0].sheets.add('name2')`
**实例**
import xlwings as xw
with xw.App(visible=True) as app:
app.books[0].sheets.add(‘name1’)
xw.books[0].sheets.add()
print('所有工作表:', app.books[0].sheets)
输出:
所有工作表: Sheets([<Sheet [工作簿1]Sheet3>, <Sheet [工作簿1]name1>, <Sheet [工作簿1]Sheet1>])
### 3.1、使用工作表
通过工作簿对象 Book ,「使用」指定的工作表,根据工作表的`名字`/`索引`/`序号`,并返回工作表对象 Sheet ,有六种方式:
* `app.books[0].sheets[0]`
* `app.books[0].sheets(1)`
* `app.books[0].sheets['Sheet1']`
* `xw.books[0].sheets[0]`
* `xw.books[0].sheets(1)`
* `xw.books[0].sheets['Sheet1']`
注意:`()` 根据 `序号` 选择,从1开始;`[]`根据 `索引` 选择,从0开始。
**实例**
import xlwings as xw
with xw.App(visible=True) as app:
book = app.books[0]
print(book.sheets[0])
print(book.sheets(1))
print(book.sheets[‘Sheet1’])
wb = xw.books[0]
print(wb.sheets[0])
print(wb.sheets(1))
print(wb.sheets['Sheet1'])
print('工作表列表:', book.sheets)
输出:
<Sheet [工作簿1]Sheet1>
<Sheet [工作簿1]Sheet1>
<Sheet [工作簿1]Sheet1>
<Sheet [工作簿1]Sheet1>
<Sheet [工作簿1]Sheet1>
<Sheet [工作簿1]Sheet1>
工作表列表: Sheets([<Sheet [工作簿1]Sheet1>])
### 3.2、操作工作表
1)工作表名
* `app.books[0].sheets[0].name = 'sheetName'`:设置工作表名
* `app.books[0].sheets[0].name`:获取工作表名
* `app.books[0].sheets[0].book`:获取工作表所属的工作簿
* `app.books[0].sheets[0].index`:获取工作表的索引(从1开始)
2)行高列宽
* `app.books[0].sheets[0].autofit()`:自适应行高列宽
* `app.books[0].sheets[0].autofit(axis='rows')`:自适应行高
* `app.books[0].sheets[0].autofit(axis='columns')`:自适应列宽
3)导出工作表(不指定路径,默认保存到当前目录)
* `app.books[0].sheets[0].to_html()`:导出 HTML
* `app.books[0].sheets[0].to_pdf()`:导出 PDF(内容不能为空)
4)复制工作表
* `app.books[0].sheets('sheetName').copy()`:复制工作表为副本
* name:(可选,str)副本的名字
* before:(可选,sheet对象)复制到哪个工作表之前
* after:(可选,sheet对象)复制到哪个工作表之后
### 3.3、删除工作表
* `app.books[0].sheets[0].clear_contents()`:删除文本但保留样式
* `app.books[0].sheets[0].clear_formats()`:删除样式但保留文本
* `app.books[0].sheets[0].clear()`:删除文本和样式
* `app.books[0].sheets[0].delete()`:删除工作表
## 4、读写单元格
单元格不需要创建,选中单元格「范围」,然后读写即可,一个 Range 对应一个单元格。
### 4.1、选择单元格
按照范围、位置,选择单元格,并返回单元格对象,有多种方式。
1)按照A1表示法(例:选中A1到B3范围的单元格)
* `sheet.range('A1')`
* `sheet.range('A1:B2')`
2)按照坐标位置,坐标从左上角起始
* `sheet.range(1, 1)`
* `sheet.range((1, 1), (3, 4))`
3)切片方式选择范围
* `sheet['A1']`
* `sheet['A1:B2']`
* `sheet[0, 0]`
* `sheet[0:1, 0:4]`
4)按照单元格名字
* `sheet.range('a1_name')`
**实例**
import xlwings as xw
with xw.App(visible=True) as app:
book = app.books[0]
sheet = book.sheets[0]
range1 = sheet.range(‘A1’)
print(range1)
range2 = sheet.range(‘A1:B2’)
print(range2)
range3 = sheet.range(1, 1)
print(range3)
range4 = sheet.range((1, 1), (3, 4))
print(range4)
print(sheet[‘A1’])
print(sheet[‘A1:B2’])
print(sheet[0, 0])
print(sheet[0:1, 0:4])
输出:
<Range [工作簿1]Sheet1!$A 1 > < R a n g e [ 工作簿 1 ] S h e e t 1 ! 1> <Range [工作簿1]Sheet1! 1><Range[工作簿1]Sheet1!A 1 : 1: 1:B 2 > < R a n g e [ 工作簿 1 ] S h e e t 1 ! 2> <Range [工作簿1]Sheet1! 2><Range[工作簿1]Sheet1!A 1 > < R a n g e [ 工作簿 1 ] S h e e t 1 ! 1> <Range [工作簿1]Sheet1! 1><Range[工作簿1]Sheet1!A 1 : 1: 1:D 3 > < R a n g e [ 工作簿 1 ] S h e e t 1 ! 3> <Range [工作簿1]Sheet1! 3><Range[工作簿1]Sheet1!A 1 > < R a n g e [ 工作簿 1 ] S h e e t 1 ! 1> <Range [工作簿1]Sheet1! 1><Range[工作簿1]Sheet1!A 1 : 1: 1:B 2 > < R a n g e [ 工作簿 1 ] S h e e t 1 ! 2> <Range [工作簿1]Sheet1! 2><Range[工作簿1]Sheet1!A 1 > < R a n g e [ 工作簿 1 ] S h e e t 1 ! 1> <Range [工作簿1]Sheet1! 1><Range[工作簿1]Sheet1!A 1 : 1: 1:D$1>
### 4.2、写入数据到单元格
向指定单元格中写入数据,数据可以是`单个值`、`一维列表`、`二维列表`
* `sheet.range('A1').value = 'hello Excel'`
* `sheet.range('A2').value = [1, 2, 3]`
* `sheet.range('A3').value = [[11, 22], [33, 44]]`
写入效果参见下图
![在这里插入图片描述](https://img-blog.csdnimg.cn/b0039a01c96f4311ad94579b4f3d422e.png)
提示:已经有数据的单元格,再次写入,会覆盖原来的数据,常用来修改单元格数据。
### 4.3、读取单元格的数据
按照A1表示法,读取指定范围内单元格的数据,读出的数据可以是`单个数据`、`列表`、`二维列表`形式。
* `sheet.range('A1').value`
* `sheet.range('A2:C2').value`
* `sheet.range('A3:B4').value`
我们将上一步写入的数据读出来,输出结果如下:
本人从事网路安全工作12年,曾在2个大厂工作过,安全服务、售后服务、售前、攻防比赛、安全讲师、销售经理等职位都做过,对这个行业了解比较全面。
最近遍览了各种网络安全类的文章,内容参差不齐,其中不伐有大佬倾力教学,也有各种不良机构浑水摸鱼,在收到几条私信,发现大家对一套完整的系统的网络安全从学习路线到学习资料,甚至是工具有着不小的需求。
最后,我将这部分内容融会贯通成了一套282G的网络安全资料包,所有类目条理清晰,知识点层层递进,需要的小伙伴可以点击下方小卡片领取哦!下面就开始进入正题,如何从一个萌新一步一步进入网络安全行业。
学习路线图
其中最为瞩目也是最为基础的就是网络安全学习路线图,这里我给大家分享一份打磨了3个月,已经更新到4.0版本的网络安全学习路线图。
相比起繁琐的文字,还是生动的视频教程更加适合零基础的同学们学习,这里也是整理了一份与上述学习路线一一对应的网络安全视频教程。
网络安全工具箱
当然,当你入门之后,仅仅是视频教程已经不能满足你的需求了,你肯定需要学习各种工具的使用以及大量的实战项目,这里也分享一份我自己整理的网络安全入门工具以及使用教程和实战。
项目实战
最后就是项目实战,这里带来的是SRC资料&HW资料,毕竟实战是检验真理的唯一标准嘛~
面试题
归根结底,我们的最终目的都是为了就业,所以这份结合了多位朋友的亲身经验打磨的面试题合集你绝对不能错过!
网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。
一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!