利用win32com处理excle,这样可以不管文件是老的xls还是新的xlsx格式,非常方便。

类的源码如下:

import win32com.client as win32

class easyExcel:

    #初始化读取文件的部分
def __init__(self, filename=None):
self.xlApp = win32.Dispatch('Excel.Application')
self.xlApp.Visible = False
self.xlApp.DisplayAlerts = False
if filename:
self.filename = filename
self.xlBook = self.xlApp.Workbooks.Open(filename)
else:
self.xlBook = self.xlApp.Workbooks.Add()
self.filename = '' #获取sheet的名字,以列表返回
def getSheetsName(self):
sheetList = []
sheetCount = self.xlApp.Worksheets.Count;
print(sheetCount)
for i in range(1,sheetCount+1):
sheetList.append(self.xlBook.Sheets(i).Name)
return sheetList #获取某个sheet的最大行数
def getMaxRows(self, sheet):
sht = self.xlBook.Worksheets(sheet)
return sht.UsedRange.Rows.Count #获取某个sheet的最大列数
def getMaxCols(self, sheet):
sht = self.xlBook.Worksheets(sheet)
return sht.UsedRange.Columns.Count #获取某个sheet的某行某列的数据,行列全是数字,从1开始
def getCell(self, sheet, row, col):
"Get value of one cell"
sht = self.xlBook.Worksheets(sheet)
return sht.Cells(row, col).Value
#修改某个单元格的值
def setCell(self, sheet, row, col, value):
"set value of one cell"
sht = self.xlBook.Worksheets(sheet)
sht.Cells(row, col).Value = value def getRange(self, sheet, row1, col1, row2, col2):
"return a 2d array (i.e. tuple of tuples)"
sht = self.xlBook.Worksheets(sheet)
return sht.Range(sht.Cells(row1, col1), sht.Cells(row2, col2)).Value def setRange(self, sheet, leftCol, topRow, data):
"""insert a 2d array starting at given location.
Works out the size needed for itself""" bottomRow = topRow + len(data) - 1
rightCol = leftCol + len(data[0]) - 1
sht = self.xlBook.Worksheets(sheet)
sht.Range(
sht.Cells(topRow, leftCol),
sht.Cells(bottomRow, rightCol)
).Value = data def getContiguousRange(self, sheet, row, col):
"""Tracks down and across from top left cell until it
encounters blank cells; returns the non-blank range.
Looks at first row and column; blanks at bottom or right
are OK and return None witin the array""" sht = self.xlBook.Worksheets(sheet) # find the bottom row
bottom = row
while sht.Cells(bottom + 1, col).Value not in [None, '']:
bottom = bottom + 1 # right column
right = col
while sht.Cells(row, right + 1).Value not in [None, '']:
right = right + 1 return sht.Range(sht.Cells(row, col), sht.Cells(bottom, right)).Value #删除某行 或者删除第几行到第几行 1 '1:3' or 'A:C'
def deleteRows(self, sheet, row_num):
sht = self.xlBook.Worksheets(sheet)
sht.Rows(row_num).Delete() #删除某列 或者删除第几列到第几列 1 '1:3' or 'A:C'
def deleteRows(self, sheet, col_num):
sht = self.xlBook.Worksheets(sheet)
sht.Columns(col_num).Delete() def save(self, newfilename=None):
if newfilename:
self.filename = newfilename
self.xlBook.SaveAs(newfilename)
else:
self.xlBook.Save() def close(self):
self.xlBook.Close(SaveChanges=0)
del self.xlApp

2、使用方法

#从写好的类导入方法
from doExcel import easyExcel #读取excle
excel = easyExcel(r'D:\code\transExcle\testdata\test.xlsx') #获取Sheet1 第9行2列内的数据
print(excel.getCell('Sheet1', 9, 2)) #修改数据
excel.setCell('Sheet1',9,2,"newdata") #保存文件
excel.save(r'D:\code\transExcle\testdata\out.xlsx') #关闭文件
excel.close()

其他方法请自行看源码(第一段代码)可以完美的处理excle的数据

python win32com 处理excle 写一个公共的类的更多相关文章

  1. 表单配置项写法,表单写成JSON数组套对象,一行是一个数组单位,一列是一个对象单位,然后再写一个公共组件读取这个配置,循环加载slot,外层载入slot的自定义部分,比如input select等,这种写法就是把组件嵌套改为配置方式

    表单配置项写法,表单写成JSON数组套对象,一行是一个数组单位,一列是一个对象单位,然后再写一个公共组件读取这个配置,循环加载slot,外层载入slot的自定义部分,比如input select等,这 ...

  2. 用python的time库写一个进度条

    运算符 算数运算 如a=10,b=20 +两个数相加 a+b=30 -两个数相减 a-b=-10 两个数相乘 a****b =200 /两个数相除b/a=2 %取模,并返回余数b%a=0 幂,a*** ...

  3. JavaScript写一个表格排序类

    依稀记得那是上个星期六的下午,我参加了网易暑期实习生招聘笔试.考得相当糟糕,编程题3个题通过了2个,简答题没做对,选择题貌似是20个题猜了6-7个,99%是挂了,唉唉唉!生活不只眼前的苟且,学习的脚步 ...

  4. 手写一个LRU工具类

    LRU概述 LRU算法,即最近最少使用算法.其使用场景非常广泛,像我们日常用的手机的后台应用展示,软件的复制粘贴板等. 本文将基于算法思想手写一个具有LRU算法功能的Java工具类. 结构设计 在插入 ...

  5. python 学习笔记 12 -- 写一个脚本获取城市天气信息

    近期在玩树莓派,前面写过一篇在树莓派上使用1602液晶显示屏,那么可以显示后最重要的就是显示什么的问题了. 最easy想到的就是显示时间啊,CPU利用率啊.IP地址之类的.那么我认为呢,假设可以显示当 ...

  6. 根据python上下文管理,写一个在读文件内容前后自动打开关闭文件的程序

    利用上下文管理实现读f文件前后自动打开关闭文件#在本目录创建f文件,内容写monkey代码如下 import contextlib #导入模块1 @contextlib.contextmanager# ...

  7. python利用scapy模块写一个TCP路由追踪和扫描存活IP的脚本

    前言: 没有前言 0x01 from scapy.all import * import sys from socket import * import os from threading impor ...

  8. 使用Java的多线程和IO流写一个文件复制功能类

    创建一个复制功能类,继承Thread类,重写run()方法,把FileInputStream和FileOutputStream输入输出流写在run()方法内.示例代码如下: import java.i ...

  9. 如何写一个FMDB帮助类?看看runtime吧

    FMDB是一个封装很好的sqllite类库.项目中调用的时候只需要写SQL语句,就能实现数据的CURD.我试过即使手写SQL语句也很麻烦,需要一个字段一个字段的拼上去,而且容易出错.有没有动态获取字段 ...

随机推荐

  1. MySQL基本类型、操作

    MySQL 前言(一些废话,可以不看) 为什么学习数据库呢,大家都知道,为了学习删库跑路,因为数据库在工作中起着至关重要的作用,只会写代码的是码农:学好数据库,基本能混口饭吃:在此基础上再学好操作系统 ...

  2. JAVA基础语法:函数(方法)、类和对象(转载)

    4.JAVA基础语法:函数(方法).类和对象 函数 在java中函数也称为方法,是一段具备某种功能的可重用代码块. 一个函数包括这几部分: 函数头 函数头包括函数访问修饰符,函数返回值类型, 函数名, ...

  3. VIM正则表达式的懒惰模式

    例如有如下一段话: Another whale sighting occurred on , <2004>. AK and HI 要匹配每一个<...>,如果用<.> ...

  4. spring-data-jdbc的基础使用(一)

    前言 很多人知道Mybatis,知道Jpa,但是对spring-data-jdbc可能了解的少之又少.注意我们这里说的是data-jdbc,而不是普通的jdbc.它拥有了类似jpa的一些特性,比如能够 ...

  5. 泛微OA e-cology 数据库接口信息泄露学习

    泛微OA e-cology 数据库接口信息泄露 漏洞信息 攻击者可通过存在漏洞的页面直接获取到数据库配置信息.如果攻击者可直接访问数据库,则可直接获取用户数据,甚至可以直接控制数据库服务器:会将当前连 ...

  6. SQL 练习17

    查询各科成绩最高分.最低分和平均分: 以如下形式显示:课程 ID,课程 name,最高分,最低分,平均分,及格率,中等率,优良率,优秀率 , 及格为>=60,中等为:70-80,优良为:80-9 ...

  7. 【AIOT】智能感知--人

    From: https://liudongdong1.github.io/ 1. 人体存在感知 目标:检测环境中的所有人体,标记出每个人体的坐标位置:不限人体数量,适应中低空斜拍.人体轻度遮挡.截断等 ...

  8. RabbitMQ 安装与配置管理

    rabbitmq安装 1. 安装erlang yum install erlang xmlto 2. 安装rabbitmq rpm包 #wget http://www.rabbitmq.com/rel ...

  9. Ubuntu系统开放指定端口

    今天在一台Ubuntu服务器里面配置了一个Nginx服务,监听的8080端口.本机可以访问,但是局域网就是访问不到.首先怀疑防火墙没有开放8080端口,设置ufw防火墙开放8080端口 $ sudo ...

  10. java多线程的一些面试题

    8.callable与fature Callable与Runnable类似,但是Callable有返回值,并且有一个参数化的类型. Fature保存异步计算的结果.9.执行器 Executor.10. ...