python 处理excel表格
导入xlrd模块,pandas模块
此脚本可以对excel进行处理,可以检测合并单元格,垂直水平合并都可以.
此脚本还引入pandas模块,可以对矩阵化的excel进行类似数据库一样的分析处理
# -*- coding: utf-8 -*-
import xlrd
import json
import pandas as pd
from collections import OrderedDict
#默认表格从第二行第二列开始
class Excel_to_json(object):
def __init__(self,filename):
self.__workbook=xlrd.open_workbook(filename)#获取excel文件
self.__sheet_total_num=len(self.__workbook.sheet_names())
def sheet_to_array(self,index):
sheet=self.__workbook.sheet_by_index(index)#按照索引读取表信息
rowend=sheet.nrows-1#结束行行号
colend=sheet.ncols-1#结束列列号
rowstart=2#起始行号
colstart=1#起始列号
keys=sheet.row_values(1)
keys.pop(0)
array_in=[]
for row_num in range(rowstart,rowend+1):
elem_list=sheet.row_values(row_num)
elem_list.pop(0)
array_in.append(elem_list)
merge_list=sheet.merged_cells
merge_result=[]
for item in merge_list:
item=list(item)
item[0]=item[0]-2
item[1]=item[1]-2
item[2]=item[2]-1
item[3]=item[3]-1
merge_result.append(item)
if merge_list:
for item in merge_result:
for row_index in range(item[0],item[1]):
for col_index in range(item[2],item[3]):
array_in[row_index][col_index]=array_in[item[0]][item[2]]
return array_in,keys
#转换为dataframe
@staticmethod
def to_dataframe(array,keys):
df=pd.DataFrame(data=array,columns=keys)
return df
#转换为json格式
def to_json(self,df):
temp_json=df.to_json(orient='records',force_ascii=False)
temp_json=eval(temp_json)
return json.dumps(temp_json,indent=4,ensure_ascii=False)
if __name__ == '__main__':
test=Excel_to_json('./test2.xlsm')#这里填写excel路径
array1,keys1=test.sheet_to_array(0)#转为矩阵
array2,keys2=test.sheet_to_array(1)
array3,keys3=test.sheet_to_array(2)
df1=test.to_dataframe(array1,keys1)#转为dataframe
df2=test.to_dataframe(array2,keys2)
df3=test.to_dataframe(array3,keys3)