精华内容
下载资源
问答
  • OPENPYXL

    2019-08-29 12:35:44
    from openpyxl import Workbook from openpyxl import load_workbook from openpyxl.utils import get_column_letter from openpyxl.utils.dataframe import dataframe_to_rows from openpyxl.styles import Alignme...

    https://www.jianshu.com/p/b5b36e3bb3ff

    from openpyxl import Workbook
    from openpyxl import load_workbook
    from openpyxl.utils import get_column_letter
    from openpyxl.utils.dataframe import dataframe_to_rows
    from openpyxl.styles import Alignment,Border,Side,Font
    
        wb = Workbook()#建立excel文件
        thin_border = Border(left=Side(style='thin'),
                             right=Side(style='thin'),
                             top=Side(style='thin'),
                             bottom=Side(style='thin'))#创建边框对象
        for file_name in names:#开始循环处理文件夹下所有excel文件
            print (file_name)
            ws = wb.create_sheet(file_name.split('.')[0])#创建工作簿名
            ws.page_setup.orientation = ws.ORIENTATION_LANDSCAPE#页面方向
            ws.page_setup.paperSize = ws.PAPERSIZE_A4#纸张大小
            ws.page_margins.left = 0.25
            ws.page_margins.rigt = 0
            ws.page_margins.top = 0.2
            ws.page_margins.bottom = 0.2
            ws.page_margins.header = 0
            ws.page_margins.footer = 0#设置页边距
            ws.print_title_rows = '1:2'#设置打印标题为2行,每页开始都打印sheet的前两行
    
            #print (dffff.tail())
            rows = dataframe_to_rows(duo(file_name))#pandas的dataframe转openpyxl的格式
            for row in rows:#不知道为啥有空行。openpyxl的序号从1开始。delete_rows()
                if len(row) >2:
                    ws.append(row)
            ws.column_dimensions['A'].width = 3#设置列宽
            ws.column_dimensions['B'].width = 9
            for i in range(3,ws.max_column):#最大列数目,是整数类型
                ws.column_dimensions[get_column_letter(i)].width = 5
            ws.column_dimensions[get_column_letter(ws.max_column)].width = 6
            for i in list(ws.rows)[0]:#生成器转list才能迭代,第一行
                i.alignment = Alignment(wrap_text=True)#设置文本自动换行
            for row in ws.rows:
                for cell in row:
                    cell.border =thin_border#设置边框
    
            ws.insert_rows(1)#插入标题行
            ws.merge_cells(start_row=1, start_column=1, end_row=1, end_column=ws.max_column)#合并标题行
            p_title = file_name.split('.')[0]
            ws['A1'] = p_title
            ws['A1'].alignment = Alignment(horizontal='center')#设置标题居中
            ws['A1'].font = Font(size=20)#设置字号大小
    
        std=wb.get_sheet_by_name('Sheet')
        wb.remove_sheet(std)#删除默认sheet,保存文件
        wb.save('文件名.xlsx')#excel写入所有sheet
    
    
    展开全文
  • openpyxl

    2020-09-14 21:00:47
    pip install openpyxl 表单对象 import openpyxl book = openpyxl.load_workbook('example.xlsx') 获取表单名字 # 方法一 print(book.sheetnames) # 方法二 for sheet in book: print(sheet.title) 新建表 # ...

    基本使用

    安装
    pip install openpyxl
    
    表单对象
    import openpyxl
    
    book = openpyxl.load_workbook('example.xlsx')
    
    # book = openpyxl.Workbook() # 新建book实例
    
    获取表单名字
    # 方法一
    print(book.sheetnames)
    
    # 方法二
    for sheet in book:
    	print(sheet.title)
    
    
    新建表
    # 方式一:插入到最后(default)
    sheet = book.create_sheet('sheet1')
    
    # 方式二:插入到最开始的位置
    sheet = book.create_sheet('sheet1',0)
    
    获取某一表单
    # 方法一
    sheet = book['Sheet1']
    # 方法二
    sheet = book.get_sheet_by_name('Sheet1')
    
    获取活跃表单
    sheet = book.active
    
    获取表单最大行列
    sheet.max_row # 获取最大行数
    sheet.max_column # 获取最大列数
    
    单元格对象
    sheet['A1'] # 获取单元格对象
    sheet['A1'].value # 获取单元格值
    
    sheet['A1'].row # 获取单元格行
    sheet['A1'].column # 获取单元格列
    
    sheet['A1'].coordinate # 获取对象对应的单元格 返回结果 A1
    
    sheet.cell(row=1,column=2)  # 获取第一行第二列单元格
    
    
    
    获取某行,某列
    sheet['B']  # 获取B列,返回元组
    sheet[2]    # 获取第2行,返回元组
    
    行,列切片
    row_range = sheet[2:6]
    col_range = sheet['B:C']
    
    # 访问单元格
    for col in col_range:
    	for cell in col:
    		print(cell.value)
    
    
    
    生成器遍历行列
    # 遍历行
    方法一
    for row in sheet.iter_rows():   # 参数 min_row , max_row , min_col , max_col
    	for cell in row:
    		print(cell.value)
    方法二
    for row in sheet.rows:
    	for cell in row:
    		print(cell.value)
    # 遍历列
    方法一
    for col in sheet.iter_cols():
    	for cell in col:
    		print(cell.value)
    方法二
    for col in sheet.columns:
    	for cell in col:
    		print(cell.value)
    		
    
    单元格切片
    cell_range = sheet['A1:C3']
    
    for row in cell_range:
    	for cell in row:
    		print(cell.coordinate,cell.value)
    
    表单列与数字转换
    import openpyxl
    from openpyxl.utils import get_column_letter,column_index_from_string
    
    print(get_column_letter(2)) # 第二列对应 B
    print(get_column_letter(100)) # 第100列对应 CV
    
    print(column_index_from_string('ABC'))  # ABC 是第731列
    
    新建表单操作
    import openpyxl
    
    book = openpyxl.Workbook()
    book.create_sheet(title='first book',index=0)  # index参数指定表单索引
    sheet = book.active
    print(sheet.title)
    book.save('demo.xlsx')
    
    删除表单
    book.remove(sheet)
    # del book[sheetname]
    
    单元格写入
    sheet['A1'] = 'hello'  # 一个单元格写入内容
    
    sheet.append(range(10)) # 写入一行内容
    
    
    '''写入示例1'''
    data = [
    	['number','batch1','batch2'],
    	[1,10,10],
    	[2,20,20],
    	[3,30,30],
    	[4,40,40]
    ]
    for row in data:
    	sheet.append(row)
    
    '''写入示例2'''
    
    for row in range(1,10):
    	for col in range(1,20):
    		sheet.cell(row=row,column=col,value=get_column_letter(col))
    
    设置字体大小,样式,颜色
    import openpyxl
    from openpyxl import Font,color
    
    
    font1 = Font(name='Times New Roman', size=20, bold=True, color=colors.BLUE)
    
    book = openpyxl.Workbook()
    sheet = book.active
    sheet['B1'] = 'demo'
    sheet['B1'].font = font1
    
    book.save('Font.xlsx')
    
    插入公式
    import openpyxl
    
    book = openpyxl.Worksheet()
    sheet = book.active
    
    sheet['A1'] = 10
    sheet['B1'] = 20
    sheet['C1'] = '=SUM(A1:B1)'
    
    book.save('Formula.xlsx')
    
    设置单元格行高,列宽
    import openpyxl
    
    book = openpyxl.Workbook()
    sheet = book.active
    
    sheet.row_dimensions[1].height = 70  # 设置第1行行高为 70
    sheet.column_dimensions['B'].width = 70 # 设置B列列宽为 70
    
    book.save('dimensions.xlsx')
    
    
    合并单元格
    import openpyxl
    
    book = openpyxl.Worksheet()
    sheet = book.active
    
    sheet.merge_cell('A1:C3')
    sheet['A1'] = '合并单元格'
    
    sheet.save('merge.xlsx')
    
    绘制图表
    import openpyxl
    from openpyxl.chart import PieChart,Reference
    
    book = openpyxl.Workbook()
    sheet = book.active
    sheet.title = 'pieChart'
    
    data = [
    	['Pie','Sold'],
    	['Apple',50],
    	['Cherry',40],
    	['Pumpkin',30]
    ]
    for row in data:
    	sheet.append(row)
    
    pie = PieChart()
    
    labels = Reference(sheet,min_col=1, min_row=2, max_row=5)
    data= Reference(sheet,min_col=2, min_row=2, max_row=5)
    
    pie.add_data(data)                     # 添加数据
    pie.set_categories(labels=labels)     # 设置图表标签
    pie.title = 'Pie sold by category'     # 设置图表标题
    
    sheet.add_chart(pie,'D1')    # 将图表放置到指定位置
    
    book.save('category.xlsx')
    
    展开全文
  • Python_Openpyxl 浅谈(最全总结 足够初次使用)

    万次阅读 多人点赞 2018-08-30 18:49:11
    Python_Openpyxl 1. 安装 pip install openpyxl 2. 打开文件 ① 创建 from openpyxl import Workbook # 实例化 wb = Workbook() # 激活 worksheet ws = wb.active ...

    Python_Openpyxl

    1. 安装

    pip install openpyxl
    

    2. 打开文件

    ① 创建

    from  openpyxl import  Workbook 
    # 实例化
    wb = Workbook()
    # 激活 worksheet
    ws = wb.active
    

    ② 打开已有

    >>> from openpyxl  import load_workbook
    >>> wb2 = load_workbook('文件名称.xlsx')
    

    3. 储存数据

    # 方式一:数据可以直接分配到单元格中(可以输入公式)
    ws['A1'] = 42
    # 方式二:可以附加行,从第一列开始附加(从最下方空白处,最左开始)(可以输入多行)
    ws.append([1, 2, 3])
    # 方式三:Python 类型会被自动转换
    ws['A3'] = datetime.datetime.now().strftime("%Y-%m-%d")
    

    4. 创建表(sheet)

    # 方式一:插入到最后(default)
    >>> ws1 = wb.create_sheet("Mysheet") 
    # 方式二:插入到最开始的位置
    >>> ws2 = wb.create_sheet("Mysheet", 0)
    

    5. 选择表(sheet)

    # sheet 名称可以作为 key 进行索引
    >>> ws3 = wb["New Title"]
    >>> ws4 = wb.get_sheet_by_name("New Title")
    >>> ws is ws3 is ws4
    True
    

    6. 查看表名(sheet)

    # 显示所有表名
    >>> print(wb.sheetnames)
    ['Sheet2', 'New Title',  'Sheet1']
    # 遍历所有表
    >>> for sheet in  wb:
    ... 	print(sheet.title)
    

    7. 访问单元格(call)

    ① 单一单元格访问

    # 方法一
    >>> c = ws['A4']
    # 方法二:row 行;column 列
    >>> d = ws.cell(row=4, column=2, value=10)
    # 方法三:只要访问就创建
    >>> for i in  range(1,101):
    ...         for j in range(1,101):
    ...            ws.cell(row=i, column=j)
    

    ② 多单元格访问

    # 通过切片
    >>> cell_range = ws['A1':'C2']
    # 通过行(列)
    >>> colC = ws['C']
    >>> col_range = ws['C:D']
    >>> row10 = ws[10]
    >>> row_range = ws[5:10]
    # 通过指定范围(行 → 行)
    >>> for row in  ws.iter_rows(min_row=1, max_col=3, max_row=2):
    ...    for cell in  row:
    ...        print(cell)
    <Cell Sheet1.A1>
    <Cell Sheet1.B1>
    <Cell Sheet1.C1>
    <Cell Sheet1.A2>
    <Cell Sheet1.B2>
    <Cell Sheet1.C2> 
    # 通过指定范围(列 → 列)
    >>> for row in  ws.iter_rows(min_row=1, max_col=3, max_row=2):
    ...    for cell in  row:
    ...        print(cell)
    <Cell Sheet1.A1>
    <Cell Sheet1.B1>
    <Cell Sheet1.C1>
    <Cell Sheet1.A2>
    <Cell Sheet1.B2>
    <Cell Sheet1.C2>
    # 遍历所有 方法一
    >>> ws = wb.active
    >>> ws['C9'] = 'hello world'
    >>> tuple(ws.rows)
    ((<Cell Sheet.A1>, <Cell Sheet.B1>, <Cell Sheet.C1>),
    (<Cell Sheet.A2>, <Cell Sheet.B2>, <Cell Sheet.C2>),
    ...
    (<Cell Sheet.A8>, <Cell Sheet.B8>, <Cell Sheet.C8>),
    (<Cell Sheet.A9>, <Cell Sheet.B9>, <Cell Sheet.C9>))
    # 遍历所有 方法二
    >>> tuple(ws.columns)
    ((<Cell Sheet.A1>,
    <Cell Sheet.A2>,
    <Cell Sheet.A3>,
    ...
    <Cell Sheet.B7>,
    <Cell Sheet.B8>,
    <Cell Sheet.B9>),
    (<Cell Sheet.C1>,
    ...
    <Cell Sheet.C8>,
    <Cell Sheet.C9>))
    

    8. 保存数据

    >>> wb.save('文件名称.xlsx')
    

    9. 其他

    ① 改变 sheet 标签按钮颜色

    ws.sheet_properties.tabColor = "1072BA"
    

    ② 获取最大行,最大列

    # 获得最大列和最大行
    print(sheet.max_row)
    print(sheet.max_column)
    

    ③ 获取每一行,每一列

    • sheet.rows为生成器, 里面是每一行的数据,每一行又由一个tuple包裹。
    • sheet.columns类似,不过里面是每个tuple是每一列的单元格。
    # 因为按行,所以返回A1, B1, C1这样的顺序
    for row in sheet.rows:
        for cell in row:
            print(cell.value)
    
    # A1, A2, A3这样的顺序
    for column in sheet.columns:
        for cell in column:
            print(cell.value)
    

    ④ 根据数字得到字母,根据字母得到数字

    from openpyxl.utils import get_column_letter, column_index_from_string
    
    # 根据列的数字返回字母
    print(get_column_letter(2))  # B
    # 根据字母返回列的数字
    print(column_index_from_string('D'))  # 4
    

    ⑤ 删除工作表

    # 方式一
    wb.remove(sheet)
    # 方式二
    del wb[sheet]
    

    ⑥ 矩阵置换(行 → 列)

    rows = [
        ['Number', 'data1', 'data2'],
        [2, 40, 30],
        [3, 40, 25],
        [4, 50, 30],
        [5, 30, 10],
        [6, 25, 5],
        [7, 50, 10]]
    
    list(zip(*rows))
    
    # out
    [('Number', 2, 3, 4, 5, 6, 7),
     ('data1', 40, 40, 50, 30, 25, 50),
     ('data2', 30, 25, 30, 10, 5, 10)]
    
    # 注意 方法会舍弃缺少数据的列(行)
    rows = [
        ['Number', 'data1', 'data2'],
        [2, 40	  ],	# 这里少一个数据
        [3, 40, 25],
        [4, 50, 30],
        [5, 30, 10],
        [6, 25, 5],
        [7, 50, 10],
    ]
    # out
    [('Number', 2, 3, 4, 5, 6, 7), ('data1', 40, 40, 50, 30, 25, 50)]
    

    10. 设置单元格风格

    ① 需要导入的类

    from openpyxl.styles import Font, colors, Alignment
    

    ② 字体

    • 下面的代码指定了等线24号加粗斜体,字体颜色红色。直接使用cell的font属性,将Font对象赋值给它。
    bold_itatic_24_font = Font(name='等线', size=24, italic=True, color=colors.RED, bold=True)
    
    sheet['A1'].font = bold_itatic_24_font
    

    ③ 对齐方式

    • 也是直接使用cell的属性aligment,这里指定垂直居中和水平居中。除了center,还可以使用right、left等等参数。
    # 设置B1中的数据垂直居中和水平居中
    sheet['B1'].alignment = Alignment(horizontal='center', vertical='center')
    

    ④ 设置行高和列宽

    # 第2行行高
    sheet.row_dimensions[2].height = 40
    # C列列宽
    sheet.column_dimensions['C'].width = 30
    

    ⑤ 合并和拆分单元格

    • 所谓合并单元格,即以合并区域的左上角的那个单元格为基准,覆盖其他单元格使之称为一个大的单元格。
    • 相反,拆分单元格后将这个大单元格的值返回到原来的左上角位置。
    # 合并单元格, 往左上角写入数据即可
    sheet.merge_cells('B1:G1') # 合并一行中的几个单元格
    sheet.merge_cells('A1:C3') # 合并一个矩形区域中的单元格
    
    • 合并后只可以往左上角写入数据,也就是区间中:左边的坐标。
    • 如果这些要合并的单元格都有数据,只会保留左上角的数据,其他则丢弃。换句话说若合并前不是在左上角写入数据,合并后单元格中不会有数据。
    • 以下是拆分单元格的代码。拆分后,值回到A1位置。
    sheet.unmerge_cells('A1:C3')
    

    最后举个例子

    import datetime
    from random import choice
    from time import time
    from openpyxl import load_workbook
    from openpyxl.utils import get_column_letter
    
    # 设置文件 mingc
    addr = "openpyxl.xlsx"
    # 打开文件
    wb = load_workbook(addr)
    # 创建一张新表
    ws = wb.create_sheet()
    # 第一行输入
    ws.append(['TIME', 'TITLE', 'A-Z'])
    
    # 输入内容(500行数据)
    for i in range(500):
        TIME = datetime.datetime.now().strftime("%H:%M:%S")
        TITLE = str(time())
        A_Z = get_column_letter(choice(range(1, 50)))
        ws.append([TIME, TITLE, A_Z])
    
    # 获取最大行
    row_max = ws.max_row
    # 获取最大列
    con_max = ws.max_column
    # 把上面写入内容打印在控制台
    for j in ws.rows:	# we.rows 获取每一行数据
        for n in j:
            print(n.value, end="\t")   # n.value 获取单元格的值
        print()
    # 保存,save(必须要写文件名(绝对地址)默认 py 同级目录下,只支持 xlsx 格式)
    wb.save(addr)
    

    这里主要是两位大神博客的整理
    其中一个原地址:https://blog.csdn.net/fanlei_lianjia/article/details/78225857
    另一个很抱歉忘了地址了。。。。(如果有人告诉我我连接,将更正)

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 21,777
精华内容 8,710
关键字:

openpyxl