Python操作EXCEL数据表并将其保存在已经存在的一张模板数据表中

本实例可以实现Python操作Excel数据表,并将其保存在已经存在的一张模板数据表中。

1.利用Python操作Excel数据表需要导入xlrd的文件包,也可以使用Pandas直接读取,本例使用最原始的方法xlrd来实现。

2.将Excel表中的数据写入到另一个已经存在的模板文件中时,需要导入xlutils.copy的文件包,将工作表copy出来之后,再实现对其写入操作。

3.由于xlrd包将Excel文件保存为xlsx文件格式时,打开EXCEL文件时会出现文件被损坏等问题,这是由于xlrd包支持EXCEL 2007版之下的xls文件格式,对于xlsx文件的兼容性并不好。

4.为了解决保存为xlsx文件格式无法打开的问题,引入了pandas包,可以利用pandas读取的xlsx文件格式保存,便解决了无法打开的问题。

5.利用pandas包将读取到的xlsx文件保存时,如果不将index列隐藏,会多出一列Index标识列,可以通过index=false,将其隐去。

import xlrd                                                 
import time
from xlutils.copy import copy
import pandas as pd

workbook=xlrd.open_workbook(r'原始文件路径.xlsx')                #打开文件
myoldMBWorkbook =xlrd.open_workbook(r'标准模版文件路径.xlsx')    #模板文件

# 根据sheet索引(sheet索引从0开始)或者名称获取sheet内容
sheet1 = workbook.sheet_by_index(0)       # 原始文件的第一张表
sheet2 = workbook.sheet_by_index(1)       # 原始文件的第二张表

sheet3 = myoldMBWorkbook.sheet_by_index(0)       # sheet3代表模板表
myMBWorkbook=copy(myoldMBWorkbook)              # copy模板表
myMBsheet=myMBWorkbook.get_sheet(0)            # 模板表

# 按行进行数据的收集与合并
b_cn=sheet1.ncols              # 获取原始文件的第一张表所有的列数
b_rn=sheet1.nrows              # 获取原始文件的第一张表所有的行数

m_rn=sheet3.nrows              # 获取模板表所有的行数

#写入原始文件的第一张表信息
for i in range(b_rn-1):          # 遍历所有的行数
   
         RDB=sheet1.cell_value(i+1, 0)             #获取报警车辆第i行,第1列的数据
         Che_P=sheet1.cell_value(i+1, 1)           #获取报警车辆第i行,第2列的数据
         BaoJMC=sheet1.cell_value(i+1, 8)          #获取报警车辆第i行,第9列的数据
         BaoJDJ=sheet1.cell_value(i+1, 7)          #获取报警车辆第i行,第8列的数据
         BaoJCS = sheet1.cell_value(i + 1, 6)      # 获取报警车辆第i行,第7列的数据
         BaoJSJ=time.strftime("%Y%m%d")            #当前的日期
         KeHDZ = sheet1.cell_value(i + 1, 3)+'-'+sheet1.cell_value(i + 1, 9)+'-'+sheet1.cell_value(i + 1, 2) 
         FuZR= sheet1.cell_value(i + 1, 11)       
   
      #将数据写入到模板当中
         myMBsheet.write(m_rn+i,1,  RDB)
         myMBsheet.write( m_rn+i, 2, Che_P)
         myMBsheet.write(m_rn+i, 4,  BaoJMC)
         myMBsheet.write(m_rn+i, 5,  BaoJDJ)
         myMBsheet.write( m_rn+i, 6,  BaoJSJ)      
         myMBsheet.write(m_rn+i, 7,  BaoJCS)      
         myMBsheet.write( m_rn+i, 9,  KeHDZ)        
        
#  保存
myMBWorkbook.save('原始文件路径-'+ time.strftime("%Y%m%d")+'.xlsx')
df=pd.read_excel('原始文件路径\crm-请求导入模版-'+ time.strftime("%Y%m%d")+'.xlsx')
df.to_excel('原始文件路径\crm-请求导入模版-'+ time.strftime("%Y%m%d")+'.xlsx', index=False)

完整代码如上,亲测有效,如有不同方法的见解欢迎转载评论。

你可能感兴趣的:(Python)