Python之Excel数据相关

news2024/11/28 22:52:42

Excel

Microsoft Excel是Microsoft为使用Windows和Apple Macintosh操作系统的电脑编写的一款电子表格软件。直观的界面、出色的计算功能和图表工具,再加上成功的市场营销,使Excel成为最流行的个人计算机数据处理软件。在1993年,作为Microsoft Office的组件发布了5.0版之后,Excel就开始成为所适用操作平台上的电子制表软件的霸主。

它也为早起Microsoft Office三大办公基本应用(Word、Excel、PowerPoint)之一。

Excel分为两种格式:xls(Excel 97-2003)和xlsx(Excel 2007及以上)

CSV(Comma Separated Values)

它是以逗号为分隔符的纯文本文件,而 Excel 文件是 Microsoft Office 软件生成的一种电子表格文件。

下面表格对比两者区别

扩展名格式编辑功能大小兼容性
xlsx(xls)包含复杂的格式,如图表,公式,宏等可以使用 Microsoft Office 软件进行编辑Excel 文件具有丰富的分析和计算功能较大兼容性取决于使用的软件版本
csv只包含简单的文本和数字可以使用任何文本编辑器,如 Notepad 或 Sublime TextCSV 文件仅提供简单的数据存储功能较小具有较高的兼容性

示例

import os
import csv
import codecs
import openpyxl
from openpyxl.descriptors import NoneSet
from openpyxl.styles import (
    Font,
    Color,
    PatternFill
)
from openpyxl.chart import (
    PieChart,
    Reference
)


class DealExport:

    def __init__(self):
        self.export_path = os.path.join(os.getcwd(), "data")

    def exportFileWithCSV(self, file_name, head, content):
        with open(os.path.join(self.export_path, file_name), mode='w', encoding='utf-8', newline='') as file:
            if file.tell() == 0:
                file.write(codecs.BOM_UTF8.decode("utf-8"))
            writer = csv.writer(file)
            writer.writerow(head)
            for row in content:
                writer.writerow(row)

    def exportFileWithXlsx(self, file_name, head, content):
        # 矩阵置换
        matrix = list(zip(*content))
        # 创建一个新的Excel文件
        workbook = openpyxl.Workbook()
        # 选择默认的活动工作表
        sheet = workbook.active
        # 输出工作表名
        ws = workbook.create_sheet('my_sheet', 0)
        totalRows = len(head)
        totalColumn = len(content)
        # for row in range(1, totalRows + 1):
        # ws.insert_rows(totalRows, totalColumn) # 在第一行插入rows列
        for i in range(0, totalRows):
            # 第 1 行 和 第 i+1 列 设置元素
            ws.cell(1, i + 1, head[i])
            self.setStyle(ws, i)
        for i in range(0, totalColumn):
            # 内容
            row = content[i]
            ws.append(row)
            # ws.row_dimensions[i].fill = PatternFill('lightDown', '00FFFF99', '00FFFF99')
            # ws.row_dimensions[i].height = 25
            # 读取数据表格范围
        rowsLen = ws.max_row
        colsLen = ws.max_column
        # for r in range(1, rows + 1):
        # for c in range(1, cols):
        # title = head[r]
        # sheet[r, c] = title[r]
        # # 设置列宽
        # sheet.column_dimensions[r].width = 20

        # # 创建饼状图
        # pie = PieChart()
        # # 说明 第 1 列 第 1行 至 第 headLen 行
        # labels = Reference(ws, 1, 1, totalRows)
        # # 数据
        # data = Reference(ws, totalColumn, 2, totalRows, 2)
        # pie.add_data(data, True)
        # pie.set_categories(labels)
        # pie.title = "测试饼状图"
        #
        # ws.add_chart(pie, "D1")
        # 保存Excel文件
        workbook.save(os.path.join(self.export_path, file_name))

    def setStyle(self, sheet, index):
        # 设置字体样式
        font = Font('Arial', True, True, Color('00000000'))
        sheet['A1'].font = font
        # 设置单元格背景颜色
        # state = NoneSet(values=(['visible', 'hidden', 'veryHidden', 'show']))
        # 首行
        sheet.cell(1, index + 1).fill = PatternFill('solid', '0000FFFF', '0000FFFF')


if __name__ == '__main__':
    deal = DealExport()
    head = ("对象", "名称", "描述", "类型", "第一年数量", "第二年数量", "第三年数量", "第四年数量")
    content = [["TYPE_A", "This must be subclassed", "demo", "add", 1, 2, 3, 4],
               ["TYPE_B", "Defines the interface for stateless encoders/decoders", "demo", "delete", 2, 3, 4, 5],
               ["TYPE_C",
                "Encodes the object input and returns a tuple" + "\n" + "--" * 30 + "\n" + "Decodes the object input and returns a tuple",
                "demo", "update", 3, 4, 5, 6],
               ["TYPE_D", "Creates an IncrementalEncoder instance.", "demo", "add", 4, 5, 6, 7],
               ["TYPE_E",
                "This subclass of IncrementalEncoder can be used as the baseclass for an incremental encoder if the encoder must keep some of the output in a buffer between calls to encode()",
                "demo", "update", 5, 6, 7, 8]]
    deal.exportFileWithCSV("test.csv", head, content)
    deal.exportFileWithXlsx("test.xlsx", head, content)

输出csv文件结果如下,大小为675字节
在这里插入图片描述
输出xlsx文件结果如下,大小为6KB = 6144字节
在这里插入图片描述

参考

  1. 腾讯云_一文看懂用Python读取Excel数据
  2. CSDN_openpyxl包操作Excel文件

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1172305.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

LabVIEW实现变风量VAV终端干预PID控制

LabVIEW实现变风量VAV终端干预PID控制 变风量(VAV)控制方法的研究一直是VAV空调研究的重点。单端PID控制在温差较大时,系统容易出现过冲。针对空调终端单端PID控制的不足,设计一种干预控制与PID控制耦合的控制方法。项目使用LabV…

专访HuggingFace CTO:开源崛起、创业故事和AI民主化丨智源独家

导读 HuggingFace CTO Julien Chaumond认为,在大模型时代,AI民主化至关重要。随着大语言模型和复杂人工智能系统的崛起,持续提升AI技术的可及性有助于确保这些技术的获取和控制不集中在少数强大实体手中。技术民主化促进了机会均等&#xff0…

vue根据环境变量打包项目

当你的项目分为多个地区的时候,而且每个地区的逻辑稍微有点差异的情况下,不需要每个地区都打包一次,只需要根据环境变量配置一个公共文件即可 1、新建多个环境变量文件 2、新建globelParams.js //globelParams.jsconst taiYuan {NODE_ENV:…

虚拟机vmware使用桥接方式联网设置

步骤:虚拟机设置----》网络适配器---->桥接模式 这样设置好;只是这样设置是无法联网的 现在进入到虚拟机内部----->电机右上角的”网络连接“(wired connection)(没错就是wired connection 虽然是连接WiFi热点但…

【每日一题】移除链表元素(C语言)

移除链表元素,链接奉上 目录 思路:代码实现:链表题目小技巧: 思路: 在正常情况: 下我们移除链表元素时,需要该位置的前结点与后节点, 在特别情况时: 例如 我们发现&…

模版方法模式-定义算法的框架

在生活中,很多事需要通过几个步骤才能完成。例如找工作,一般都包含投递简历、面试、等待结果等几个步骤。投递简历何等待结果这两个步骤大同小异,最大的区别在于面试这个步骤。 在软件开发中,有时也会遇到类似情况。某个方法的实…

.mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复

导言: 随着网络犯罪日益猖狂,勒索病毒已经成为数字时代中的一大威胁。.mkp勒索病毒是其中一种,其已经衍生出了多个不同的变种,其中常见的有.[MyFilewaifu.club].mkp勒索病毒,[hendersoncock.li].mkp勒索病毒,[myersairmail.cc].mk…

炸了!CVPR 2024投稿ID突破18000

点击下方卡片,关注“CVer”公众号 AI/CV重磅干货,第一时间送达 点击进入—>【计算机视觉和Transformer】交流群 扫码加入CVer知识星球,可以最快学习到最新顶会顶刊上的论文idea和CV从入门到精通资料,以及最前沿项目和应用&…

【黑马程序员】Maven 进阶

文章目录 前言一、分模块开发与设计1. 分模块开发意义2. 分模块开发(模块拆分)2.1 创建 Maven 模块2.2 书写模块代码2.3 通过 Maven 指令安装模块到本地仓库(install 指令) 二、依赖管理1. 依赖传递1.1 依赖传递冲突问题 2. 可选依…

RMI初探

接口 import java.rmi.Remote; import java.rmi.RemoteException;public interface IFoo extends Remote {String say(String name) throws RemoteException; }import java.rmi.Remote; import java.rmi.RemoteException;public interface IBar extends Remote {String buy(Str…

【已解决】设置SSH主机:VS Code-正在本地下载 VS Code 服务器

问题描述 很简单,就是我电脑强制重启之后用vscode再去连服务器,发现连不上了 解决办法 如上图,点击重试按钮,下面的这些东西就可以复制粘贴了 ctrf查找commit,这个时候就能找到一串d037ac076cee195194f93ce6fe2bdfe296…

leetcode:387. 字符串中的第一个唯一字符

一、题目 函数原型 int firstUniqChar(char* s) 二、算法 设置一个大小为26的字符数组,位置0 - 25 分别对应字符 a - z 。遍历两次字符串,第一次记录下每个字符出现的次数,第二次检查哪个字符最先遍历到且出现次数为1,返回该字符即…

【CIO人物展】黄淮学院副CIO周鹏:构建数智化平台赋能学校高质量发展

周鹏 本文由黄淮学院副CIO周鹏投递并参与《2023中国数智化转型升级优秀CIO》榜单/奖项评选。丨推荐企业—锐捷网络 大数据产业创新服务媒体 ——聚焦数据 改变商业 黄淮学院是2004年经教育部批准成立的一所省属全日制普通本科高校。学校位于素有“豫州之腹地、天下之最中”之美…

【每日一题】数组中两个数的最大异或值

文章目录 Tag题目来源题目解读解题思路方法一:哈希集合 其他语言python3 写在最后 Tag 【哈希集合】【位运算-异或和】【数组】【2023-11-04】 题目来源 421. 数组中两个数的最大异或值 题目解读 找出数组中两个数的最大异或结果。 解题思路 一看数据量达到了 …

【leetcode】88. 合并两个有序数组(图解)

目录 1. 思路(图解)2. 代码 题目链接:leetcode 88. 合并两个有序数组 题目描述: 1. 思路(图解) 思路一:(不满足题目要求) 1. 创建一个大小为nums1和nums2长度之和的…

做读书笔记时的一个高效小技巧

你好,我是 EarlGrey,一名双语学习者,会一点编程,目前已翻译出版《Python 无师自通》、《Python 并行编程手册》等书籍。 在这里,我会持续和大家分享好书、好工具和高效生活、工作技巧,欢迎大家一起提升认知…

emoji对齐 特殊字符对齐 文本对齐

emoji如何对齐 特殊字符如何对齐 高级文本对齐 问题引出 我们在程序打印输出时,如何我们所输出的字符中包含emoji文本,或者其它特殊的字符文本,则我们的打印对齐效果将出现错位。以下代码复现了这一效果(tips: 马老师…

“第六十天”

SRAM和DRAM: DRAM:动态RAM(随机存期存储器),是使用栅极电容存储信息的; SRAM:静态RAM,是使用双稳态触发器存储信息的。 重点在于DRAM由于要通过电容放电来表示信息,所…

R语言gplots包的颜色索引表--全平台可用

R语言gplots包的颜色索引表–全平台可用

【Liunx系统编程】命令模式3

目录 一,zip/unzip压缩指令 二,tar打包/压缩/解包指令 三,uname获取系统信息指令 四,Liunx下常用且重要的按键和关机指令 五,文件之间的互传 1,Windows与Linux之间的互传 2,Linux系统之间…