IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 【python往excel写入数据】 -> 正文阅读

[Python知识库]【python往excel写入数据】

python往excel写入数据

这里提供3种python3写入数据到Excel的方式。包含2种单个sheet页的数据覆盖写入方法和1种往已有sheet页的Excel中写入新的sheet页数据的方法,可2选其一即可。

#!/usr/bin/python3
# -*-coding:utf-8-*-
import os
import xlrd
import xlwt
import openpyxl
from xlutils.copy import copy

"""
.. note::
1.整体而言,两种包对小文件的读写速度差别不大,
  而面对较大文件时,xlrd/xlwt读写速度明显优于openpyxl,
  但因为xlwt无法生成xlsx是个硬伤,
  所以想要尽量提高效率又不影响结果时,可以考虑用xlrd读取,用openpyxl写入
2.调用方法时数据仅支持按[]或[[],[],[]...]两种方式,其它格式的数据处理逻辑类似
"""


def write_xls_by_xlwt(trg_path, sheet_name, title, data_list):
    """
        使用xlwt按单元格的方式将数据写入EXCEL文件

        :param trg_path: EXCEL结果文件(eg:"D:\\data\\result.xls")
        :type trg_path: string
        :param sheet_name: EXCEL文件sheet页的名称(eg:"Sheet1" 或 "Sheet2"等等)
        :type sheet_name: string
        :param title: 表头(eg:[] 或 ["序号","用户名","密码"])
        :type title: list
        :param data_list: 数据(eg:["admin","123"] 或 [["admin","123456"],["root","111"]...])
        :type data_list: list

    .. warning::
        仅支持示例中的入参格式,最终保存的EXCEL必须是.xls的,不是能是.xlsx的
        可重复运行,自动覆盖原写入数据
    """
    """新建一个excel对象"""
    wbk = xlwt.Workbook()
    """添加一个sheet页"""
    sheet = wbk.add_sheet(sheet_name)

    """无表头时数据从第一行开始写"""
    start_row = -1
    """无序号时数据从第一列开始写"""
    start_col = -1
    """无序号时不写入序号"""
    row_number = "false"

    """写入sheet页的表头"""
    if len(title) != 0:
        start_row = 0
        if title[0] in ["序号", "行号", "顺序"]:
            row_number = "true"
            start_col = 0

        for col in range(len(title)):
            sheet.write(0, col, title[col])

    """循环按单元格写入sheet的每行数据"""
    for row in range(len(data_list)):
        """为true时为每行数据写入序号"""
        if row_number == "true":
            sheet.write(row + start_row + 1, 0, row + 1)

        for col in range(len(data_list)):
            sheet.write(row + start_row + 1, col + start_col + 1, data_list[row][col])

    """保存excel数据文件"""
    wbk.save(trg_path)


def write_xls_by_xlrd_add_sheet(trg_path, sheet_name, title, data_list):
    """
        使用xlrd往一个已经存在的EXCEL中添加一个sheet页并按单元格的方式循环写入数据

        :param trg_path: EXCEL结果文件(eg:"D:\\data\\result.xls")
        :type trg_path: string
        :param sheet_name: EXCEL文件sheet页的名称(eg:"Sheet1" 或 "Sheet2"等等)
        :type sheet_name: string
        :param title: 表头(eg:[] 或 ["序号","用户名","密码"])
        :type title: list
        :param data_list: 数据(eg:["admin","123"] 或 [["admin","123456"],["root","111"]...])
        :type data_list: list

    .. warning::
        仅支持示例中的入参格式,最终保存的EXCEL必须是.xls的,不是能是.xlsx的
        仅支持sheet_name不存在的情况
        不支持openpyxl方式保存(写入)的.xls文件
    """
    """打开目标EXCEL文件"""
    rb = xlrd.open_workbook(trg_path)
    """复制Excel"""
    wb = copy(rb)
    """添加一个sheet页"""
    sheet = wb.add_sheet(sheet_name)

    """无表头时数据从第一行开始写"""
    start_row = -1
    """无序号时数据从第一列开始写"""
    start_col = -1
    """无序号时不写入序号"""
    row_number = "false"

    """写入sheet页的表头"""
    if len(title) != 0:
        start_row = 0
        if title[0] in ["序号", "行号", "顺序"]:
            row_number = "true"
            start_col = 0

        for col in range(len(title)):
            sheet.write(0, col, title[col])

    """循环按单元格写入sheet的每行数据"""
    for row in range(len(data_list)):
        """为true时为每行数据写入序号"""
        if row_number == "true":
            sheet.write(row + start_row + 1, 0, row + 1)

        for col in range(len(data_list)):
            sheet.write(row + start_row + 1, col + start_col + 1, data_list[row][col])

    """移除原Excel文件--上面有个copy,这里删除被copy的那个"""
    os.remove(trg_path)

    """保存excel数据"""
    wb.save(trg_path)


def write_xlsx_by_openpyxl(trg_path, title, data_list):
    """
        使用openpyxl创建一个新的EXCEL文件并按单元格的方式循环写入数据

        :param trg_path: EXCEL结果文件(eg:"D:\\data\\result.xls")
        :type trg_path: string
        :param title: 表头(eg:[] 或 ["序号","用户名","密码"])
        :type title: list
        :param data_list: 数据(eg:["admin","123"] 或 [["admin","123456"],["root","111"]...])
        :type data_list: list

    .. warning::
        仅支持示例中的入参格式,最终保存的EXCEL可以是是.xlsx/.xls的
    """
    """创建workbook对象"""
    workbook = openpyxl.Workbook()
    """激活worksheet/调用正在运行的表,默认为第一个sheet"""
    sheet1 = workbook.active

    """无表头时数据从第一行开始写"""
    start_row = 0
    """无序号时数据从第一列开始写"""
    start_col = 0
    """无序号时不写入序号"""
    row_number = "false"

    """写入sheet页的表头"""
    if len(title) != 0:
        start_row = 1
        if title[0] in ["序号", "行号", "顺序"]:
            row_number = "true"
            start_col = 1

        for col in range(len(title)):
            sheet1.cell(row=1, column=col + 1, value=title[col])

    """循环按单元格写入sheet的每行数据"""
    for row in range(len(data_list)):
        """为true时为每行数据写入序号"""
        if row_number == "true":
            sheet1.cell(row=row + start_row + 1, column=1, value=row + 1)

        """按单元格循环写入单行数据"""
        for col in range(len(data_list)):
            sheet1.cell(row=row + start_row + 1, column=col + start_col + 1, value=data_list[row][col])

    """保存excel数据"""
    workbook.save(trg_path)


if __name__ == '__main__':
    result_file = "C:\\Users\\result.xls"

    title = ["序号", "姓名", "性别", "年龄"]

    data_list = [
        ["张三", "男", 18],
        ["李四", "男", 20],
        ["王五", "女", 22],
        ["安倍", "妖", 70]
    ]
    
    # xlwt方式写入.xls文件
	# write_xls_by_xlwt(result_file , "Sheet1", title, data_list)

	# xlrd方式往已存在的excel文件中添加sheet页数据
	# write_xls_by_xlrd_add_sheet(result_file , 'Sheet2', title, data_list)
	
	# openpyxl方式写入.xlsx文件
    write_xlsx_by_openpyxl(result_file , title, data_list)
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2021-12-04 13:24:11  更:2021-12-04 13:24:36 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/16 2:34:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码