Python xlsxwriter模块写xlsx文件(excel)

关于基本用法,不做多说,很多博客都有,这里给个其它博主基本用法的总结

1)XlsxWriter模块实现Excel操作(上)(下)

2)使用python库xlsxwriter库来输出各种xlsx文件

3)下面是自己试验的一些用法,都在代码里,

#coding=utf-8

def get_excel():
    """
    生成excel
    :return: 
    """
    import xlsxwriter
    workbook = xlsxwriter.Workbook("test.xlsx")
    worksheet = workbook.add_worksheet()
    # 样式
    formats = Struct()  # 字典转化为点语法
    formats.base = {"font_name": u"宋体", "font_size": 11, "align": "center", "valign": "vcenter", "text_wrap": True}
    # formats.condition = dict_merge(formats.base, {"align": "left"})
    formats.bold = {"bold": True}  # 加粗
    formats.row = dict_merge(formats.base, {"border": 1})
    formats.first_row = dict_merge(formats.row, {"bold": True})  # 首行
    formats.more_row = dict_merge(formats.row, {})  # 普通行
    formats.more_row_even = dict_merge(formats.row, {"bg_color": "#dddddd"})  # 普通行-奇数
    # 筛选条件行
    worksheet.merge_range('A1:F1', "")  # 合并单元格
    conditions_list = []  # 条件
    province = '省'
    city = '市'
    county = '地区'
    name = '姓名'
    phone = '电话'
    date = '2018-6'
    if province or city or county:
        area_name = province + city + county
        conditions_list.append(workbook.add_format(formats.bold))
        conditions_list.append(u'地区:')
        conditions_list.append(u'%s  ' % area_name)
    if name:
        conditions_list.append(workbook.add_format(formats.bold))
        conditions_list.append(u'姓名:')
        conditions_list.append(u'%s  ' % name)
    if phone:
        conditions_list.append(workbook.add_format(formats.bold))
        conditions_list.append(u'手机:')
        conditions_list.append(u'%s  ' % phone)
    if date:
        year, month = date[0:4], date[5:7]
        conditions_list.append(workbook.add_format(formats.bold))
        conditions_list.append(u'创建时间:')
        conditions_list.append(u'%s/%s  ' % (year, month))
    if conditions_list:  # 如果有条件
        worksheet.write_rich_string('A1', *conditions_list)  # 首行

    # 表格首行
    cols = ["姓名", "电话", "地区"]
    for col_index, col in enumerate(cols):
        worksheet.write(1, col_index, col, workbook.add_format(formats.first_row))  # 第二行,col_index列, col_index从0开始,也就是第一列开始

    data_list = [{"name": "Spencer", "tel": "13888888888", "reg": "中国"},{"name": "Jeff", "tel": "139999999999", "reg": "台湾省"}]
    # 表格其余行
    for row_index, u in enumerate(data_list, start=2): # 因为前两行都被占用了,所以从第三行第一列开始
        # 斑马条
        if row_index % 2 != 0:
            row_format = formats.more_row  # excel格式普通行
        else:
            row_format = dict_merge(formats.more_row_even)  # excel格式奇数行
        
        # 日期格式
        date_format = dict_merge(row_format, {"num_format": "yyyy/mm/dd hh:mm"})
        # 靠左
        left_format = dict_merge(row_format, {"align": "left"}) 

        # 第一个参数:行,第二个参数:列,第三个参数:数据,第四个参数:属性
        worksheet.write(row_index, 0, u['name'], workbook.add_format(row_format))
        worksheet.write(row_index, 1, u['tel'], workbook.add_format(row_format))
        worksheet.write(row_index, 2, u['reg'], workbook.add_format(row_format))

        # 列宽 
        # 第一个参数是第几列开始,第二个人参数是从第几列结束
        # 比如下方第一个就是设置第一列为20,第二个就是设置第二列为10,第三个就是设置3到6列为20
    worksheet.set_column(0, 0, 20)
    worksheet.set_column(1, 1, 10)
    worksheet.set_column(2, 5, 20)
    workbook.close()

def dict_merge(*args):
    """
    功能说明:合并字典
    """
    all = {}
    for arg in args:
        if not isinstance(arg, dict):
            continue
        all.update(arg)
    return all

class Struct(dict):
    """
    - 为字典加上点语法. 例如:
    >>> o = Struct({'a':1})
    >>> o.a
    >>> 1
    >>> o.b
    >>> None
    """

    def __init__(self, dictobj={}):
        self.update(dictobj)

    def __getattr__(self, name):
        # 如果有则返回值,没有则返回None
        if name.startswith('__'):
            raise AttributeError
        return self.get(name)

    def __setattr__(self, name, val):
        self[name] = val

    def __hash__(self):
        return id(self)

if __name__ == '__main__':
    get_excel()

直接运行会在当前文件夹生成一个excel文件,效果图如下:

猜你喜欢

转载自blog.csdn.net/weixin_40475396/article/details/80523678