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 = ...
随机推荐
- python--MySql 表记录的操作
表记录的增删改查 ---插入表记录 全列插入:insert into 表名 values(...) 缺省插入:insert into 表名(列1,...) values(值1,...) -- 插入一条 ...
- pic16f877a的PWM实验学习
遇到的问题,编译时找不到TRISC.一开始以为头文件中没有定义,发现定义了. 所以是自己创建工程的时候,设备类型选错了. #include <pic.h> __CONFIG(0xFF32) ...
- LR之-参数化
1.改变参数化主要在于select next now和update value on这个二个选项 sequential:顺序取值 random:随机取值 unique:唯一取值 same line a ...
- 经典的MySQL Duplicate entry报错注入
SQL注射取数据的方式有多种: 利用union select查询直接在页面上返回数据,这种最为常见,一个前提是攻击者能够构造闭合的查询. Oracle中利用监听UTL_HTTP.request发起的H ...
- leetcode上回溯法的使用
17 93 131 46(全排列) class Solution { public: vector<vector<int>> permute(vector<int> ...
- Portal for ArcGIS启动失败,无法访问任何门户计算机,请联系您的系统管理员。
1.如题,打开Portal门户的时候,发现: 2.检查日志发现Portal for ArcGIS没启动,日志地址:D:\Program Files\ArcGIS\Portal\framework\se ...
- JAVA学习之面向对象
面向对象是相对面向过程而言面向过程:强调的是功能行为面向对象:将功能封装进对象,强调具备了功能的对象 不论面向对象还是面向过程都是一种开发思想而已.举一个例子来理解面向对象和面向过程把大象装进冰箱分三 ...
- composer 手动安装及简单使用 windows
1.配置系统变量 Path 计算机->高级系统设置->环境变量->找到系统变量Path 双击 加入 ;php根目录地址:php中ext地址 如 :“;D:\phpStudy ...
- 11. Django及数据库环境搭建
项目背景 我们做功能测试的时候知道,一个产品基本上都会有增删改查功能,对应接口也就是增删改查接口.做了2年接口自动化测试,觉得最难的点应该是数据的初始化,其实测试一个接口.对接口使用单元测试框架.生成 ...
- 14.Jmeter聚合报告各项含义
Aggregate Report 是 JMeter 常用的一个 Listener,中文为“聚合报告” Label:每个 JMeter 的 element(例如 HTTP Request)都有一个 Na ...