一、代码

  1. import xlwings as xw
  2. import pandas as pd
  3.  
  4. xl_path=r'***'
  5. df_path=r'***'
  6.  
  7. df=pd.read_excel(df_path)
  8. app=xw.App(visible=False,add_book=False)
  9.  
  10. #不弹出提示窗
  11. app.display_alerts=False
  12.  
  13. load_wb=app.books.open(xl_path)
  14. load_ws=load_wb.sheets["sheetname"]
  15.  
  16. #清除sheet内的所有数据
  17. load_ws.clear()
  18.  
  19. #将dataframe转成列表写入
  20. load_ws.range('A1').expand('table').value = df.values.tolist()
  21.  
  22. load_wb.save()
  23. load_wb.close()
  24. app.quit()

二、改进封装代码

  1. import xlwings as xw
  2. import pandas as pd
  3. import numpy as np
  4.  
  5. class PathError(BaseException):
  6. def __init__(self, error):
  7. self.error = error
  8.  
  9. class WriteError(BaseException):
  10. def __init__(self, error):
  11. self.error = error
  12.  
  13. # 判断元素是否为数字
  14. def is_number(s):
  15. try:
  16. if np.isnan(s) or s == False or s == True:
  17. return False
  18. except Exception:
  19. pass
  20. try:
  21. # 判断是否为浮点数
  22. float(s)
  23. return True
  24. except Exception:
  25. pass
  26. try:
  27. import unicodedata # 处理ASCii码的包
  28. # 把一个表示数字的字符串转换为浮点数返回的函数
  29. unicodedata.numeric(s)
  30. return True
  31. except (TypeError, ValueError):
  32. pass
  33. return False
  34.  
  35. class ExcelMerge(object):
  36. def __init__(self):
  37. self.app = xw.App(visible=False, add_book=False)
  38. self.app.display_alerts = False
  39. self.load_wb = None
  40. self.load_ws = None
  41. self.data_list = []
  42.  
  43. def merge(self, master_path=None, retinue_path=None, sheet=0):
  44. if not master_path or not retinue_path:
  45. raise PathError("文件地址不能为空")
  46.  
  47. self.data_list = self.read_df(master_path)
  48. self.data_list.extend(self.read_df(retinue_path))
  49. self.data_list = pd.DataFrame(self.data_list)
  50. try:
  51. self.load_wb = self.app.books.open(master_path)
  52. self.load_ws = self.load_wb.sheets[sheet]
  53. self.load_ws.range('A2').expand('table').value = self.data_list
  54. except Exception as e:
  55. raise WriteError("excel写入错误:{}".format(e))
  56. finally:
  57. self.load_wb.save()
  58. self.load_wb.close()
  59. self.app.quit()
  60.  
  61. def read_df(self, path):
  62. df = pd.read_excel(path)
  63. col_list = []
  64. # 以下代码是解决纯数字过长导致写入excel后几位变0
  65. for column in df:
  66. for v in df[column]:
  67. if is_number(v):
  68. if len(str(v)) > 12:
  69. col_list.append(column)
  70. break
  71. if col_list:
  72. for c in col_list:
  73. df[c] = df[c].map(lambda x: "'" + str(x) if not pd.isnull(x) else "")
  74.  
  75. return df.values.tolist()
  76.  
  77. em=ExcelMerge()
  78.  
  79. if __name__ == '__main__':
  80. # 合并2个excel,一个主表,一个从表
  81. master_path="****"
  82. retinue_path="****"
  83. 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. 工厂方法配置bean

    1:静态工厂方法配置bean 1):对象 package com.spring.helloworld; public class Car { private String name; private ...

  2. Python基础教程(006)--Python的特点

    前言 了解Python背景,明白Python在目前社会中的标准库是有成千上万的Python爱好者共同维护的. 知识点 Python是完全面相对象的语言 函数,模块,数字,字符串都是对象,在Python ...

  3. 【C#技术】一篇文章搞掂:Infragistics组件库

    工具栏 // 按钮不可按 tool.SharedProps.Enabled = false; Grid // Grid中记录时间 // 建议SQL Server中使用字符字段(没有深入测试,只是字符字 ...

  4. flask中app.py: error: invalid choice: 'insert'........的问题

    在flask中,分为两种操作方式,url指向函数或者终端指向函数,最终目的就是让函数执行,触发方式不同.终端执行更加安全, 另外如果在终端执行的时候出现 : 就是说明 insert 没有在@ mana ...

  5. Linux虚拟机网络连接的三种方式

    Bridge桥接模式.NAT模式.Host-only仅主机模式: 桥接模式:虚拟机使用真实网卡进行通信,配置简单:只要和真实计算机在同一个网段内,就可以直接通信:局域网内如果有其他计算机,也可以进行访 ...

  6. PHP-文件和目录操作

    目录操作 创建目录:mkdir(目录地址, 权限, 是否递归创建 = false); 删除目录:rmdir(目录地址);(仅仅可以删除空目录,不支持递归删除) 移动(改名):rename(旧地址, 新 ...

  7. 微信小程序,获取二维码

    微信小程序,获取二维码 找到一篇很实用的博客,他已经写得很详细了,自己也懒得写,亲测有效 参考网址

  8. Git 设置和取消代理(SOCKS5代理)

    设置代理 git config --global http.proxy 'socks5://127.0.0.1:1080' git config --global https.proxy 'socks ...

  9. promise基础用法

    /** * Created by liyinghao on 2016/11/6. */ const fs = require('fs'); /* * 新建一个Promise对象,Promise就是一个 ...

  10. 部署项目问题(maven打包jar不对应,导致启动时一直找不到某个类)

    项目是springboot+maven  打包用maven的插件package 下面是打包后的目录结构  project-1.0 和project-1.0.tar.gz是一样的  区别就是一个是压缩包 ...