py- xlwings


# -*- 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)  # 活動工作簿的活動工作表


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章