【PyCharm Community Edition】:excel操作

news/2024/7/21 7:29:02 标签: pycharm, excel, ide

Excel操作

  • 相关模块
    • openpyxl
    • xlrd
    • shutil
  • 实例

相关模块

openpyxl

可以对.xlsx,.xlsm,.xltx,.xltm文件格式操作

  • 打开文件:wb_xlsx = openpyxl.load_workbook(“文件名”)
  • 新建文件:wb_xlsx = openpyxl.Workbook()
  • 新建sheet表:wb_xlsx_sheet = wb_xlsx.create_sheet(title=“表名”)
  • 打开指定sheet表:wb_xlsx_sheet = wb_xlsx.get_sheet_by_name(“表名”)
  • 获取表的最大行号:wb_xlsx_sheet._current_row = wb_xlsx_sheet.max_row + 1#当前行指向最大行号+1
  • 单元格赋值:wb_xlsx_sheet[‘A1’] = “类别” # A1单元格赋值“类别”
  • 行赋值:wb_xlsx_sheet.append((“A”, 1, 2,3))#当前行依次赋值 A 1 2 3
  • 保存文件:wb_xlsx.save(“保存名.xlsx”)

xlrd

可以对.et文件读取,高版本的xlrd 也不支持对et访问,因此需要将其版本回退至2.0一下比如:1.2.0

  • 打开文件:wb_et = xlrd.open_workbook(“文件名完整路径”, ‘r’)
  • 获取sheet数量:wb_et_sheet_len = len(wb_et.sheet_names()) # sheet 数量
  • 打开指定sheet表:wb_et_sheet = wb_et.sheets()[sheet_i] # 获取第一张sheet_i表
  • 获取表的最大行号:wb_et_nrows = wb_et_sheet.nrows # 获取最大行号
  • 读取整行:wb_et_sheet.row_values(row_i)

shutil

shutil 里面有copy函数,用于备份文件

  • 备份文件到指定路径:shutil.copy(文件名,路径)# 备份文件

实例

import datetime
import time
import shutil
import pywps
import openpyxl
import os
import xlrd
import AnalyzerMap_Cfg as map_cfg
import win32com.client

def outputAsExcel(file):
    # 因为公司加密了.xlsx文件,不能读,因此只能新建
    # 1、新建一个excel文件
    # 2、如果.et文件存在则打开,拷贝.et文件所有内容到新的excel中(除Sheet表外)
    # 3、保存新的.xlsx及.et文件

    row_offset = 7
    fileName = "RAM及ROM使用量统计结果"
    fileName_extension = ".et"
    fileName_fullPath= os.getcwd() + '\\' + fileName+fileName_extension
    fileName_is_exist = 0

    # 新建excel文件
    wb_xlsx = openpyxl.Workbook()

    # 如果存在.et文件,则打开 并 拷贝到新建的.xlsx
    if os.path.isfile(fileName_fullPath):
        fileName_is_exist = 1
        # 打开.et文件
        wb_et = xlrd.open_workbook(fileName_fullPath, 'r')
        print(wb_et.sheet_names())  # sheet 名称
        wb_et_sheet_len = len(wb_et.sheet_names())  # sheet 数量
        print(wb_et_sheet_len)

    if 1 == fileName_is_exist:# 如果存在.et文件,则拷贝
        sheet_i = 0
        while sheet_i < wb_et_sheet_len:
            # 逐张sheet表 操作
            if wb_et.sheet_names()[sheet_i] != "Sheet":
                wb_et_sheet = wb_et.sheets()[sheet_i]  # 获取第一张sheet表
                wb_xlsx_sheet = wb_xlsx.create_sheet(title=wb_et.sheet_names()[sheet_i])
                wb_et_nrows = wb_et_sheet.nrows  # 获取最大行号
                # 逐行copy
                row_i = 0
                while row_i < wb_et_nrows:
                    wb_xlsx_sheet.append(wb_et_sheet.row_values(row_i))
                    row_i = row_i + 1
            #
            sheet_i = sheet_i + 1

    if "统计记录" not in wb_xlsx.sheetnames:
        wb_xlsx_sheet = wb_xlsx.create_sheet(title="统计记录")
        wb_xlsx_sheet.append(("类别","总量(Kb)","使用量(Kb)","剩余量(Kb)"))
    else:
        wb_xlsx_sheet = wb_xlsx.get_sheet_by_name("统计记录")
    #写入前准备:查找最大行
    wb_xlsx_sheet._current_row = wb_xlsx_sheet.max_row + 1#指向最大行号+1

    print("最大行号%d"%(wb_xlsx_sheet._current_row))

    wb_xlsx_sheet.cell(wb_xlsx_sheet._current_row, 1).value = file # 将分析的文件存在n行1列

    used_len = round(map_cfg.global_var.totalGlobalROM_A / 1024, 1)
    total_len = round(int(map_cfg.global_var.Global_ROM_A_Info[2], 10), 1)
    wb_xlsx_sheet.append(("Global_ROM", total_len, used_len, (total_len - used_len)))

    used_len = round(map_cfg.global_var.totalLocalRAM / 1024, 1)
    total_len = round(int(map_cfg.global_var.Local_RAM_Info[2], 10), 1)
    wb_xlsx_sheet.append(("Local_RAM", total_len, used_len, (total_len - used_len)))

    used_len = round(map_cfg.global_var.totalLocalRAMSelf / 1024, 1)
    total_len = round(int(map_cfg.global_var.Local_RAM_Self_Info[2], 10), 1)
    wb_xlsx_sheet.append(("Local_RAM_Self", total_len, used_len, (total_len - used_len)))

    used_len = round(map_cfg.global_var.totalGlobalRAM_A / 1024, 1)
    total_len = round(int(map_cfg.global_var.Global_RAM_A_Info[2], 10), 1)
    wb_xlsx_sheet.append(("Global_RAM_A", total_len, used_len, (total_len - used_len)))

    used_len = round(map_cfg.global_var.totalGlobalRAM_B / 1024, 1)
    total_len = round(int(map_cfg.global_var.Global_RAM_B_Info[2], 10), 1)
    wb_xlsx_sheet.append(("Global_RAM_B", total_len, used_len, (total_len - used_len)))

    wb_xlsx.save(fileName+".xlsx")
    wb_xlsx.save(fileName+".et")

    return


http://www.niftyadmin.cn/n/5054542.html

相关文章

【全】差分模板

文章目录 一维差分二维差分 一维差分 #include using namespace std; const int N 1e5 10; int s[N], a[N]; void insert(int l, int r, int x){ a[l] x; a[r 1] - x; } int main(){ int n, m; cin >> n >> m; for (int i 1; i < n; i ){cin >>…

最好用的Boost.Asio:现代C++网络编程

引言 网络编程是现代软件开发中无可替代的一环&#xff0c;无论是构建庞大的分布式系统还是小型的桌面应用&#xff0c;都离不开网络的支持。Boost.Asio作为一款专为C设计的网络库&#xff0c;以其优越的性能和灵活的设计赢得了开发者的广泛认可。 目录 引言 1.1 Boost.Asio概…

浙大MEM/杭电MEM/浙工大MEM/浙财大MEM的选择……

浙江地区工程管理硕士(MEM)的考生在选择项目时一般会比较纠结两个问题&#xff1a;是考浙大还是其它学校&#xff1b;不考浙大的话&#xff0c;其它学校哪个容易上岸。针对这两个问题&#xff0c;立足浙江专注联考的杭州达立易考教育简单帮大家做个思路的梳理。 首先很明确的一…

Vue3最佳实践 第五章 Vue 组件应用 3( Slots )

5.4 Slots 我们已经了解到组件能够接收任意类型的 JavaScript 值作为 props&#xff0c;但组件要如何接收模板内容呢&#xff1f;在某些场景中&#xff0c;我们可能想要为子组件传递一些模板片段&#xff0c;让子组件在它们的组件中渲染这些片段。Slots 可用于将Html内容从父组…

xorm数据库操作之Join、Union

golang的数据库操作xorm使用起来非常方便&#xff0c;不用再自己写SQl语句&#xff0c;而且xorm自己给我们做了SQL防注入等操作&#xff0c;用起来既方便又安全。此次文章我不会记录xorm的基本操作&#xff0c;我值记录一些特殊用法问题&#xff0c;包括动态创建表单、基于xorm…

.Net 锁的介绍

在.NET中,有多种锁机制可用于多线程编程,用来确保线程安全和共享资源的同步。以下是.NET中常见的锁机制: 1. **Monitor(互斥锁):** `Monitor` 是.NET中最基本的锁机制之一。它使用 `lock` 关键字实现,可以确保在同一时刻只有一个线程能够访问被锁定的代码块。`Monitor`…

TS编译器选项​——指定编译后文件所在目录

compilerOptions是TS的编译器选项&#xff0c;主要在tsconfig.json文件中用于对ts编译为js文件时进行配置 "compilerOptions" : { 配置项 } 在tsconfig.json中编写如下代码&#xff1a; {// compilerOptions 编译器选项"compilerOptions": {// outDir 用于…

网络安全——黑客——自学

想自学网络安全&#xff08;黑客技术&#xff09;首先你得了解什么是网络安全&#xff01;什么是黑客&#xff01;&#xff01;&#xff01; 网络安全可以基于攻击和防御视角来分类&#xff0c;我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术&#xff0c;而“蓝队…