没有合适的资源?快使用搜索试试~ 我知道了~
Python-xlwings-调用Excel的工具.pdf
需积分: 49 18 下载量 200 浏览量
2021-01-29
17:47:48
上传
评论 2
收藏 818KB PDF 举报
温馨提示
试读
37页
Python-xlwings-调用Excel的工具.pdf
资源详情
资源评论
资源推荐
(00)Python 使用讀寫 excel 檔案
Python 使用 openpyxl 讀寫 excel 檔案
這是一個協力廠商類別庫,可以處理 xlsx 格式的 Excel 檔案。pip install
openpyxl 安裝。如果使用 Aanconda,應該自帶了。
讀取 Excel 檔案
需要導入相關函數。
1. from openpyxl import load_workbook
2.
3. # 默認可讀寫,若有需要可以指定 write_only 和 read_only 為 True
4. wb = load_workbook('mainbuilding33.xlsx')
默認打開的檔案為可讀寫,若有需要可以指定參數 read_only 為 True 。
獲取工作表--Sheet
1. # 獲得所有 sheet 的名稱
2. print(wb.get_sheet_names())
3. # 根據 sheet 名字獲得 sheet
4. a_sheet = wb.get_sheet_by_name('Sheet1')
5. # 獲得 sheet 名
6. print(a_sheet.title)
7. # 獲得當前正在顯示的 sheet, 也可以用 wb.get_active_sheet()
8. sheet = wb.active
獲取單元格
1. # 獲取某個單元格的值,觀察 excel 發現也是先字母再數字的順序,即先列再行
2. b4 = sheet['B4']
3. # 分別返回
4. print(f'({b4.column}, {b4.row}) is {b4.value}') # 返回的數字就是 int 型
5.
6. # 除了用下標的方式獲得,還可以用 cell 函數, 換成數字,這個表示 B4
7. b4_too = sheet.cell(row=4, column=2)
8. print(b4_too.value)
b4.column 返回 B , b4.row 返回 4, value 則是那個單元格的值。另外 cell 還有一
個屬性 coordinate , 像 b4 這個單元格返回的是座標 B4 。
獲得最大行和最大列
1. # 獲得最大列和最大行
2. print(sheet.max_row)
3. print(sheet.max_column)
獲取行和列
• sheet.rows 為生成器, 裏面是每一行的資料,每一行又由一個 tuple 包裹。
• sheet.columns 類似,不過裏面是每個 tuple 是每一列的單元格。
1. # 因為按行,所以返回 A1, B1, C1 這樣的順序
2. for row in sheet.rows:
3. for cell in row:
4. print(cell.value)
5.
6. # A1, A2, A3 這樣的順序
7. for column in sheet.columns:
8. for cell in column:
9. print(cell.value)
上面的代碼就可以獲得所有單元格的資料。如果要獲得某行的資料呢?給其一個
索引就行了,因為 sheet.rows 是生成器類型,不能使用索引,轉換成 list 之後
再使用索引, list(sheet.rows)[2] 這樣就獲取到第三行的 tuple 對象。
1. for cell in list(sheet.rows)[2]:
2. print(cell.value)
如何獲得任意區間的單元格?
可以使用 range 函數,下面的寫法,獲得了以 A1 為左上角,B3 為右下角矩形
區域的所有單元格。注意 range 從 1 開始的,因為在 openpyxl 中為了和 Excel 中
的表達方式一致,並不和編程語言的習慣以 0 表示第一個值。
1. for i in range(1, 4):
2. for j in range(1, 3):
3. print(sheet.cell(row=i, column=j))
4.
5. # out
6. <Cell mainbuilding33.A1>
7. <Cell mainbuilding33.B1>
8. <Cell mainbuilding33.A2>
9. <Cell mainbuilding33.B2>
10. <Cell mainbuilding33.A3>
11. <Cell mainbuilding33.B3>
還可以像使用擷取(切片)那樣使用。sheet['A1':'B3'] 返回一個 tuple,該元組內
部還是元組,由每行的單元格構成一個元組。
1. for row_cell in sheet['A1':'B3']:
2. for cell in row_cell:
3. print(cell)
4.
5. for cell in sheet['A1':'B3']:
6. print(cell)
7.
8. # out
9. (<Cell mainbuilding33.A1>, <Cell mainbuilding33.B1>)
10. (<Cell mainbuilding33.A2>, <Cell mainbuilding33.B2>)
11. (<Cell mainbuilding33.A3>, <Cell mainbuilding33.B3>)
根據字母獲得列號,根據列號返回字母
需要導入, 這兩個函數存在於 openpyxl.utils
1. from openpyxl.utils import get_column_letter, column_index_from_string
2.
3. # 根據列的數字返回字母
4. print(get_column_letter(2)) # B
5. # 根據字母返回列的數字
6. print(column_index_from_string('D')) # 4
將資料寫入 Excel
工作表相關
需要導入 WorkBook
1. from openpyxl import Workbook
2.
3. wb = Workbook()
這樣就新建了一個新的工作表(只是還沒被保存)。
若要指定只寫模式,可以指定參數 write_only=True。一般默認的可寫可讀模式
就可以了。
1. print(wb.get_sheet_names()) # 提供一個默認名叫 Sheet 的表,office2016 下新建
提供默認 Sheet1
2. # 直接賦值就可以改工作表的名稱
3. sheet.title = 'Sheet1'
4. # 新建一個工作表,可以指定索引,適當安排其在工作簿中的位置
5. wb.create_sheet('Data', index=1) # 被安排到第二個工作表,index=0 就是第一個
位置
6.
7. # 刪除某個工作表
8. wb.remove(sheet)
9. del wb[sheet]
寫入單元格
還可以使用公式哦
1. # 直接給單元格賦值就行
2. sheet['A1'] = 'good'
3. # B9 處寫入平均值
4. sheet['B9'] = '=AVERAGE(B2:B8)'
但是如果是讀取的時候需要加上 data_only=True 這樣讀到 B9 返回的就是數字,
如果不加這個參數,返回的將是公式本身'=AVERAGE(B2:B8)'
append 函數
可以一次添加多行資料,從第一行空白行開始(下面都是空白行)寫入。
1. # 添加一行
2. row = [1 ,2, 3, 4, 5]
3. sheet.append(row)
4.
5. # 添加多行
6. rows = [
7. ['Number', 'data1', 'data2'],
8. [2, 40, 30],
9. [3, 40, 25],
10. [4, 50, 30],
11. [5, 30, 10],
12. [6, 25, 5],
13. [7, 50, 10],
14. ]
由於 append 函數只能按行寫入。如果我們想按列寫入呢。append 能實現需求么?
如果把上面的列表嵌套看作矩陣。只要將矩陣轉置就可以了。使用 zip() 函數可
以實現,不過內部的列表變成了元組就是了。都是可反覆運算對象,不影響。
1. list(zip(*rows))
2.
3. # out
4. [('Number', 2, 3, 4, 5, 6, 7),
5. ('data1', 40, 40, 50, 30, 25, 50),
6. ('data2', 30, 25, 30, 10, 5, 10)]
解釋下上面的 list(zip(*rows)) 首先 *rows 將列表打散,相當於填入了若干個
參數, zip 從某個列表中提取第 1 個值組合成一個 tuple,再從每個列表中提取第
2 個值組合成一個 tuple,一直到最短列表的最後一個值提取完畢後結束,更長列
表的之後的值被捨棄,換句話,最後的元組個數是由原來每個參數(可反覆運算
對象)的最短長度決定的。比如現在隨便刪掉一個值,最短列表長度為 2,data2
那一列(豎著看)的值全部被捨棄。
1. rows = [
2. ['Number', 'data1', 'data2'],
3. [2, 40],
4. [3, 40, 25],
5. [4, 50, 30],
6. [5, 30, 10],
剩余36页未读,继续阅读
gslink
- 粉丝: 1
- 资源: 3
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- Screenshot_20240427_031602.jpg
- 网页PDF_2024年04月26日 23-46-14_QQ浏览器网页保存_QQ浏览器转格式(6).docx
- 直接插入排序,冒泡排序,直接选择排序.zip
- 在排序2的基础上,再次对快排进行优化,其次增加快排非递归,归并排序,归并排序非递归版.zip
- 实现了7种排序算法.三种复杂度排序.三种nlogn复杂度排序(堆排序,归并排序,快速排序)一种线性复杂度的排序.zip
- 冒泡排序 直接选择排序 直接插入排序 随机快速排序 归并排序 堆排序.zip
- 课设-内部排序算法比较 包括冒泡排序、直接插入排序、简单选择排序、快速排序、希尔排序、归并排序和堆排序.zip
- Python排序算法.zip
- C语言实现直接插入排序、希尔排序、选择排序、冒泡排序、堆排序、快速排序、归并排序、计数排序,并带图详解.zip
- 常用工具集参考用于图像等数据处理
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
评论0