xlwt Excel

python有很多模块都是用来操作excel的,比如xlrd,xlwt,pyExcelerator。

pip install xlrd

pip install xlwt

# -*- coding: utf-8 -*-
import xlwt
import xlrd
from xlwt import Font
from xlwt import XFStyle
from xlwt import Alignment

#python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库。
def main():
#     testXlwt()
#     testXlrd()
    testNormal()

def testNormal():
    workbook = xlwt.Workbook()
    worksheet = workbook.add_sheet('My Sheet')
    worksheet.write_merge(0, 0, 0, 3, 'First Merge') # Merges row 0's columns 0 through 3.
    font = xlwt.Font() # Create Font
    font.bold = True
    style = xlwt.XFStyle()
    style.font = font # Add Bold Font to Style
    # write_merge(x, x + h, y, w + y, string, sytle)
    # x表示行,y表示列,w表示跨列个数,h表示跨行个数,string表示要写入的单元格内容,style表示单元格样式。
    # 注意,x,y,w,h,都是以0开始计算的。
    worksheet.write_merge(1, 2, 0, 3, 'Second Merge', style) # Merges row 1 through 2's columns 0 through 3.
    workbook.save('d:/test2.xls')

def testXlwt():
    # 创建一个Workbook对象,这就相当于创建了一个Excel文件
    #Workbook类初始化时有encoding和style_compression参数
    #encoding:设置字符编码,一般要这样设置:w = Workbook(encoding='utf-8'),就可以在excel中输出中文了。默认是ascii。
    #style_compression:表示是否压缩,不常用。
    book = xlwt.Workbook(encoding='utf-8', style_compression=0)
    
    #创建一个sheet对象,一个sheet对象对应Excel文件中的一张表格。
    #在电脑桌面右键新建一个Excel文件,其中就包含sheet1,sheet2,sheet3三张表
    #其中的test是这张表的名字,cell_overwrite_ok,表示是否可以覆盖单元格,其实是Worksheet实例化的一个参数,默认值是False
    sheet = book.add_sheet('test', cell_overwrite_ok=True)
    
    #设置格式
    #设置字体
    font = Font()
    font.name = 'Times New Roman'
    font.bold= True
    font.colour_index = 3
    font.height = 500
    font.underline = True
    font.italic = True # 斜体字
    #设置对齐方式
    align = Alignment()
    align.horz = xlwt.Alignment.HORZ_LEFT
    align.vert = xlwt.Alignment.VERT_CENTER
    #设置背景色颜色    
    pattern = xlwt.Pattern() # Create the Pattern
    pattern.pattern = xlwt.Pattern.SOLID_PATTERN # May be: NO_PATTERN, SOLID_PATTERN, or 0x00 through 0x12
    # May be: 8 through 63. 0 = Black, 1 = White, 2 = Red, 3 = Green, 4 = Blue, 5 = Yellow, 6 = Magenta
    pattern.pattern_fore_colour = 5
    #设置边框
    borders = xlwt.Borders() # Create Borders
    borders.left = xlwt.Borders.DASHED
    #DASHED:虚线      NO_LINE:没有        THIN:实线
    # May be: NO_LINE, THIN, MEDIUM, DASHED, DOTTED, THICK, DOUBLE, HAIR, MEDIUM_DASHED, THIN_DASH_DOTTED, 
    # MEDIUM_DASH_DOTTED, THIN_DASH_DOT_DOTTED, MEDIUM_DASH_DOT_DOTTED, SLANTED_MEDIUM_DASH_DOTTED
    borders.right = xlwt.Borders.DASHED
    borders.top = xlwt.Borders.DASHED
    borders.bottom = xlwt.Borders.DASHED
    borders.left_colour = 0x40
    borders.right_colour = 0x40
    borders.top_colour = 0x40
    borders.bottom_colour = 0x40
    
    style = XFStyle()
    style.font = font
    style.alignment = align
    style.pattern = pattern
    style.borders = borders
    #sheet.row(1).set_style(style)
    
    # 设置单元格宽度
    sheet.col(0).width = 3333
    sheet.col(1).width = 6000

    # 向表test中添加数据
    sheet.write(0, 0, 'EnglishName')  # 其中的'0-行, 0-列'指定表中的单元,'EnglishName'是向该单元写入的内容
    sheet.write(1, 0, 'Marcovaldo')
    sheet.write(2, 0, 'bill')
    txt1 = '中文名字'
    # 此处需要将中文字符串解码成unicode码,否则会报错
    # 不带样式的写入
    sheet.write(0, 1, txt1.encode('utf-8').decode('utf-8'))
    txt2 = '马可瓦多'
    # 带样式的写入
    sheet.write(1, 1, txt2.encode('utf-8').decode('utf-8'), style)   
    sheet.write(2, 1, xlwt.Formula('HYPERLINK("http://www.google.com";"tan"'))
    
    # 最后,将以上操作保存到指定的Excel文件中
    book.save(r'd:\test1.xls')  # 在字符串前加r,声明为raw字符串,这样就不会处理其中的转义了。否则,可能会报错
    
def testXlrd():
    xlsfile = r"d:\test1.xls"# 打开指定路径中的xls文件
    book = xlrd.open_workbook(xlsfile)#得到Excel文件的book对象,实例化对象
    sheet0 = book.sheet_by_index(0) # 通过sheet索引获得sheet对象
    print("1:", sheet0)
    sheet_name = book.sheet_names()[0]# 获得指定索引的sheet表名字
    print("2:", sheet_name)
    # 通过sheet名字来获取,当然如果知道sheet名字就可以直接指定 
    #sheetByName == sheet0
    sheetByName = book.sheet_by_name(sheet_name)
    print("3:", sheetByName)
    nrows = sheetByName.nrows# 获取行总数
    ncols = sheet0.ncols    #获取列总数
    print("4:", nrows, ncols)
    #循环打印每一行的内容
    for i in range(nrows):
        rowContent = sheet0.row_values(i)
        print(rowContent)
    for i in range(ncols):
        closContent = sheet0.col_values(i)
        print(closContent)
    
    # 通过坐标读取表格中的数据
    cell_value1 = sheet0.cell_value(0, 0)
    print(cell_value1)    
    
if __name__ == '__main__':
    main()

 

posted @ 2019-01-09 16:26  牧 天  阅读(368)  评论(0)    收藏  举报