用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)