# -*- coding:utf-8 -*-
import os
import numpy as np
import pandas as pd
from xlwings import Book
class wb(Book): # 繼承
def __init__(self, filename=None, impl=None):
Book.__init__(self, filename, impl)
# super(Book, self).__init__(*args, **kwargs) # 新式類
def my_macro(sht_name):
sht = wb.caller().sheets[sht_name]
# sht.clear_contents() # 保留格式清除 sht.clear
sht.clear() # 全部清除
sht.autofit(axis=None) # 自動調整行高列寬,axis='r'(行), 'c'(列)
print('引用範圍字符串值', sht[1, 1].address) # '$B$2'
sht[2, 5].expand('table').clear_contents()
sht[2, 5].options(expand='table').value = np.ones((5, 5)) # 區域賦值
rng = sht[2, 5].current_region # sht[2,5]所在整個區域,只到遇到空行空列
# print('row:', rng.rows.count, rng.columns.count) # 行列單元格數
print('end:', rng.end('up'), rng.end('down'), rng.end('left'), rng.end('right')) # 相當於鍵盤上操作ctrl + up;down;left;right;注意left,不在區域內
print('last cell:', rng.last_cell.row, rng.last_cell.column) # 右下角最後一格
sht[:, 0].column_width = 0.5 # 列寬
sht[0, :].row_height = 5 # 行高
# formula
# sht[2, 5].offset(rng.rows.count, 0).formula = ('=sum(' + # 單列求和
# sht[2, 5].get_address(False, False) + ':' +
# sht[2, 5].offset(rng.rows.count - 1, 0).get_address(False, False) + ')')
sht[2 + rng.rows.count, 5:5 + rng.columns.count].color = (255, 255, 0) # RGB 背景色
sht[2 + rng.rows.count, 5:5 + rng.columns.count].formula = ('=sum(' +
sht[2, 5].get_address(False, False) + ':' +
sht[2, 5].offset(rng.rows.count - 1, 0).get_address(False, False) + ')')
sht[2 + rng.rows.count, 5:5 + rng.columns.count].number_format = '0.0' # 數字格式
sht[2 + rng.rows.count, 5:5 + rng.columns.count].columns.autofit()
# pd.DataFrame
df = sht[2, 5].options(pd.DataFrame, expand='table', index=False, header=False).value # 將整個區域讀取轉換爲DataFrame
print(df.head(10)
if __name__ == '__main__':
'1. Book'
# wb2 = wb() # 新book
path = r'd:\tr1.xlsx'
wb1 = wb(path)
wb1.app.visible = True # 打開後不可視,可加快一定程度的速度
wb1.app.calculation = 'manual' # 設置手動計算,可選automatic;'semiautomatic;'
wb1.set_mock_caller() # 設置 模擬Book.caller()的excel文件
# print(wb1.sheets, wb1.name, wb1.names, wb1.fullname)
try:
sht_name = 'tr6'
wb1.sheets.add(sht_name, before=None, after=None)
wb1.sheets['tr6'].name = 'tes6'
wb1.sheets['tes6'].delete()
except Exception as e:
print(':::', e)
else:
print(1)
for sht_name in wb1.sheets:
print(type(sht_name), sht_name)
my_macro(sht_name)
wb1.app.calculate() # 計算
wb1.save()
# wb1.close()
# 轉換到當前活動工作簿
# wb = xw.books.active
# # 轉換到當前活動工作表
# sht = xw.sheets.active
# sht = wb.sheets.active # 特定工作簿的工作表
# # # 當前活動 工作表 Range
# # print(xw.Range('B2').value) # 活動工作簿的活動工作表
py- xlwings
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.