欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2024-02-23 17:39:22
...

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')



相关标签: python excel