使用xlwings操作excel大全--最新

xlwings 操作excel

def open(filename=None,visible=False, readonly=False,
password=None,write_password=None):
#filename 文件路径,打开,没有文件名则创建
#visible 打开是否可见
#readonly 是否打开只读
#password 文件读取密码
#write_password 设置文件密码 该方法会启动一个打开excel的进程并打开文档,通过visible来控制这个Excel进程是否可见。返回一个Excel对象。
workbook = open(r"C:\Users\MI\Desktop\工作簿1.xlsx")

def create(title,visible=False):
#创建 title 添加sheet名
#该方法会启动一个打开excel的进程并打开文档,通过visible来控制这个Excel进程是否可 见。返回一个Excel对象。 workbook = create(‘sheet1’)

Excel模块

def save(self, path): # 保存
#path是文件保存路径,如果不上传, 保存至当前文件
workbook .save()

def close(self,save=True):
关闭+默认保存当前
workbook .close()

def sheets(self):
#获取当前excel中所有sheets列表-返回所有sheet的名字 print(workbook .sheets())

def add_sheet(self,sheet_name, location, *, relative=“before”):
#增加sheet,sheet_name 是指新增sheet的名字
#location,指定插入位置的sheet的名称
#relative,插在location的名称的sheet前或后,before/after 在location的sheet前或后插入新的sheet,新增sheet并返回该对象 sheet =
workbook.add_sheet(“sheetxxx”,“sheet4”)

def get_sheet(self,sheetname=None):
#获取当前sheet sheet_name传参则找到对应的名字的sheet,如果不传参,默认当前sheet sheet = workbook.get_sheet()

def remove_sheet(self,sheetname):
#删除sheet
sheet_name传参则删除对应的名字的sheet,如果不传参,默认删除当前sheet
workbook.remove_sheet()

def rename_sheet(self, old_sheet_name, new_sheet_name):
#sheet重命名 old_sheet_name是重命名前的sheet名字 new_sheet_name重命名后的sheet名字
workbook.rename_sheet(‘sheet1’,‘AAA’)

Sheet模块

def read(self,range_num):
#读取数据 # 获取单元格值到列表,range_num是指读取的范围
#读取范围 sheet.read(‘A1:D5’)
#读取单元格 sheet.read(‘D5’)

def write(self,range_num,write_range):
#写入数据 range_num 指的是写入的范围 write_range 指的是写入数据
#单元格写入数据
sheet.write(‘A1’,‘hello world’)
#范围写入数据
sheet.write(‘A1:B2’,[[‘READ’,‘WRITE’],[‘HELLO’,‘WORLD’]])

def copy(self, sheet_name, range_col_row): # 复制 sheet_name
是指复制的sheet名字 range_col_row 复制的范围
#复制单元格 sheet.copy(‘sheet1’,‘A1’)
#复制范围 sheet.copy(‘sheet1’,‘A1:D3’)

def paste(self,sheet_name,range_col_row):
#粘贴 sheet_name 是指的粘贴的sheet名字 range_col_row 粘贴的范围
#粘贴到单元格 sheet.paste(‘sheet1’,‘D2’)
粘贴到范围 sheet.paste(‘sheet1’,‘A2:D2’)

def col_count(self):
#获取当前sheet的总行数
print(sheet.col_count())

def row_count(self): 
 # 获取当前sheet的总列数 
 print(sheet.row_count())

def sort(self, cell_pos):
#排序
#cell_pos 需要排序的单元格当前列
sheet.sort(‘B1’)

def merge_cell(self,range_num):
#合并单元格
range_num 指合并单元格的范围
#合并单元格
sheet.merge_cell(‘A1:A4’)

def insert_rows(self,range_num):
#插入行
#range_num 插入行的位置
#在D前插入一列
sheet.insert(‘D’)
#在第四行前插入一行
sheet.insert(4)

def insert_columns(self,range_num):
#插入列
#range_num 插入的位置,默认在当前位置前插入
sheet.insert_rows(‘A’)

def delete(self,range_cell,insertDirection=None):
#删除 range_cell 删除范围
insertDirection=None
#删除A1单元格
sheet.delete(‘A1’)
#删除范围
sheet.delete(‘A1:D3’)

def remove_duplicate(self,rows, columns):
#删除重复 rows, columns

def add_picture(self, file):
#添加图片 file 添加图片所在路径
#添加图片
sheet.add_picture(r’C:\Users\MI\Desktop\报名信息.png’)

def get_row_height(self,rows):
获取行高 返回查询单元格的rows 当前行高
#获取指定单元格的行高
print(sheet.get_row_height(‘A1’))

def set_row_height(self, colnum, rownum, height):

#设置行高 colnum 列 rownum 行 height 设置的高度
#设置第一行第一列高度为10
sheet.set_row_height(1,1,10)

def get_col_width(self, colnum):
#获取宽度 colnum 列 获取列宽
#获取C1单元格的宽度
print(sheet.get_col_width(‘C1’))

def set_col_width(self, rownum, colnum, width):

#设置宽度 colnum 列 rownum 行 width设置的宽度
#将第二行第二列设置列宽为100
sheet.set_col_width(2,2,100)

def get_formula(self,range_col_row):
#获取指定范围的公式 range_col_row 指定单元格
#获取指定单元格的公式
print(sheet.get_formula(‘C3’))

def set_formula(self,range_col_row,formula):

#设置指定范围的公式 range_col_row 指定单元格 formula
设置公式 比如在A1单元格设置A7单元格数据加上C7单元格数据
sheet.set_formula(‘A1’, ‘=sum(a7+c7)’)

def get_style(self,range_cell):

#获取指定范围的样式 range_cell 指定范围

def set_style(self,range_cell,fontsize,fontcolor,fontname,bgcolor):

#设置指定范围的样式 range_cell 指定范围/单元格 fontsize 字体大小 fontcolor 字体颜色 fontname 字体 bgcolor 背景颜色 设置单元格的字体大小,字体颜色,字体样式和背景颜色 sheet.set_style(‘A1’, 20)
sheet.set_style(‘b1’,22,10)
sheet.set_style(‘b1’,22,10,‘微软雅黑’,‘255,200,255’)

def get_comment(self,text,author):
#获取指定范围的注释
sheet.get_comment('A1','a')
    def set_comment(self,cell,text,author):
 	 # 往指定范围插入注释
cell 指定单元格
text 注释内容
sheet.set_comment('A1','1','AAAA')
def replace_data(self,text,repalcement, match_case=False):

#替换指定内容 text 获取内容 repalcement 替换内容 match_case=False
将表格中的text换为repalcement
sheet.replace_data(5,777777)

    def to_pdf(self,file):
 	# 转化成pdf
file 转成pdf保存的路径
sheet.add_picture('1.jpg')
def activate(self):  # 激活当sheet sheet.activate()
def set_number_format(self,rane_num):

#设置指定范围的数值格式 range_num

代码块

# !/user/bin/python3
# -*- coding:utf-8 -*-
import xlwings as xw
import os
from openpyxl import Workbook
from openpyxl.comments import Comment
import xlrd,xlwt,openpyxl
import re

# 打开,没有文件名则创建
def open(filename=None,visible=False, readonly=False, password=None, write_password=None):
    app = xw.App(visible=True, add_book=False)
    if filename:
        workbook = app.books.open(filename)
    else:
        workbook = app.books.add()
    return workbook


# 创建
def create(title,visible=False):
    app = xw.App(visible=True, add_book=False)
    workbook = app.books.add(title)
    return workbook


#
# def catch(filename):
#     wb = openpyxl.load_workbook(filename)
#     ws = wb.active(filename)
#     return ws


class Excel(object):
    def __init__(self,workbook):
        self.workbook = workbook
        self.filename = None
        self.sheet = None

    # 保存
    def save(self, path):
        if path:
            self.workbook.save(path)
        else:
            self.workbook.save()
        return

    # 关闭+默认保存当前
    def close(self,save=True):
        self.workbook.close(save=True)
        return

    # sheets列表
    def sheets(self):
        sheet_list =[]
        num = len(self.workbook.sheets)
        for i in range(num):
            if i >= 0:
                sht = self.workbook.sheets[i]
                sheet_list.append(sht.name)
                i += 1  # 计数数量自加1
            else:
                pass
        return sheet_list

    # 增加sheet
    def add_sheet(self,sheet_name,location, *, relative="before"):
        if sheet_name:
            self.workbook.sheets.add(sheet_name,location=None,relative="before")
        else:
            self.workbook.sheets.add()
        return

    # 获取sheet
    def get_sheet(self,sheetname=None):
        if sheetname:
            self.sheet = self.workbook.sheets(sheetname)
        else:
            self.sheet = self.workbook.activate
        return self.sheet

    # 删除sheet
    def remove_sheet(self,sheetname):
        self.workbook = self.workbook.sheets[sheetname].delete()
        self.workbook.save()
        return self.workbook

    # sheet重命名
    def rename_sheet(self, old_sheet_name, new_sheet_name):
        self.workbook.sheets[old_sheet_name].name =new_sheet_name
        return self.workbook


class Sheet:
    def __init__(self):
        self.workbook = open(r"C:\Users\MI\Desktop\工作簿1.xlsx")
        self.sheet = self.workbook.sheets[0]
        # print(self.sheet)
        self.cell = None
        self.my_range = None
        self.style = []

    # 读取数据
    def read(self, range_num):
        # 获取单元格值到列表
        value = self.sheet.range(range_num).value
        return value

    # 写入数据
    def write(self,range_num,write_range):
        self.sheet.range(range_num).value = write_range
        return

    # 复制
    def copy(self, sheet_name, range_col_row):
        self.my_range = self.sheet.Range(sheet_name, range_col_row).value
        return self.my_range

    # 粘贴
    def paste(self,sheet_name,range_col_row):
        self.sheet.Range(sheet_name,range_col_row).value = self.my_range
        return

    #粘贴数据
    def paste_range(self,sheet_name,range_col_row):
        self.sheet.Range(sheet_name, range_col_row).value = self.my_range
        return

    # 获取行
    def col_count(self):
        col_value = self.sheet.used_range.last_cell.column
        return col_value

    # 获取列数
    def row_count(self):
        row_value = self.sheet.used_range.last_cell.row
        return row_value

    # 排序
    def sort(self, cell_pos):
        self.sheet.range(cell_pos).api.Sort(Key1=self.sheet.range(cell_pos).api, Order1=1)
        # print(self.sheet.name)
        # data = self.sheet.range(cell_pos).value
        # print(data)
        # key = data.sort()
        # print(key)
        # for i in key:
        #     self.sheet.range(cell_pos).value = i
        # self.sheet.range(cell_pos).api.Sort(key=key,Order=2)
        # data = self.sheet.range(cell_pos).value
        # print(data)
        # print(data)
        return

    # 过滤条件
    def filter(self,col,data):
        # filter_data = self.sheet.range.filter(col,data)
        # filter_data = xw.apps.keys()
        # print(filter_data)
        # return filter_data
        pass

    # 删除过滤条件
    def remove_filter(self):
        pass

    # 对多列进行筛选
    def multi_filter(self):
        pass

    # 宏
    def run_macro(self,name):
        # self.workbook.sheets[0].range('A1').value = 'Hello World!'
        self.workbook.macro(name=name)
        return

    # 合并单元格
    def merge_cell(self,range_num):
        self.sheet = self.sheet.range(range_num).api.merge()
        return self.sheet

    # 插入行
    def insert_rows(self,range_num):
        self.sheet = self.sheet.api.Rows(range_num).Insert()
        return self.sheet

    # 插入列
    def insert_columns(self,range_num):
        self.sheet=self.sheet.api.Columns(range_num).Insert()
        return self.sheet

    # 删除
    def delete(self,range_cell,insertDirection=None):
        self.sheet = self.sheet.range(range_cell).delete()
        return self.sheet

    # 删除重复
    def remove_duplicate(self,rows, columns):
        self.sheet = self.sheet.range(rows, columns).api.RemoveDuplicates()
        return self.sheet

    # 添加图片
    def add_picture(self, file):
        # self.sheet.Range(col, row).append(file)
        self.sheet.pictures.add(os.path.join(os.getcwd(), file))
        return

    # 获取行高
    def get_row_height(self,rows):
        row_height = self.sheet.range(rows).row_height
        return row_height

    # 设置行高
    def set_row_height(self, colnum, rownum, height):
        self.sheet.range(colnum, rownum).row_height = height
        return

    # 获取宽度
    def get_col_width(self, colnum):
        col_width = self.sheet.range(colnum).column_width
        return col_width

    # 设置宽度
    def set_col_width(self, rownum, colnum, width):
        self.sheet.range(rownum, colnum).column_width = width
        return

    # 获取指定范围的公式
    def get_formula(self,range_col_row):
        formula = self.sheet.range(range_col_row).formula
        return formula

    # 设置指定范围的公式
    def set_formula(self,range_col_row,formula):
        self.sheet.range(range_col_row).formula = formula
        return

    # 获取指定范围的样式
    def get_style(self,range_cell):
        self.style.append(self.sheet.range(range_cell).api.Font.Size)
        self.style.append(self.sheet.range(range_cell).api.Font.ColorIndex)
        self.style.append(self.sheet.range(range_cell).api.Font.Name)
        self.style.append(self.sheet.range(range_cell).color)
        return self.style

    # 设置指定范围的样式
    def set_style(self,range_cell,fontsize,fontcolor,fontname,bgcolor):
        # fontsize, fontcolor, fontname, bgcolor
        self.sheet.range(range_cell).api.Font.Size = fontsize
        self.sheet.range(range_cell).api.Font.ColorIndex = fontcolor
        self.sheet.range(range_cell).api.Font.Name = fontname
        self.sheet.range(range_cell).color = bgcolor
        return

    # 获取指定范围的注释
    def get_comment(self,text,author):
        # data = self.sheet.range(cell)
        # data = self.sheet.range(cell).comment()
        data = Comment(text=text,author=author)
        return data

    # 往指定范围插入注释
    def set_comment(self,cell,text,author):
        self.sheet[cell].comment = Comment(text=text,author=author)
        return

    # 替换指定内容
    def replace_data(self,text,repalcement, match_case=False):
        data = self.sheet.range('A1').expand().value
        # print(data)
        for i in range(len(data)):
            for j in range(len(data[i])):
                # print(data[i][j)
                if text == data[i][j]:
                    self.sheet.range(i, j).value = repalcement
                    break
                    # data[i][j]=repalcement
                else:
                    pass

        return


    # 转化成pdf
    def to_pdf(self,file):
        self.workbook.save(file)
        return

    # 激活当前sheet
    def activate(self):
        self.sheet.activate()
        return self.sheet

    # 设置指定范围的数值格式
    def set_number_format(self,range_num):
        self.sheet.range(range_num).api.NumberFormat =self.style
        return

    def column_num(self, letter):
        num = ord('A')
        a = 0
        sum = 0
        for l in letter[::-1]:
            sum += (ord(l) - num) * (26 ** a)
            a += 1
        return sum - 1

# a = open(r"C:\Users\MI\Desktop\工作簿1.xlsx")
# b = Excel(a)
# # b.add_sheet(sheet_name='Shee1') # 增加sheet
# print(b.sheets())
# # print(b.get_sheet())
# # print(b.remove_sheet('Sheet3'))
# print(b.rename_sheet('Sheet3','sheeeet'))
# sheet = b.get_sheet()
f = Sheet()
# f.read('A1')
# print(f.clo(5))
# print(f.col_count())
# print(f.row_count())
# print(f.read('A1:B4'))
# f.write('A1',666)
# f.write('A1:A2',[123,321])
# f.sort('B1')
# f.merge_cell('A1:A4')
# f.insert('D')
# f.insert(4)
# f.insert_rows('A')
# f.add_picture(r'C:\Users\MI\Desktop\报名信息.png','C',6)
# print(f.get_row_height('A1'))
# print(f.get_col_width('C1'))
# print(f.get_formula('C3'))
# f.set_formula('A1', '=sum(a7+c7)')
# f.set_col_width(2,2,100)
# f.set_row_height(1,1,0)
# f.set_style('A1', 20)
# f.set_style('b1',22,10)
# f.set_style('b1',22,10,'微软雅黑','255,200,255')
# f.remove_duplicate(1,'A')
# print(f.get_style('A1'))
# f.add_picture('1.jpg')
# f.to_pdf(r'C:\Users\MI\Desktop\6.pdf')
# print(f.get_comment('A1','a'))
# print(f.set_comment('A1','1','AAAA'))
# f.replace_data(5,777777)
# f.delete('F3')



你可能感兴趣的:(excel,python)