2023年5月26日 星期五

openpyxl-筆記 (初章)

 XLSX是一種特殊的二進制格式

所以其實也可以透過 

with open('example.xlsx','wb')as f:

    f.write(b'')

創造一個xlsx

但是要進行操作相當麻煩

這些事情可以透過 openpyxl 執行 

以下是簡單的 創造xlsx  插入資料 的功能介紹


介紹Worksheet類的sheet實例,以下是他常用的屬性和方法

1.title :工作表的標題

sheet.title='設置工作表名稱'

she=workbook.create_sheet(title="這也是設置工作表名稱")

print(f'獲取工作表名稱={sheet.title}')
print(f'另一個工作表名稱{she.title}')
-----------------
獲取工作表名稱=設置工作表名稱 另一個工作表名稱這也是設置工作表名稱

2.max_row  &  max_column : 查看工作表的最大行數和列數

print(f'查看{sheet.title}, 工作表的最大行數:{sheet.max_row}')
print(f'查看{sheet.title}, 工作表的最大列數{sheet.max_column}')
-----------------
查看設置工作表名稱, 工作表的最大行數:5 查看設置工作表名稱, 工作表的最大列數2

3.dimensions: 工作表的資料維度,返回包含最小行、最大行、最小列、最大列的tuple

#查看sheet這個工作表的資料維度
print(f'{sheet.title}的資料維度: {sheet.dimensions}')
------------------
設置工作表名稱的資料維度: A1:B5

4.rows:包含所有行的tuple,每一行又是一個tuple,其中包含單元格對象


print(sheet.rows)
print(f'注意,如果是tuple,那他不會有cell和value屬性')
for i in sheet.rows: #這邊迭代出來的i他是生成器對象, 'generator'
    print(i)
    print('-'*30)
    print(i[0].value,i[1].value)
----------------
<generator object Worksheet._cells_by_row at 0x000001F37E77AC20>
!!!注意,如果是tuple,那他不會有cell和value屬性!!! (<Cell '設置工作表名稱'.A1>, <Cell '設置工作表名稱'.B1>) ------------------------------ 美元 30.72 (<Cell '設置工作表名稱'.A2>, <Cell '設置工作表名稱'.B2>) ------------------------------ 歐元 32.95 (<Cell '設置工作表名稱'.A3>, <Cell '設置工作表名稱'.B3>) ------------------------------ 人民幣 4.35 (<Cell '設置工作表名稱'.A4>, <Cell '設置工作表名稱'.B4>) ------------------------------ 令吉 6.68 (<Cell '設置工作表名稱'.A5>, <Cell '設置工作表名稱'.B5>) ----------------

generator 這種格式要用迭代才能看到, 因為她是生成器

5.columns:包含所有列的tuple,每一列又是一個tuple, 其中包含單元格對象

print(f'我們來確認有幾行')
print(sheet.max_row)
print('-'*30)

for i in sheet.columns:
    print(i)
    print(i[0].value,i[1].value,i[2].value,i[3].value,i[4].value)
    print('-'*30)

----------------------------------
我們來確認有幾行 5 ------------------------------ (<Cell '2023-05-27匯率'.A1>, <Cell '2023-05-27匯率'.A2>, <Cell '2023-05-27匯率'.A3>, <Cell '2023-05-27匯率'.A4>, <Cell '2023-05-27匯率'.A5>) 美元 歐元 人民幣 令吉 泰銖 ------------------------------ (<Cell '2023-05-27匯率'.B1>, <Cell '2023-05-27匯率'.B2>, <Cell '2023-05-27匯率'.B3>, <Cell '2023-05-27匯率'.B4>, <Cell '2023-05-27匯率'.B5>) 30.72 32.94 4.35 6.68 0.88 ------------------------------


6.cell(): 訪問指定的單元格

element=sheet.cell(row=1,column=1) #欄和列都是由1開始
print(f'cell(): 會回傳一個Cell型態, 我們可以使用value變成我們要看的資料')
print(element.value)
-----------------------------
<Cell '2023-05-27匯率'.A1> cell(): 會回傳一個Cell型態, 我們可以使用value變成我們要看的資料 美元


7.iter_rows &  iter_columns  :生成器函數,用於按 行 / 列 迭代工作表中的單元格

for row in sheet.iter_rows():
    print(row)
------------------------------ (<Cell '2023-05-27匯率'.A1>, <Cell '2023-05-27匯率'.B1>) (<Cell '2023-05-27匯率'.A2>, <Cell '2023-05-27匯率'.B2>) (<Cell '2023-05-27匯率'.A3>, <Cell '2023-05-27匯率'.B3>) (<Cell '2023-05-27匯率'.A4>, <Cell '2023-05-27匯率'.B4>) (<Cell '2023-05-27匯率'.A5>, <Cell '2023-05-27匯率'.B5>)

for row in sheet.iter_rows():
    for i in row:
        #i=<Cell '2023-05-27匯率'.A1>..A1一直B5
        #可以Cell可以使用value取值
        print(i.value)
------------------------------
美元 30.72 歐元 32.94 人民幣 4.35 令吉 6.68 泰銖 0.88





import openpyxl

#創造一個Workbook對象
workbook=openpyxl.Workbook()
#獲取默認的工作表
sheet=workbook.active
print(f'sheet={sheet}')
sheet2=workbook.create_sheet(title='第二表')

j=workbook.active #測試多種工作表情況下的判定
print(f'sheet={j}')

print(f'目前有哪些工作表{workbook.sheetnames}')
------------------------------------
(?祈0_30) PS C:\Users\K\OneDrive\桌面\爬蟲0_30> & C:/Users/K/.virtualenvs/爬蟲0_30-yiVzn_yZ/Scripts/python.exe c:/Users/K/OneDrive/桌面/爬蟲0_30/Day-16.py sheet=<Worksheet "Sheet"> sheet=<Worksheet "Sheet">
['Sheet', '第二表']


workbook.active 的功能是取得默認的工作表,也就是創建xlsx時的工作表1

如果該文檔的工作表是複數時,他獲取的默認工作表,則會是第一個工作表

workbook.creat_sheet() 可以創建工作表,

title是可選的引數(string),表示工作名稱

index是可選的引數(int),指定工作表的索引位置,默認是末尾

sheet2=workbook.create_sheet(title='第二表',index=0)
j=workbook.active #測試多種工作表情況下的判定
print(f'sheet={j}')

#添加標題行
sheet2.append(['我是標題1','我是標題2','我是標題3'])
#添加頁腳
sheet2['A10']='Footer'

sheet2['A3']='ga'

print(f'目前有哪些工作表{workbook.sheetnames}')




#寫入數據到單元格
sheet['A1']='Hello'
sheet['B1']='WOrld'






#保存文件
workbook.save('example.xlsx')

#看最大的行以及列
mxR=sheet.max_row #獲取最大行
mxC=sheet.max_column #獲取最大列
mxR2=sheet2.max_row
mxC2=sheet2.max_column
print(mxR,mxR2)
print(mxC,mxC2)

--------------------------
1 10 2 3




























































































































標籤:

0 個意見:

張貼留言

訂閱 張貼留言 [Atom]

<< 首頁