用python操作excel数据之避坑秘技

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用python操作excel数据之避坑秘技相关的知识,希望对你有一定的参考价值。

用python操作excel表里的数据非常方便,可以把不同报表,不同类型的数据各种乾坤大挪移,汇集到一起进行展示。但初学者可能会遇到一些大坑,百思不得其解,而不得不放弃这个神器。现把我在自学过程中遇到的一些坑与大家分享,给初学者参考,欢迎批评指正!

坑一:用pandas的to_excel写入EXCEL时,会把原数据清空。

解决方案:先用openpyxl的load_workbook打开工作薄,再用pandas的ExcelWriter新建写入器,把之前打开的工作薄赋值给写入器的工作薄。

坑二:把带有公式的sheet1数据导入再写入sheet2时,会发现带公式的数据全部为空。

解决方案:可用win32com.client中的Dispatch把EXCEL表打开再保存。

坑三:当把复制文件,新建文件,打开保存文件,数据写入都写在一个程序时,往往由于EXCEL打开保存时间较长而与后续程序冲突报错。

解决方案:每个环节建模块顺序执行,各环节间用time.sleep隔开。
参考技术A 坑四:目前openpyxl好像不支持写入动态数组,比如FILTER函数。
解决方法:xlwings可能可以,但需要在excel安装xlwings插件(addin)实现UDF功能。xlsxwriter确定可以,实现很简单,但xlsxwriter只能新建写入,不能打开修改。如果你的程序涉及动态数组函数,建议从刚开始就选择好用哪个库来写,免得最后快写完了就因为这个原因重写。

spoon(kettle)连接Access各种踩坑之避坑指南

记录一次spoon连接access数据库的大坑
最初计划使用spoon 8.2 +jdk1.8,发现没有办法连接到odbc,在JDK1.7版本之后都已处理对ODBC的支持
网上查资料很麻烦,需要提取jdk1.7中的文件和dll文件,尝试了,不推荐
 

可行方案
pdi-ce-6.1.0.1-196
jdk1.7.0

在pdi-ce-6.1.0.1-196目录中的Spoon.bat 
第43行添加
set JAVA_HOME=%cd%\\jdk1.7.0
set PATH=%JAVA_HOME%\\bin
set PENTAHO_JAVA_HOME=%JAVA_HOME%
添加完毕后寻找第99行
set PENTAHO_DI_JAVA_OPTIONS="-Xms2048m" "-Xmx1024m" "-XX:MaxPermSize=256m"
修改为
set PENTAHO_DI_JAVA_OPTIONS="-Xms256m" "-Xmx512m" "-XX:MaxPermSize=256m"

set PENTAHO_DI_JAVA_OPTIONS="-Xms512m" "-Xmx1024m" "-XX:MaxPermSize=256m" 这样配置也能启动
这里有个坑假如不修改的话会提示一个弹窗,JDK1.8下不存在
至此你的spoon应该可以正常启动了

配置ODBC,网上教程大把,不赘述

C:\\Windows\\SysWOW64\\odbcad32.exe

记得用这个ODBC工具,否则没法添加access文件

连接数据库
需要使用Generic database
自定义连接URL
输入:
jdbc:odbc:testdb
自定义驱动类名称
输入:
sun.jdbc.odbc.JdbcOdbcDriver

你猜为什么要这么做!

这里有个大坑,假如你用MS access连一开始会提示成功,但是在预览数据的时候会报错“DatabaseMeta is not JNDI, it is ODBC”

你以为到这就结束了吗?NONONO

抽取数据正起劲的时候会提示,超出系统资源

咱一共就5万数据,不至于吧,压缩、修复一套下来;没用!超出系统资源虽迟但到,就算今天不出现明天还是会出现

更换方案

这玩意是神器,下面才是重点

UCanAccess-4.0.4-bin 支持JDK1.8以下

UCanAccess-5.0.1.bin 支持JDK1.8以上

跟下面玩意相比好多了,就这个jar包 CSDN一大群人居然还要这么多分!

Access_JDBC30(已破解).jar

下面介绍具体用法

数据库类型
Generic database
自定义URL链接
jdbc:ucanaccess://D:/temp/Manage.mdb 
自定义驱动类名称
net.ucanaccess.jdbc.UcanaccessDriver
有密码就写密码

UCanAccess-4.0.4-bin

--ucanaccess-4.0.4.jar

--lib

   -commons-lang-2.6.jar

   -commons-logging-1.1.3.jar

   -hsqldb.jar

   -jackcess-2.1.11.jar

--loader

   -ucanload.jar

以上是下载下来驱动的整体结构

将里面所有jar包,逐个复制到

d:\\spoon6.1\\pdi-ce-6.1.0.1-196\\data-integration\\lib

如果有重复,则替换,一般情况下都是替换即可

至此spoon连接access数据库的问题基本告一段落

注意,任何驱动都不能解决的一个问题问题,两边同时调用一个access数据库,一边存数据一边取数据,可以!但是最新的数据无法被取到;

我尝试了N次,无解。只能设置延迟取数据,一般设置5分钟,我试了3分钟数据都读取不到,假如你不停的读,你会一点数据都读不到。

还有一个办法就是每次将程序完全退出再读取就可以读取到了 

另外,需要驱动可以私信我 

以上是关于用python操作excel数据之避坑秘技的主要内容,如果未能解决你的问题,请参考以下文章

Python 读写操作Excel —— 安装第三方库(xlrdxlwtxlutils)

python 操作MySQL避坑1064

python使用 pywin32 模块操作 excel,Python 操作 excel 系列之五

增删改查下载-避坑指南

用python操作excel

「Python实用秘技03」导出项目的极简环境依赖