zoukankan      html  css  js  c++  java
  • openpyxl 操作文件

    pip install openpyxl
    

    写文件

    from openpyxl import Workbook
    wb = Workbook()
    
    # grab the active worksheet
    ws = wb.active
    # or
    # ws = wb.create_sheet("Sheet1", 0)
    # 查看所有的工作簿的名称
    # ws.sheetnames
    
    # 添加标题
    ws.title = "Sheet1"
    
    # Data can be assigned directly to cells
    ws['A1'] = 42
    
    # Rows can also be appended
    ws.append([1, 2, 3])
    
    # 指定行列值
    d = ws.cell(row=5, column=2, value=10)
    
    # 读取
    cell_range = ws['A1':'C2']
    colC = ws['C']
    col_range = ws['C:D']
    row10 = ws[10]
    row_range = ws[5:10]
    
    
    # Python types will automatically be converted
    import datetime
    ws['A2'] = datetime.datetime.now()
    
    # Save the file
    wb.save("sample.xlsx")
    

    读文件

    from openpyxl import load_workbook
    
    ws = load_workbook("document.xlsx")
    
    # 写入函数
    ws["A1"] = "=SUM(1, 1)"
    
    # 设置单元格格式
    
    from openpyxl.cell import WriteOnlyCell
    from openpyxl.comments import Comment
    from openpyxl.styles import Font
    
    cell = WriteOnlyCell(ws, value="hello world")
    cell.font = Font(name='Courier', size=36)
    cell.comment = Comment(text="A comment", author="Author's Name")
    ws.append([cell, 3.14, None])
    
    ws.save("document.xlsx")
    
    

    线型图-2D

    from openpyxl import Workbook
    from openpyxl.chart import BarChart, Series, Reference
    
    wb = Workbook(write_only=True)
    ws = wb.create_sheet()
    
    rows = [
        ('Number', 'Batch 1', 'Batch 2'),
        (2, 10, 30),
        (3, 40, 60),
        (4, 50, 70),
        (5, 20, 10),
        (6, 10, 40),
        (7, 50, 30),
    ]
    
    
    for row in rows:
        ws.append(row)
    
    
    chart1 = BarChart()
    chart1.type = "col"
    chart1.style = 10
    chart1.title = "Bar Chart"
    chart1.y_axis.title = 'Test number'
    chart1.x_axis.title = 'Sample length (mm)'
    
    data = Reference(ws, min_col=2, min_row=1, max_row=7, max_col=3)
    cats = Reference(ws, min_col=1, min_row=2, max_row=7)
    chart1.add_data(data, titles_from_data=True)
    chart1.set_categories(cats)
    chart1.shape = 4
    ws.add_chart(chart1, "A10")
    
    from copy import deepcopy
    
    chart2 = deepcopy(chart1)
    chart2.style = 11
    chart2.type = "bar"
    chart2.title = "Horizontal Bar Chart"
    
    ws.add_chart(chart2, "G10")
    
    
    chart3 = deepcopy(chart1)
    chart3.type = "col"
    chart3.style = 12
    chart3.grouping = "stacked"
    chart3.overlap = 100
    chart3.title = 'Stacked Chart'
    
    ws.add_chart(chart3, "A27")
    
    
    chart4 = deepcopy(chart1)
    chart4.type = "bar"
    chart4.style = 13
    chart4.grouping = "percentStacked"
    chart4.overlap = 100
    chart4.title = 'Percent Stacked Chart'
    
    ws.add_chart(chart4, "G27")
    
    wb.save("bar.xlsx")
    

    线型图-3D

    from openpyxl import Workbook
    from openpyxl.chart import (
        Reference,
        Series,
        BarChart3D,
    )
    
    wb = Workbook()
    ws = wb.active
    
    rows = [
        (None, 2013, 2014),
        ("Apples", 5, 4),
        ("Oranges", 6, 2),
        ("Pears", 8, 3)
    ]
    
    for row in rows:
        ws.append(row)
    
    data = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=4)
    titles = Reference(ws, min_col=1, min_row=2, max_row=4)
    chart = BarChart3D()
    chart.title = "3D Bar Chart"
    chart.add_data(data=data, titles_from_data=True)
    chart.set_categories(titles)
    
    ws.add_chart(chart, "E5")
    wb.save("bar3d.xlsx")
    

    面积图表-2D

    from openpyxl import Workbook
    from openpyxl.chart import (
        AreaChart,
        Reference,
        Series,
    )
    
    wb = Workbook()
    ws = wb.active
    
    rows = [
        ['Number', 'Batch 1', 'Batch 2'],
        [2, 40, 30],
        [3, 40, 25],
        [4, 50, 30],
        [5, 30, 10],
        [6, 25, 5],
        [7, 50, 10],
    ]
    
    for row in rows:
        ws.append(row)
    
    chart = AreaChart()
    chart.title = "Area Chart"
    chart.style = 13
    chart.x_axis.title = 'Test'
    chart.y_axis.title = 'Percentage'
    
    cats = Reference(ws, min_col=1, min_row=1, max_row=7)
    data = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=7)
    chart.add_data(data, titles_from_data=True)
    chart.set_categories(cats)
    
    ws.add_chart(chart, "A10")
    
    wb.save("area.xlsx")
    

    面积图-3D

    from openpyxl import Workbook
    from openpyxl.chart import (
        AreaChart3D,
        Reference,
        Series,
    )
    
    wb = Workbook()
    ws = wb.active
    
    rows = [
        ['Number', 'Batch 1', 'Batch 2'],
        [2, 30, 40],
        [3, 25, 40],
        [4 ,30, 50],
        [5 ,10, 30],
        [6,  5, 25],
        [7 ,10, 50],
    ]
    
    for row in rows:
        ws.append(row)
    
    chart = AreaChart3D()
    chart.title = "Area Chart"
    chart.style = 13
    chart.x_axis.title = 'Test'
    chart.y_axis.title = 'Percentage'
    chart.legend = None
    
    cats = Reference(ws, min_col=1, min_row=1, max_row=7)
    data = Reference(ws, min_col=2, min_row=1, max_col=3, max_row=7)
    chart.add_data(data, titles_from_data=True)
    chart.set_categories(cats)
    
    ws.add_chart(chart, "A10")
    
    wb.save("area3D.xlsx")
    

    点线图-2D

    from datetime import date
    
    from openpyxl import Workbook
    from openpyxl.chart import (
        LineChart,
        Reference,
    )
    from openpyxl.chart.axis import DateAxis
    
    wb = Workbook()
    ws = wb.active
    
    rows = [
        ['Date', 'Batch 1', 'Batch 2', 'Batch 3'],
        [date(2015,9, 1), 40, 30, 25],
        [date(2015,9, 2), 40, 25, 30],
        [date(2015,9, 3), 50, 30, 45],
        [date(2015,9, 4), 30, 25, 40],
        [date(2015,9, 5), 25, 35, 30],
        [date(2015,9, 6), 20, 40, 35],
    ]
    
    for row in rows:
        ws.append(row)
    
    c1 = LineChart()
    c1.title = "Line Chart"
    c1.style = 13
    c1.y_axis.title = 'Size'
    c1.x_axis.title = 'Test Number'
    
    data = Reference(ws, min_col=2, min_row=1, max_col=4, max_row=7)
    c1.add_data(data, titles_from_data=True)
    
    # Style the lines
    s1 = c1.series[0]
    s1.marker.symbol = "triangle"
    s1.marker.graphicalProperties.solidFill = "FF0000" # Marker filling
    s1.marker.graphicalProperties.line.solidFill = "FF0000" # Marker outline
    
    s1.graphicalProperties.line.noFill = True
    
    s2 = c1.series[1]
    s2.graphicalProperties.line.solidFill = "00AAAA"
    s2.graphicalProperties.line.dashStyle = "sysDot"
    s2.graphicalProperties.line.width = 100050 # width in EMUs
    
    s2 = c1.series[2]
    s2.smooth = True # Make the line smooth
    
    ws.add_chart(c1, "A10")
    
    from copy import deepcopy
    stacked = deepcopy(c1)
    stacked.grouping = "stacked"
    stacked.title = "Stacked Line Chart"
    ws.add_chart(stacked, "A27")
    
    percent_stacked = deepcopy(c1)
    percent_stacked.grouping = "percentStacked"
    percent_stacked.title = "Percent Stacked Line Chart"
    ws.add_chart(percent_stacked, "A44")
    
    # Chart with date axis
    c2 = LineChart()
    c2.title = "Date Axis"
    c2.style = 12
    c2.y_axis.title = "Size"
    c2.y_axis.crossAx = 500
    c2.x_axis = DateAxis(crossAx=100)
    c2.x_axis.number_format = 'd-mmm'
    c2.x_axis.majorTimeUnit = "days"
    c2.x_axis.title = "Date"
    
    c2.add_data(data, titles_from_data=True)
    dates = Reference(ws, min_col=1, min_row=2, max_row=7)
    c2.set_categories(dates)
    
    ws.add_chart(c2, "A61")
    
    wb.save("line.xlsx")
    
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 数的统计
    Java实现 蓝桥杯VIP 算法训练 和为T
    Java实现 蓝桥杯VIP 算法训练 友好数
    Java实现 蓝桥杯VIP 算法训练 连续正整数的和
    Java实现 蓝桥杯VIP 算法训练 寂寞的数
    Java实现 蓝桥杯VIP 算法训练 学做菜
    Java实现 蓝桥杯VIP 算法训练 暗恋
    Java实现 蓝桥杯VIP 算法训练 暗恋
    测试鼠标是否在窗口内,以及测试鼠标是否在窗口停留
    RichEdit 各个版本介绍
  • 原文地址:https://www.cnblogs.com/iFanLiwei/p/13227923.html
Copyright © 2011-2022 走看看