一、代码

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数据的写入的更多相关文章

  1. 将DataFrame数据如何写入到Hive表中

    1.将DataFrame数据如何写入到Hive表中?2.通过那个API实现创建spark临时表?3.如何将DataFrame数据写入hive指定数据表的分区中? 从spark1.2 到spark1.3 ...

  2. spark 将dataframe数据写入Hive分区表

    从spark1.2 到spark1.3,spark SQL中的SchemaRDD变为了DataFrame,DataFrame相对于SchemaRDD有了较大改变,同时提供了更多好用且方便的API.Da ...

  3. 将pandas的DataFrame数据写入MySQL数据库 + sqlalchemy

    将pandas的DataFrame数据写入MySQL数据库 + sqlalchemy import pandas as pd from sqlalchemy import create_engine ...

  4. DataTable数据批量写入数据库三种方法比较

    DataTable数据批量写入数据库三种方法比较 标签: it 分类: C#1)   insert循环插入:2)   sqldataadapter.update(dataset,tablename); ...

  5. 在DataFrame数据表里面提取需要的行

    在DataFrame数据表里面提取需要的行 代码功能: 在DataFrame表格中使用loc(),得到我们想要的行,然后根据某一列元素的值进行排序 此代码中还展示了为DataFrame添加列,即直接n ...

  6. mongo-spark-读取不同的库数据和写入不同的库中

    mongo-spark-读取不同的库数据和写入不同的库中 package com.example.app import com.mongodb.spark.config.{ReadConfig, Wr ...

  7. 批量插入数据, 将DataTable里的数据批量写入数据库的方法

    大量数据导入操作, 也就是直接将DataTable里的内容写入到数据库 通用方法: 拼接Insert语句, 好土鳖 1. MS Sql Server:   使用SqlBulkCopy 2. MySql ...

  8. Python3 Pandas的DataFrame数据的增、删、改、查

    Python3 Pandas的DataFrame数据的增.删.改.查 一.DataFrame数据准备 增.删.改.查的方法有很多很多种,这里只展示出常用的几种. 参数inplace默认为False,只 ...

  9. Pandas DataFrame数据的增、删、改、查

    Pandas DataFrame数据的增.删.改.查 https://blog.csdn.net/zhangchuang601/article/details/79583551 #删除列 df_2 = ...

随机推荐

  1. API登录验证

    客户端 客户端token加在header头中,通过request发送给服务端 服务端 服务端 通过request.META.get(HTTP_TOKEN)拿到客户端传来的token 然后与服务器事先存 ...

  2. Linux系统之-常用命令及技巧

    一. 通用命令:1.date :print or set the system date and time2. stty -a: 可以查看或者打印控制字符(Ctrl-C, Ctrl-D, Ctrl-Z ...

  3. 2019ccpc秦皇岛/Gym102361 D - Decimal 签到

    题意: 给定n,判断1/n是否在十进制下无限循环 题解:判断n的是否包含除2,5以外的因数即可 #include<iostream> #include<cstdio> #inc ...

  4. #pragma hdrstop

    #pragma hdrstop#pragma hdrstop 表示预编译头文件到此为止,后面的头文件不进行预编译.BCB 可以预编译头文件以加快链接的速度,但如果所有头文件都进行预编译又可能占太多磁盘 ...

  5. CJE-Jenkins认证工程师考试预约报名流程

    先决条件 考试费用150美元,需要由master/visr信用卡支付 考试全英文  哈哈哈 考试目的 通过各种渠道能够找到Jenkins的学习资料,并能够完成jenkins的配置管理,还是想全面的系统 ...

  6. VMware 克隆 CenterOS 虚拟机

    前面介绍了VMware 安装CenterOS 6.9,现在再介绍下 VMware 克隆虚拟机,克隆虚拟机可以快速的创建虚拟机,免去重复安装的烦恼. 一.VMware 克隆 CenterOS 虚拟机 选 ...

  7. 简单gui

    import java.awt.Button; import java.awt.Frame; import java.awt.event.WindowAdapter; import java.awt. ...

  8. NTFS文件系统

    一.Volume和Cluster 卷(Volume)和簇(Cluster)是NTFS用来描述物理磁盘的单位. 卷之间是相对独立的,卷的概念其实就是分区(Partition). 簇的引入是为了方便处理不 ...

  9. Rust <7>:数据结构==>链表

    enum List { Cons(u64, Box<List>), NULL, } impl List { fn new() -> List { List::NULL } fn pr ...

  10. Java方法覆盖教程

    重新定义来自超类(父类)继承的类中的实例方法称为方法覆盖. 示例 现在来看看,类A和类B的以下声明,覆盖了 print() 方法 : 1 2 3 4 5 6 7 8 9 10 11 public cl ...