美文网首页
Python 模块:XlsxWriter 的使用

Python 模块:XlsxWriter 的使用

作者: Wonz | 来源:发表于2020-11-27 22:00 被阅读0次

    一、安装 XlsxWriter

    使用命令:

    pip3 install xlsxwriter
    
    image

    二、验证是否安装成功

    新建一个 .py 文件,输入下面代码:

    import xlsxwriter
    
    workbook = xlsxwriter.Workbook('hello.xlsx')
    worksheet = workbook.add_worksheet()
    
    worksheet.write('A1', 'Hello world')
    
    workbook.close()
    

    运行程序,会发现同级目录下生成了一个 hello.xlsx 文件:

    image

    打开 hello.xlsx 文件,发现内容如下,表示安装成功:

    image

    三、创建一个简单的 XLSX 文件

    假设我们有一些月度支出的数据,我们希望将其转换为 Excel XLSX 文件:

    expenses = (
        ['Rent', 1000],
        ['Gas',   100],
        ['Food',  300],
        ['Gym',    50],
    )
    

    下面是代码:

    import xlsxwriter
    
    # Create a workbook and add a worksheet.
    # 创建一个工作簿并添加一张工作表
    workbook = xlsxwriter.Workbook('Expenses01.xlsx')
    worksheet = workbook.add_worksheet()
    
    # Some data we want to write to the worksheet.
    # 想写入工作表的数据
    expenses = (
        ['Rent', 1000],
        ['Gas',   100],
        ['Food',  300],
        ['Gym',    50],
    )
    
    # Start from the first cell. Rows and columns are zero indexed.
    # 从第一个单元格开始,行和列的索引均为 0
    row = 0
    col = 0
    
    # Iterate over the data and write it out row by row.
    # 迭代数据并逐行写入
    for item, cost in (expenses):
        worksheet.write(row, col,     item)
        worksheet.write(row, col + 1, cost)
        row += 1
    
    # Write a total using a formula.
    # 写一个计算出总和的公式
    worksheet.write(row, 0, 'Total')
    worksheet.write(row, 1, '=SUM(B1:B4)')
    
    workbook.close()
    

    运行程序,看到生成了 Expenses01.xlsx 文件,打开看到以下内容:

    image

    四、代码详解

    下面开始详细解释上面的程序代码。

    第一步是导入包:

    import xlsxwriter
    

    使用 Workbook() 创建一个工作簿,参数是工作簿的名字:

    workbook = xlsxwriter.Workbook('Expenses01.xlsx')
    

    注意:XlsxWriter 只能创建文件,不能读取或修改现有的文件。

    然后使用 add_worksheet() 来添加一张工作表:

    worksheet = workbook.add_worksheet()
    

    默认工作表的名称是 Sheet1,Sheet2 等,但是也可以指定名称:

    worksheet1 = workbook.add_worksheet()        # Defaults to Sheet1.
    worksheet2 = workbook.add_worksheet('Data')  # Data.
    worksheet3 = workbook.add_worksheet()        # Defaults to Sheet3.
    

    我们使用工作表对象通过 write() 方法来写入数据:

    worksheet.write(row, col, some_data)
    

    注意:在 XlsxWriter 中,行和列都是零索引。第一个单元格 A1 是 (0, 0)。

    在上述代码中通过迭代将数据写入表中:

    # Iterate over the data and write it out row by row.
    # 迭代数据并逐行写入
    for item, cost in (expenses):
        worksheet.write(row, col,     item)
        worksheet.write(row, col + 1, cost)
        row += 1
    

    添加一个公式来计算第二列中的项目总和:

    worksheet.write(row, 1, '=SUM(B1:B4)')
    

    最后,通过 close() 方法关闭 Excel 文件:

    workbook.close()
    

    现在,就生成了一个 xlsx 文件,可以通过 Excel 和其他电子表格应用读取。

    五、将不同类型的数据写入 XLSX 文件

    上一个程序创建了一个使用 Python 和 XlsxWriter 模块格式化的简单电子表格。

    这次扩展要写的数据,包括一些日期:

    expenses = (
        ['Rent', '2013-01-13', 1000],
        ['Gas',  '2013-01-14',  100],
        ['Food', '2013-01-16',  300],
        ['Gym',  '2013-01-20',   50],
    )
    

    这里的区别是,添加了一个带有格式的日期列,并使该列稍宽以适应日期。

    因此,代码如下:

    from datetime import datetime
    import xlsxwriter
    
    # Create a workbook and add a worksheet.
    workbook = xlsxwriter.Workbook('Expenses03.xlsx')
    worksheet = workbook.add_worksheet()
    
    # Add a bold format to use to highlight cells.
    # 添加用于突出显示单元格的粗体格式
    bold = workbook.add_format({'bold': 1})
    
    # Add a number format for cells with money.
    # 为显式钱的单元格添加数字格式
    money_format = workbook.add_format({'num_format': '$#,##0'})
    
    # Add an Excel date format.
    # 添加 Excel 日期格式
    date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})
    
    # Adjust the column width.
    # 调整列宽
    worksheet.set_column(1, 1, 15)
    
    # Write some data headers.
    worksheet.write('A1', 'Item', bold)
    worksheet.write('B1', 'Date', bold)
    worksheet.write('C1', 'Cost', bold)
    
    # Some data we want to write to the worksheet.
    expenses = (
        ['Rent', '2013-01-13', 1000],
        ['Gas',  '2013-01-14',  100],
        ['Food', '2013-01-16',  300],
        ['Gym',  '2013-01-20',   50],
    )
    
    # Start from the first cell below the headers.
    row = 1
    col = 0
    
    for item, date_str, cost in (expenses):
        # Convert the date string into a datetime object.
        date = datetime.strptime(date_str, "%Y-%m-%d")
    
        worksheet.write_string  (row, col,     item              )
        worksheet.write_datetime(row, col + 1, date, date_format )
        worksheet.write_number  (row, col + 2, cost, money_format)
        row += 1
    
    # Write a total using a formula.
    worksheet.write(row, 0, 'Total', bold)
    worksheet.write(row, 2, '=SUM(C2:C5)', money_format)
    
    workbook.close()
    

    这个程序和上一个程序的区别是:为日期添加了一个新的 Format 对象,对数据类型有额外处理。

    Excel 对待不同类型的输入数据,例如字符串和数字,处理通常不同,虽然通常对于用户是透明的。XlsxWriter 视图用 worksheet.write() 方法模拟这一点,通过将 Python 数据类型映射到 Excel 支持的类型上。

    write() 方法作为几个更具体方法的通用别名:

    • write_string()

    • write_number()

    • write_blank()

    • write_formula()

    • write_datetime()

    • write_boolean()

    • write_url()

    在这里的代码中,我们使用了这些方法中的一些来处理不同类型的数据:

    worksheet.write_string  (row, col,     item              )
    worksheet.write_datetime(row, col + 1, date, date_format )
    worksheet.write_number  (row, col + 2, cost, money_format)
    

    这主要是为了展示如果你需要更多的控制你写入工作表中的数据,你可以使用恰当的方法。在这个简单的例子里,write() 方法事实上解决得很好。

    对于程序来说日期处理也是新的 。

    Excel 中的日期和时间是应用了数字格式的浮点数,方便以正确的格式显示它们。如果日期和时间是 Python datetime 对象,那么 XlsxWriter 会自动进行所需的数字转换。但是,我们还需要添加数字格式来确保 Excel 将其显示为日期:

    from datetime import datetime
    ...
    
    date_format = workbook.add_format({'num_format': 'mmmm d yyyy'})
    ...
    
    for item, date_str, cost in (expenses):
        # Convert the date string into a datetime object.
        date = datetime.strptime(date_str, "%Y-%m-%d")
        ...
        worksheet.write_datetime(row, col + 1, date, date_format )
        ...
    

    最后需要 set_column() 来调整 B 列的宽度以便于日期可以清晰地展示:

    # Adjust the column width.
    worksheet.set_column('B:B', 15)
    

    运行程序,看到生成了 Expenses03.xlsx 文件,打开看到以下内容:

    image

    六、参考教程

    Tutorial 1: Create a simple XLSX file — XlsxWriter Documentation

    Tutorial 3: Writing different types of data to the XLSX File — XlsxWriter Documentation

    Python中的模块--XlsxWriter - 简书 (jianshu.com)

    相关文章

      网友评论

          本文标题:Python 模块:XlsxWriter 的使用

          本文链接:https://www.haomeiwen.com/subject/ccpfwktx.html