xlwings结合dataframe数据的写入
一、代码
import xlwings as xw
import pandas as pd xl_path=r'***'
df_path=r'***' df=pd.read_excel(df_path)
app=xw.App(visible=False,add_book=False) #不弹出提示窗
app.display_alerts=False load_wb=app.books.open(xl_path)
load_ws=load_wb.sheets["sheetname"] #清除sheet内的所有数据
load_ws.clear() #将dataframe转成列表写入
load_ws.range('A1').expand('table').value = df.values.tolist() load_wb.save()
load_wb.close()
app.quit()
二、改进封装代码
import xlwings as xw
import pandas as pd
import numpy as np class PathError(BaseException):
def __init__(self, error):
self.error = error class WriteError(BaseException):
def __init__(self, error):
self.error = error # 判断元素是否为数字
def is_number(s):
try:
if np.isnan(s) or s == False or s == True:
return False
except Exception:
pass
try:
# 判断是否为浮点数
float(s)
return True
except Exception:
pass
try:
import unicodedata # 处理ASCii码的包
# 把一个表示数字的字符串转换为浮点数返回的函数
unicodedata.numeric(s)
return True
except (TypeError, ValueError):
pass
return False class ExcelMerge(object):
def __init__(self):
self.app = xw.App(visible=False, add_book=False)
self.app.display_alerts = False
self.load_wb = None
self.load_ws = None
self.data_list = [] def merge(self, master_path=None, retinue_path=None, sheet=0):
if not master_path or not retinue_path:
raise PathError("文件地址不能为空") self.data_list = self.read_df(master_path)
self.data_list.extend(self.read_df(retinue_path))
self.data_list = pd.DataFrame(self.data_list)
try:
self.load_wb = self.app.books.open(master_path)
self.load_ws = self.load_wb.sheets[sheet]
self.load_ws.range('A2').expand('table').value = self.data_list
except Exception as e:
raise WriteError("excel写入错误:{}".format(e))
finally:
self.load_wb.save()
self.load_wb.close()
self.app.quit() def read_df(self, path):
df = pd.read_excel(path)
col_list = []
# 以下代码是解决纯数字过长导致写入excel后几位变0
for column in df:
for v in df[column]:
if is_number(v):
if len(str(v)) > 12:
col_list.append(column)
break
if col_list:
for c in col_list:
df[c] = df[c].map(lambda x: "'" + str(x) if not pd.isnull(x) else "") return df.values.tolist() em=ExcelMerge() if __name__ == '__main__':
# 合并2个excel,一个主表,一个从表
master_path="****"
retinue_path="****"
em.merge()
xlwings结合dataframe数据的写入的更多相关文章
- 将DataFrame数据如何写入到Hive表中
1.将DataFrame数据如何写入到Hive表中?2.通过那个API实现创建spark临时表?3.如何将DataFrame数据写入hive指定数据表的分区中? 从spark1.2 到spark1.3 ...
- spark 将dataframe数据写入Hive分区表
从spark1.2 到spark1.3,spark SQL中的SchemaRDD变为了DataFrame,DataFrame相对于SchemaRDD有了较大改变,同时提供了更多好用且方便的API.Da ...
- 将pandas的DataFrame数据写入MySQL数据库 + sqlalchemy
将pandas的DataFrame数据写入MySQL数据库 + sqlalchemy import pandas as pd from sqlalchemy import create_engine ...
- DataTable数据批量写入数据库三种方法比较
DataTable数据批量写入数据库三种方法比较 标签: it 分类: C#1) insert循环插入:2) sqldataadapter.update(dataset,tablename); ...
- 在DataFrame数据表里面提取需要的行
在DataFrame数据表里面提取需要的行 代码功能: 在DataFrame表格中使用loc(),得到我们想要的行,然后根据某一列元素的值进行排序 此代码中还展示了为DataFrame添加列,即直接n ...
- mongo-spark-读取不同的库数据和写入不同的库中
mongo-spark-读取不同的库数据和写入不同的库中 package com.example.app import com.mongodb.spark.config.{ReadConfig, Wr ...
- 批量插入数据, 将DataTable里的数据批量写入数据库的方法
大量数据导入操作, 也就是直接将DataTable里的内容写入到数据库 通用方法: 拼接Insert语句, 好土鳖 1. MS Sql Server: 使用SqlBulkCopy 2. MySql ...
- Python3 Pandas的DataFrame数据的增、删、改、查
Python3 Pandas的DataFrame数据的增.删.改.查 一.DataFrame数据准备 增.删.改.查的方法有很多很多种,这里只展示出常用的几种. 参数inplace默认为False,只 ...
- Pandas DataFrame数据的增、删、改、查
Pandas DataFrame数据的增.删.改.查 https://blog.csdn.net/zhangchuang601/article/details/79583551 #删除列 df_2 = ...
随机推荐
- Qt 无法连接mysql数据库的问题
错误信息: QSqlDatabase: QMYSQL driver not loaded QSqlDatabase: available drivers: QSQLITE QMYSQL QMYSQL ...
- QGroundControl编译出错记录
运行时出现错误: /home/myfly2/Downloads/qgroundcontrol/QGroundControl: error : cannot open shared object fil ...
- 为何使用Html5+CSS3
一:大多浏览器支持,低版本也没问题 我看点这方面的资料,是为了做手机应用网站(有三个方案,这个是备用方案),可以开发响应式网站,可以脱离开发平台进行跨平台. 在Html5网页中引入Modernizr, ...
- 尚学linux课程---12、vim操作命令2
尚学linux课程---12.vim操作命令2 一.总结 一句话总结: 要看不同的视频,每个视频的关键点都不一样,不如之间的的视频就没讲到vim中set nu是什么意思 学了的内容一定要练,不然真的是 ...
- 自动化测试之CSS定位
之前做自动化测试一直用RF框架来操作,发现了明显与unittest的灵活性相差一点. 重新温习了unittest框架,其中这个框架,元素定位是难点,以前更多的使用JQUERY方式定位, 发现其实与CS ...
- 在IIS7以上导出所有应用程序池的方法批量域名绑定(网站绑定)
在IIS7+上导出所有应用程序池的方法: %windir%/system32/inetsrv/appcmd list apppool /config /xml > c:/apppools.xml ...
- git push 报错:failed to push some refs to 'git@git.xxxx:devops/thor.git'
error: failed to push some refs to 'git@git.caicaivip.com:devops/thor.git' hint: Updates were reject ...
- django 之模板层
1. 模板语法之变量 格式:{{ 变量名 }} 句点符,深度查询(可以点到方法,不要加括号,只能是无参的方法) 代码 视图函数: from django.shortcuts import render ...
- CFile CStdioFile CArchive 文件操作之异同(详细)
两者的主要区别: 一. CFile类操作文件默认的是Binary模式,CStdioFile类操作文件默认的是Text模式. 在Binary模式下我们必须输入'\r\n',才能起到回车换行的效果, ...
- shell编程2:数组的运用
Shell 数组 定义数组 在Shell中,用括号来表示数组,数组元素用"空格"符号分割开.定义数组的一般形式为: name=(name1 name2 name3) 复制代码 还可 ...