python连接oracle、写入excel、更改excel注意事项记录

前言

这次做的事情是以下这么个流程:

  1. 连接oracle数据库,然后将数据表进行批量选择与视图存储
  2. 从数据库中获得数据,利用pandas增加表头,并写入到excel中作为报表
  3. 合并两个excel的表头和内容

这里记录一下遇到的问题和注意事项。


1、oracle连接报错

首先是python3.6,自动pip install cx_Oracle,instantclient12,提示找不到64位的客户端,可能存在的问题:

  1. cx_Oracle和instantclient的版本不匹配,我是最后cx_Oracle8.0和instantclient11连接成功

  2. instantclient中的oci.dll、ocijdbc11.dll、oraociei11.dll是否放到python/lib/site-packages中

  3. instantclient的系统环境变量设置,可以自行搜索

2、oracle写入到excel

这个我感觉还挺有用的,主要还是利用pandas,而且如果数据量不是很大的话,完全可以替代plsql的导出功能,这里记录一下部分关键代码:

import pandas as pd


out_columns_GBK = ["车辆牌号", "车辆类型", "核定载质量(吨)", "燃料类型", "车辆管理地", "总行程\n(公里)", "载运里程\n(公里)", "货运量\n(吨)", "货物周转量\n(吨公里)"]

cursor.execute(get_str1)
data_result = cursor.fetchall()
#表头字段数和结果的列数保持一致
df = pd.DataFrame(list(data_result), columns=out_columns_GBK)
# excel_name是保存路径
df.to_excel(excel_name)

3、修改excel内容

说是修改,其实还没有可以直接在原来的exce表中修改的方法啦,我是没有找到

原理还是先把源表中的数据读取出来,然后将读取的数据进行修改,修改完毕之后再重新存储到原表中

这里还是给出关键代码:

import cx_Oracle as oc
import pandas as pd
import xlrd
from xlutils.copy import copy


old_wb = xlrd.open_workbook(excel_name)
new_wb = copy(old_wb)
sheet1 = new_wb.get_sheet(0)
# 我这里是在修改i行0列的序号
for i in range(1001):
    if i == 0:
        sheet1.write(i, 0, "序号")
    else:
        sheet1.write(i, 0, str(i))
new_wb.save(excel_name)

4、加表头

因为有几十个表,然后我需要的表头在一个excel表中,要给这几十个表都加上,但是懒得一个一个打开加了,所以开始找有没有合并两个excel的,但是有一个比较难顶的问题是,我的表头里面有合并的单元格,读取起来不是很方便,所以索性还是用xlutils.copy的方法,先copy表头保存到一个workbook(假设为a)中,然后再读取内容表写入到a中,然后再存储,这里给出管家代码:

import xlrd
from xlutils.copy import copy


title_wb = xlrd.open_workbook("表头路径")
content_wb = xlrd.open_workbook(excel_name)
content_sheet = content_wb.sheet_by_name("Sheet1")
new_wb2 = copy(title_wb)
# 只有copy的workbook有get_sheet方法,读取的workbook还是用sheet_by_name吧
sheet2 = new_wb2.get_sheet(0)
# 0~4行是表头的内容
for i in range(5, 1006):
    for j in range(10):
        sheet2.write(i, j, content_sheet.cell(i - 5, j).value)
new_wb2.save(excel_name)

权且记录,可能会有更优的方法,但是先这样吧。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值