如何利用Python批量處理行、列和單元格詳解

精確調整工作表的行高和列寬

步驟

  1. 打開工作簿。
  2. 遍歷所有工作表

核心代碼

for i in workbook.sheets:
	value = i.range('A1').expand('table')
	value.column_width = 12
	value.row_height = 20
workbook.save()

批量更改多個工作簿的數據格式

步驟:

  1. 列出文件夾中所有子文件
  2. 遍歷打開子文件
  3. 遍歷工作表
  4. 獲取工作表的最後一行
  5. 將指定列從上到下修改

核心代碼

#遍歷工作表
for j in workbook.sheets:
	# 獲取最後一行
	row_num = j['A1'].current_region.last_cell.row
	# 數據格式修改
	j['A2:A{}'.format(row_num)].number_format = 'm/d'
	j['D2:D{}'.format(row_num)].number_format = '¥#,##0.00'
workbook.save()
workbook.close()

使用xwings模塊中的number format屬性來設置單元格區域中數據的格式。該屬性的取值為一個代表特定格式的字符串,與Excel的“設置單元格格式”

對話框中“數字”選項卡下設置的格式對應。

批量更改工作簿的外觀格式

難點應該是外觀格式如何更改瞭吧,這裡介紹一些常用的外觀格式。

j 是工作表

設置字體格式

修改字體為宋體

j['A1:H1'].api.Font.Name = '宋體'

修改字號

j['A1:H1'].api.Font.Size= 10  # 10磅

字體加粗

j['A1:H1'].api.Font.Bold= True  

字體顏色

# 白色
j['A1:H1'].api.Font.Color= xw.utils.rgb_to_int((255,255,255)) 

單元格填充顏色

# 填充顏色為黑色
j['A1:H1'].Color= xw.utils.rgb_to_int((0,0,0)) 

對齊方式

# 水平對齊方式為 居中
j['A1:H1'].api.HorizontalAlignment = xw.constants.HAlign.xlHAlignCenter

# 垂直對齊方式為 居中
j['A1:H1'].api.VerticalAlignment= xw.constants.VAlign.xlVAlignCenter

以上是一列的如果是正文,j[‘A1:H1’]變成 j[‘A2’].expand(‘table’) 就可以瞭

添加合適粗細的邊框

# 遍歷所有的單元格
for cell in j['A1'].expand('table'):
	for b in range(7,12):
		# 設置單元格的邊框線型
		cell.api.Borders(b).LineStyle = 1
		# 設置單元格的邊框粗細
		cell.api.Borders(b).Weight = 2

替換工作簿的行數據

核心代碼

# 遍歷工作表
for j in eorkbook.sheets:
	# 獲取工作表數據
	value = j['A2'].expand('table').value
	#按行遍歷工作表數據
	for index,val in enumerate(value):
		# 判斷行數據是否是這個
		if val == ['背包',16,65]:
			# 是的話替換為新數據
			value[index] = ['雙肩包',36,79]
	#將完成替換的數據寫入工作表中
	j['A2'].expand('table').value = value
workbook.save()

enumerate()是Python的內置函數,用於將一個可遍歷的數據對象(如列表、元組或字符串等)組合為一個索引序列,可同時得到數據對象的索引及對應的值,一般用在for語句當中。該函數的語法格式和常用參數含義如下。

enumerate(sequenxe,[start=0])
# start 是索引的起始位置

如果是修改指定行什麼辦呢?因為列是在行的第幾個單元格中我們可以按如下代碼進行修改

#按行遍歷工作表數據
for index,val in enumerate(value):
	# 修改第三個單元格,即第index行,第 3列,下標是從0開始的
	val[2] = val[2] + 1
	# 替換整行數據
	value[index] = val

提取指定數據

import xlwings as xw
import pandas as pd
app = xw.App(visible = False, add_book = False) 
workbook = app.books.open('采購表.xlsx')  
worksheet = workbook.sheets
data = []
for i in worksheet:
    values = i.range('A1').expand().options(pd.DataFrame).value
    # 一次性提取工作表中所有符合條件的行數據
    filtered = values[values['采購物品'] == '復印紙'] 
    if not filtered.empty: 
        data.append(filtered)
new_workbook = xw.books.add() 
new_worksheet = new_workbook.sheets.add('復印紙') 
new_worksheet.range('A1').value = pd.concat(data, ignore_index = False) 
new_workbook.save('復印紙.xlsx')
workbook.close()
app.quit()

提取列數據

import xlwings as xw
import pandas as pd
app = xw.App(visible = False, add_book = False) 
workbook = app.books.open('采購表.xlsx')
worksheet = workbook.sheets 
column = ['采購日期', '采購金額']
data = []
for i in worksheet:
    values = i.range('A1').expand().options(pd.DataFrame, index = False).value
    filtered = values[column]  
    data.append(filtered)
new_workbook = xw.books.add()  
new_worksheet = new_workbook.sheets.add('提取數據') 
new_worksheet.range('A1').value = pd.concat(data, ignore_index = False).set_index(column[0])
new_workbook.save('提取表.xlsx') 
workbook.close()
app.quit()

追加行數據

import os
import xlwings as xw
newContent = [['雙肩包', '64', '110'], ['腰包', '23', '58']]
app = xw.apps.add()
file_path = '分部信息'  
file_list = os.listdir(file_path)  
for i in file_list:  
    if os.path.splitext(i)[1] == '.xlsx':  
        workbook = app.books.open(file_path + '\\' + i)  
        worksheet = workbook.sheets['產品分類表']
        values = worksheet.range('A1').expand()
        number = values.shape[0]  
        worksheet.range(number + 1, 1).value = newContent  
        workbook.save()
        workbook.close()
app.quit()

提取所有工作表的唯一值

import xlwings as xw
app = xw.App(visible = True, add_book = False)
workbook = app.books.open('上半年銷售統計表.xlsx')
data = []
for i, worksheet in enumerate(workbook.sheets):
    values = worksheet['A2'].expand('down').value
    data = data + values
data = list(set(data))
data.insert(0, '書名')
new_workbook = xw.books.add()
new_worksheet = new_workbook.sheets.add('書名')
new_worksheet['A1'].options(transpose = True).value = data
new_worksheet.autofit()
new_workbook.save('書名.xlsx')
workbook.close()
app.quit()

總結

到此這篇關於如何利用Python批量處理行、列和單元格的文章就介紹到這瞭,更多相關Python批量處理行、列和單元格內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!

推薦閱讀: