Py_对Excel的操作

发布于 2019-10-14  36 次阅读


利用Python对Excel表格实现增删改查等功能

主要使用xlrd 以及xlwt

已经封装好了

import  xdrlib ,sys
import xlrd
import xlwt
import openpyxl
from xlutils.copy import copy
from xlutils.copy import copy as xl_copy

def excel_style(font_height, align_h, align_v, align_wrap=1, align_shri=0, pattern_color=None, borders_set=None):
    font = xlwt.Font()
    font.name = '宋体'
    font.height = font_height
    # 设置单元格对齐方式
    alignment = xlwt.Alignment()
    # 0x01(左端对齐)、0x02(水平方向上居中对齐)、0x03(右端对齐)
    alignment.horz = align_h
    # 0x00(上端对齐)、 0x01(垂直方向上居中对齐)、0x02(底端对齐)
    alignment.vert = align_v
    # 1-自动换行,0-不自动换行
    alignment.wrap = align_wrap
    # 缩小字体填充
    alignment.shri = align_shri

    style = xlwt.XFStyle()
    style.font = font
    style.alignment = alignment

    if borders_set is not None:
        # 设置边框
        borders = xlwt.Borders()
        # 细实线:1,小粗实线:2,细虚线:3,中细虚线:4,大粗实线:5,双线:6,细点虚线:7
        # 大粗虚线:8,细点划线:9,粗点划线:10,细双点划线:11,粗双点划线:12,斜点划线:13
        borders.left = borders_set
        borders.right = borders_set
        borders.top = borders_set
        borders.bottom = borders_set
        borders.left_colour = 8
        borders.right_colour = 8
        borders.top_colour = 8
        borders.bottom_colour = 8
        style.borders = borders

    # 设置背景颜色的模式
    if pattern_color is not None:
        pattern_top = xlwt.Pattern()
        pattern_top.pattern = xlwt.Pattern.SOLID_PATTERN
        pattern_top.pattern_fore_colour = pattern_color
        style.pattern = pattern_top
    return style

#打开excel文件
def open_excel(file):
    try:
        data = xlrd.open_workbook(file)
        return data
    except Exception as e:
        print(str(e))
#获取所在行或者列
def excel_locate( file , by_name , strr  ,key ):
    data = open_excel(file)  # 打开excel文件
    table = data.sheet_by_name(by_name)  # 根据sheet名字来获取excel中的sheet
    row = 0
    col = 0
    cell = table.cell(row, col).value  # 获取cell值
    if key=='row' :
        while cell!= -1 :
            cell = table.cell(row, col).value
            if( str(cell)==strr ) :
                return row , col
            else :
                col+=1
    elif key=='col' :
        while cell!=-1 :
            cell = table.cell(row, col).value
            if( str(cell)==strr ) :
                return row , col
            else :
                row+=1
    return -1 , -1

#获取单元格值
def excel_cell_bycells( file , by_name , row , column ):
    data = open_excel(file) #打开excel文件
    table = data.sheet_by_name(by_name) #根据sheet名字来获取excel中的sheet
    cell = table.cell(row,column).value #获取cell值
    return cell

#获取多单元格值
def excel_cell_bylist(file,by_name,list):
    app = []
    data = open_excel(file) #打开excel文件
    table = data.sheet_by_name(by_name) #根据sheet名字来获取excel中的sheet
    #print( by_name )
    for x in range(len(list)):
        row = list[x][0]
        column = list[x][1]
        #print(row,column )
        cell = table.cell(row,column).value #获取cell值
        app.append(cell)
    return app
#根据名称获取Excel表格中的数据   参数:file:Excel文件路径     colnameindex:表头列名所在行的索引  ,by_name:Sheet1名称
#获取整行
def excel_row_byname(file, by_name, colnameindex):
    data = open_excel(file) #打开excel文件
    table = data.sheet_by_name(by_name) #根据sheet名字来获取excel中的sheet
    colnames = table.row_values(colnameindex) #某一行数据 
    app =[] #装读取结果的序列
    if colnames: #如果行存在
        for i in range(len(colnames)): #读取行的内容
            app.append(colnames[i])
    #获取指定行内容
    #print(app)
    return app

#获取整列
def excel_col_byname( file, by_name, colnameindex ):
    data = open_excel(file) #打开excel文件
    table = data.sheet_by_name(by_name) #根据sheet名字来获取excel中的sheet
    colnames = table.col_values(colnameindex) #某一行数据
    app =[] #装读取结果的序列
    if colnames: #如果列存在
        for i in range(len(colnames)): #读取列的内容
            app.append(colnames[i])
    #获取指定行内容
    return app

def excel_table_byname(file, by_name):
    data = open_excel(file) #打开excel文件
    table = data.sheet_by_name(by_name) #根据sheet名字来获取excel中的sheet
    nrows = table.nrows #行数 
    list =[] #装读取结果的序列
    for rownum in range(0, nrows): #遍历每一行的内容
         row = table.row_values(rownum) #根据行号获取行
         if row: #如果行存在
             app = [] #一行的内容
             for i in range(len(row)): #一列列地读取行的内容
                app.append(row[i])
             list.append(app) #装载数据
    return list

#将list中的内容写入一个新的file文件
def testXlwt_list(file, Sheet, list):
    book = xlwt.Workbook() #创建一个Excel
    sheet1 = book.add_sheet(Sheet) #在其中创建一个名为hello的sheet
    i = 0 #行序号
    for app in list : #遍历list每一行
        j = 0 #列序号
        for x in app : #遍历该行中的每个内容(也就是每一列的)
            sheet1.write(i, j, x) #在新sheet中的第i行第j列写入读取到的x值
            j = j+1 #列号递增
        i = i+1 #行号递增
    book.save(file) #创建保存文件

#指定位置写数据
def testXlwt_cell(file, Sheet, row, column, cell , setplan=None ):
    book   = xlrd.open_workbook(file) #打开一个Excel
    xbook  = copy(book)
    sheet1 = xbook.get_sheet(Sheet) #在其中打开sheet
    sheet1.write( row , column , cell  ) #往sheet里第row行第column列写一个数据
    xbook.save(file) #保存文件
    print("Write cell")

#指定行写数据
def testXlwt_rows( file, Sheet, row, column , list , setplan=None ) :
    # column 是起始列
    book = xlrd.open_workbook(file)  # 打开一个Excel
    xbook = copy(book)
    sheet1 = xbook.get_sheet(Sheet)  # 在其中打开sheet
    for i in range( len(list) ):
        sheet1.write( row , column, list[i] )
        column += 1
    style = excel_style( 10*9 , 0x02, 0x01, borders_set=2 )
    sheet1.write( row, column, -1 , style )
    xbook.save(file)  # 保存文件
    print("Write rows done")
#指定列写数据
def testXlwt_cols( file, Sheet, row, column , list , setplan=None ) :
    # row 是起始行
    book = xlrd.open_workbook(file)  # 打开一个Excel
    xbook = copy(book)
    sheet1 = xbook.get_sheet(Sheet)  # 在其中打开sheet
    for i in range(len(list)):
        sheet1.write( row, column, list[i]  )
        row += 1
    style = excel_style(  10*9 , 0x02, 0x01 , borders_set=2 )
    sheet1.write( row, column, -1 , style )
    xbook.save(file)  # 保存文件
    print("Write cols done")
#新建sheet页指定位置写数据
def testrw(file):
    try:
        book = xlrd.open_workbook(file, formatting_info=True)
        xbook = xl_copy(book)
        table = xbook.add_sheet('2')
        table.write(0,0,'_')
        xbook.save(file)
    except Exception as e:
        print(str(e))

#创建一个新的Excel
def make_newexcel( file_name ) :
    book = xlwt.Workbook()  # 创建一个Excel
    ws = book.add_sheet('1')  # 创建一个工作表
    ws.write( 0 , 0 , '-' )
    book.save( '%s.xls'%file_name )
    print( "Creat %s\n"%file_name )
    return book

#删除特定位置的内容(置空
def excel_dell_bycells( file , by_name , row , column ):
    testXlwt_cell( file , by_name , row , column , "" )
    print("Delete cell over\n")

#删除特定行的内容(置空
def excel_dell_byrows( file , by_name , row , column ):
    data = open_excel(file)  # 打开excel文件
    table = data.sheet_by_name(by_name)  # 根据sheet名字来获取excel中的sheet
    cell = table.cell(row, column).value
    while str(cell)!= '-' :
        testXlwt_cell( file , by_name , row , column , "" )
        column += 1
    print("Delete row over\n")

#删除特定位置的内容(置空
def excel_dell_bycols( file , by_name , row , column ):
    data = open_excel(file)  # 打开excel文件
    table = data.sheet_by_name(by_name)  # 根据sheet名字来获取excel中的sheet
    cell = table.cell(row, column).value
    while str(cell)!= '_' :
        testXlwt_cell( file, by_name, row, column, "" )
        row += 1
    print("Delete col over\n")

#删除指定的sheet
def excel_dell_shells(  file , by_name ):
    book = openpyxl.load_workbook( file ) # 打开一个Excel
    ws = book[ by_name ]
    book.remove( ws )
    book.save( file )
    print( "Delete sheet over\n" )

 

喜欢这篇文章吗,不妨分享给朋友们吧!

科学是第一生产力