一、需求分析:

  统计的报表中需要每日查询当天数据并追加到原有的excel后面。

  因为原始excel格式已经设定好,如果使用xlwt,仅仅指定设定我们要插入的单元格的格式,原始数据的格式会被初始化。

所以如果能够不改变原格式的前提下完成插入数据,将会省去较多的时间去调整excel格式。

    该随笔实现的功能就是在不改变excel模板的格式下进行写入数据。

二、环境

  python3、windows

三、实现代码

  如果想要实现该功能需要用到python的两个库:xlrd和xlutils。

  xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

# -*- coding: utf-8 -*-
"""
Created on Fri Dec 29 10:29:35 2017
@author: Administrator
"""
import pandas as pd
import pymysql
import datetime
#使用前提导入以下两个库
import xlrd
import xlutils.copy

#用于SQL中限定时间
yestoday = datetime.date.today() - datetime.timedelta(days = 1)
yestoday = yestoday.strftime("%Y-%m-%d")
time_limit = str(yestoday) + ' 23:59:59'

#指定原始excel路径
filepath = 'C:\\Users\\Administrator\\Desktop\\python脚本\\origin_excel.xls' #使用pandas库传入该excel的数值仅仅是为了后续判断插入数据时应插入行是哪行
original_data = pd.read_excel(filepath,encoding='utf-8')

#rb打开该excel,formatting_info=True表示打开excel时并保存原有的格式
rb = xlrd.open_workbook(filepath,formatting_info=True)
#创建一个可写入的副本
wb = xlutils.copy.copy(rb)

#本文重点,该函数中定义:对于没有任何修改的单元格,保持原有格式。
def setOutCell(outSheet, col, row, value):
""" Change cell value without changing formatting. """
def _getOutCell(outSheet, colIndex, rowIndex):
""" HACK: Extract the internal xlwt cell representation. """
row = outSheet._Worksheet__rows.get(rowIndex)
if not row: return None cell = row._Row__cells.get(colIndex)
return cell # HACK to retain cell style.
previousCell = _getOutCell(outSheet, col, row)
# END HACK, PART I outSheet.write(row, col, value) # HACK, PART II
if previousCell:
newCell = _getOutCell(outSheet, col, row)
if newCell:
newCell.xf_idx = previousCell.xf_idx

#定义一个执行SQL的函数,因为数据需要连接数据库查询
def execude_sql(sql):
results = []
db = pymysql.connect('xx','xx','xx','xx',charset='utf8')
cur = db.cursor()
cur.execute(sql)
result = cur.fetchone()
results.append(result[0])
return results sql1_1 = """SELECT COUNT(id) FROM cl_user cu WHERE cu.regist_time <= '"""+ time_limit +"""' AND cu.id IN (SELECT id FROM v_13bmd_regist)"""
sql1_2 = """xxx"""
sql1_3 = """xxx"""

#判断需要写入的行是哪一行
for row in range(0,len(original_data)):
if original_data.iloc[row,0] == yestoday:
print('当前需要修改的行为:' + row)print('正在查询:注册人数……')
regist_white = execude_sql(sql1_1)
regist_nature = execude_sql(sql1_2)
regist_all = execude_sql(sql1_3)
#写入excel数据
outSheet = wb.get_sheet(0)
setOutCell(outSheet,1,row,regist_white[0])
setOutCell(outSheet,2,row,regist_nature[0])
setOutCell(outSheet,3,row,regist_all[0])#保存excel
wb.save('output.xls')
print('finish')

四、参考来源

葡萄皮的数据空间:http://biotopiblog.sinaapp.com

https://stackoverflow.com/questions/3723793/preserving-styles-using-pythons-xlrd-xlwt-and-xlutils-copy

如何使用python在保留原excel格式的前提下插入/修改数据的更多相关文章

  1. Python 操作Excel之通过xlutils实现在保留原格式的情况下追加写入数据

    在Python操作Excel 的模块有 xlrd.xlwt.xlutils等. xlrd:读取Excel文件数据 xlwt:写入Excel 数据,缺点是Excel格式无法复用,为了方便用户,写入的话, ...

  2. java 对excel操作 读取、写入、修改数据;导出数据库数据到excel

    ============前提加入jar包jxl.jar========================= // 从数据库导出数据到excel public List<Xskh> outPu ...

  3. python 全栈开发,Day115(urlencode,批量操作,快速搜索,保留原搜索条件,自定义分页,拆分代码)

    今日内容前戏 静态字段和字段 先来看下面一段代码 class Foo: x = 1 # 类变量.静态字段.静态属性 def __init__(self): y = 6 # 实例变量.字段.对象属性 # ...

  4. (一)python 格式化 excel 格式

    需求: 客户通过 sftp 上传了一个 poc测试的 excel文件, 下到 云桌面 查看,发现一堆格式问题, 怎么办呢? 公司又不允许 吧文件下载到本地处理, 只能在 服务器上进行处理. 一堆的类型 ...

  5. Python使用openpyxl读写excel文件

    Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...

  6. 4、flask之分页插件的使用、添加后保留原url搜索条件、单例模式

    本篇导航: flask实现分页 添加后保留原url搜索条件 单例模式 一.flask实现分页 1.django项目中写过的分页组件 from urllib.parse import urlencode ...

  7. flask之分页插件的使用、添加后保留原url搜索条件、单例模式

    本篇导航: flask实现分页 添加后保留原url搜索条件 单例模式 一.flask实现分页 1.django项目中写过的分页组件 from urllib.parse import urlencode ...

  8. 【转发】Python使用openpyxl读写excel文件

    Python使用openpyxl读写excel文件 这是一个第三方库,可以处理xlsx格式的Excel文件.pip install openpyxl安装.如果使用Aanconda,应该自带了. 读取E ...

  9. python基础 实战作业 ---Excel基本读写与数据处理

    代码地址如下:http://www.demodashi.com/demo/11650.html 看完本篇需要: 10min 作业练习需要: 0.5h~3h(依练习者对python熟悉程度而定) 看完本 ...

随机推荐

  1. day47-python爬虫学习二

    2.Request的会话对象 s = requests.session() Python2 S = requests.Session() 所有一次会话的信息都保存在s中,只需要对s进行操作就可以了. ...

  2. node-express-2-jade

    1,Jade里可以省略尖括号,直接写标签名 2,标签间的嵌套关系用换行加空格来实现 3,紧接在标签名后加上.xx或#xx,就能给标签添加css类名和id,如果不写标签名默认就是div 4,标签属性写入 ...

  3. PHP多进程的实际处理

    多进程应用大批量的数据是非常舒服的一件事情. 处理之前理解两个概念:孤儿进程和僵尸进程 孤儿进程: 是指父进程在fork出子进程后,自己先完了.这个问题很尴尬,因为子进程从此变得无依无靠.无家可归,变 ...

  4. grep用法

    正则表达式只是一种表示法,只要工具支持这种表示法, 那么该工具就可以处理正则表达式的字符串.vim.grep.awk .sed 都支持正则表达式,也正是因为由于它们支持正则,才显得它们强大:在以前上班 ...

  5. 试试Markdown哈

    目录 一级标题 二级标题 三级标题 二级标题? 我擦了? 这什么语法.文字下面加-号,实现二级标题? 看看是几级标题 还真的是二级标题. ...... # 看来四个空格是个,嗯,默认的东西 ??中间是 ...

  6. python基础(数组)

    列表 也叫list 列表 数组 stus = ['明明','莉莉','亮亮'] 新增元素: Append,insert Append 在列表末尾加一个元素 Insert()在指定位置上增加一个元素 删 ...

  7. Blinn-Phong模型

    最近在看基础光照模型,比较感兴趣的是高光反射模型,有下列两种: 1.Phong模型 R = 2*N(dot(N, L)) - L specular = lightColor * SpecularCol ...

  8. 前端特效demo | 一起围观 10 种创意时钟

    时钟动画应用非常广泛,我们经常会看到一些相当个性化的HTML5时钟动画.今天我们向大家分享 10 款形态各异的超时尚时钟动画,其中有圆盘时钟.创意时钟.电子时钟等,希望大家会喜欢. 文内附有时钟效果代 ...

  9. python之django基础

    看了不是同一期的视频,发现9期老师线性引入的方式,讲得django更加易于理解掌握. 抱歉的是,笔记没有整理就发上来了.希望看到的人不要被我带偏. 1. 新建Django项目 命令行创建: djang ...

  10. makefile笔记5 - makefile变量

    在 Makefile 中的定义的变量,就像是 C/C++语言中的宏一样,他代表了一个文本字串,在 Makefile 中执行的时候其会自动原模原样地展开在所使用的地方.其与 C/C++所不同的是,你可以 ...