Watch 1 Star 0 Fork 0

fotomxq / jtj-tool-2016-2Python

Create your Gitee Account
Explore and code with more than 5 million developers,Free private repositories !:)
Sign up
This repository doesn't specify license. Without author's permission, this code is only for learning and cannot be used for other purposes.
公司经济数据分析工具,主要用于统计经济运行数据。 2016第一版,以php网页形式,需要整理和提交相关表后生成最终表。 2016第二版,改为python脚本制作,整理文件到data目录下,运行脚本即可生成最终表。 2016.11.1 开放源代码。 spread retract

Clone or download
run.py 7.30 KB
Copy Edit Web IDE Raw Blame History
fotomxq authored 2016-06-30 15:53 . 微调文件结构
# coding=utf-8
# 导入exlce操作库
from openpyxl import Workbook
from openpyxl import load_workbook
# 导入OS操作库
import os
# 变量类型判断库
import types
# 基本配置
# 数据文件所在目录
dataDir = 'data/'
# 今年集团公司合并报表
srcJT = dataDir + '2_集团合并数据' + '/' + '1_今年财务表.xlsx'
# 去年集团公司合并报表
srcJTPrev = dataDir + '2_集团合并数据' + '/' + '2_去年财务表.xlsx'
# 山投经济运行表模版
srcSTTemplateA = dataDir + '3_上报山投模版' + '/' + '经济运行情况-模版.xlsx'
# 山投季度表模版
srcSTTemplateB = dataDir + '3_上报山投模版' + '/' + '季度-模版.xlsx'
# 山投经济运行表
srcSTA = dataDir + '4_最终上报表' + '/' + '山西省中小企业基金发展集团有限公司-经济运行情况.xlsx'
# 在模版内搜索的匹配字符
tempSearchSrc = '~'
# 板块划分
bkList = ['资本运作','资产经营','金融服务','贸易']
# 子公司子文件可识别列,如果找不到文件则跳过
comFileList = ['经济运行表.xlsx','今年利润表.xlsx','今年资产负债表.xlsx','去年利润表.xlsx','去年资产负债表.xlsx','今年合并利润表.xlsx','今年合并资产负债表.xlsx','去年合并利润表.xlsx','去年合并资产负债表.xlsx']
# 获取excel操作句柄
def getExcel(src):
print('获取EXCEL文件 : ' + src)
excel = load_workbook(src)
print('读取完成.')
return excel
# 根据键值获取表句柄
def getExcelSheetKey(excel,key):
names = excel.get_sheet_names()
return excel.get_sheet_by_name(names[key])
# 获取配置数据
def getConfig():
src = dataDir + '0_数据调整/公司名称注册.xlsx'
excel = getExcel(src)
sheet1 = getExcelSheetKey(excel,0)
if sheet1['B2'].value != '公司名称注册':
return False
sheet2 = getExcelSheetKey(excel,1)
# 遍历获取所有公司数据列
comList = [0 for i in range(sheet2.max_row - 1)]
for i in range(sheet2.max_row - 1):
comList[i] = [sheet2['A' + str(i + 2)].value,sheet2['B' + str(i + 2)].value,sheet2['C' + str(i + 2)].value,sheet2['D' + str(i + 2)].value]
return comList
# 脚本开始
# 获取配置数据
comList = getConfig()
print('获取配置信息 : ')
print(comList)
# 等待转载的数据集合
# 0-子公司数据 1-集团合并表数据 2-子公司合并数据 3-子公司板块合并数据
data = [0 for i in range(3)]
# 获取今年集团合并数据
excelJT = getExcel(srcJT)
data[1] = [0 for i in range(2)]
data[1][0] = [0 for i in range(2)]
data[1][0][0] = getExcelSheetKey(excelJT,0)
data[1][0][1] = getExcelSheetKey(excelJT,1)
# 获取去年集团合并数据
excelJTPrev = getExcel(srcJTPrev)
data[1][1] = [0 for i in range(2)]
data[1][1][0] = getExcelSheetKey(excelJTPrev,0)
data[1][1][1] = getExcelSheetKey(excelJTPrev,1)
# 建立基础2 子公司合并数据
data[2] = [0 for i in range(2)]
# 根据经济运行表建立 经济运行表表1数据合并
data[2][0] = [0 for i in range(2)]
data[2][0][0] = {'B4':0,'B5':0,'B6':0,'B7':0,'C4':0,'C5':0,'C6':0,'C7':0}
data[2][0][1] = 0
# 根据板块建立 计算板块的数据
data[2][1] = [0 for i in range(len(bkList))]
# 根据公司数量,建立data[0]
data[0] = [0 for i in range(len(comList))]
# 统计二级子函数,识别表并归类
def makeComDataVis(sheet,comKey,tableType,tableKey):
# 将数据放入data[0]
data[0][comKey][tableType] = sheet
# 根据表类型进行区分
if tableType == 0:
# 经济运行表
if tableKey == 0:
# 表1
# 遍历数据
for data200Key in data[2][0][0]:
newD = 0
if type(sheet[data200Key].value) == int:
newD = sheet[data200Key].value
data[2][0][0][data200Key] = newD + data[2][0][0][data200Key]
elif tableKey == 1:
# 表2
# 如果不存在表,则直接写入数据
if data[2][0][1] == 0:
data[2][0][1] = sheet
# 如果已经存在数据,则遍历C列4~16行 I列4~16行
iList = [['B','C','D'],['G','H','I']]
for iListKey in range(len(iList)):
for d in range(16):
key = iList[iListKey][2] + str(d + 4)
key1 = iList[iListKey][0] + str(d + 4)
key2 = iList[iListKey][1] + str(d + 4)
# 对比值,保留最大的
a = sheet[key].value
b = data[2][0][1][key]
c = sheet[key].value
if type(b) is not float and type(b) is not None and type(b) is not int:
b = b.value
if a != None:
if b != None:
if a >= b:
data[2][0][1][key] = a
data[2][0][1][key1] = sheet[key1].value
data[2][0][1][key2] = sheet[key2].value
else:
data[2][0][1][key] = a
data[2][0][1][key1] = sheet[key1].value
data[2][0][1][key2] = sheet[key2].value
else:
if b != None:
data[2][0][1][key] = b
else:
print('错误 : 该类型无法识别 ~ tableKey : ' + str(tableKey))
return False
elif tableType == 1:
# 今年利润表
return True
elif tableType == 2:
# 今年资产负债表
return True
elif tableType == 3:
# 去年利润表
return True
elif tableType == 4:
# 去年资产负债表
return True
elif tableType == 5:
# 今年合并利润表
return True
elif tableType == 6:
# 今年合并资产负债表
return True
elif tableType == 7:
# 去年合并利润表
return True
elif tableType == 8:
# 去年合并资产负债表
return True
else:
print('错误 : 该类型无法识别 ~ tableType : ' + str(tableType))
return False
# 统计所有二级公司的报表,做合并处理
print('正在处理二级公司数据...')
# 遍历公司列表
for comKey in range(len(comList)):
# 建立公司所属数据列
data[0][comKey] = [0 for i in range(len(comFileList))]
# 公司目录是否存在
comDir = dataDir + '1_子公司数据' + '/' + comList[comKey][2]
if os.path.exists(comDir) != True:
print('错误 : 找不到二级公司目录 by ~ ' + comDir + '.')
continue
# 获取6类文件内容
for fileKey in range(len(comFileList)):
fileSrc = comDir + '/' + comFileList[fileKey]
if os.path.isfile(fileSrc) != True:
continue
fileExcel = getExcel(fileSrc)
# 遍历文件的所有表
names = fileExcel.get_sheet_names()
for nameKey in range(len(names)):
comTable = getExcelSheetKey(fileExcel,nameKey)
makeComDataVis(comTable,comKey,fileKey,nameKey)
# 特殊处理,根据板块计算出各板块的营业收入和利润数据
# 获取山投经济运行表句柄
stAFinExcel = getExcel(srcSTA)
# 获取山投经济运行模版表句柄
stATemplateExcel = getExcel(srcSTTemplateA)
# 根据模版处理数据表
def makeData(tempExcel,finExcel):
# 根据模版文件,遍历所有表
for i in tempExcel.get_sheet_names():
sheet = tempExcel.get_sheet_by_name(i)
colMax = sheet.max_column
rowMax = sheet.max_row
# 遍历列和行
for c in range(colMax):
for r in range(rowMax):
val = str(sheet.cell(row = (r + 1),column = (c + 1) ).value)
if val.find(tempSearchSrc) > -1:
valSplit = val.split('-')
v = data[int(valSplit[1]) - 1][int(valSplit[2]) - 1][int(valSplit[3]) - 1][valSplit[4]]
if type(v) is int:
v = v
if v == None:
v = 0
elif type(v) is str:
v = v
else:
v = v.value
if v == None:
v = 0
sheet[sheet.cell(row = (r + 1),column = (c + 1) ).column + str(r + 1)] = v
return False
# 执行经济运行模型编译
makeData(stATemplateExcel,stAFinExcel)
# 保存结果到输出表
stATemplateExcel.save(srcSTA)
print('完成输出,请查看文件.')
Python
1
https://gitee.com/fotomxq/ZXJJ.git
git@gitee.com:fotomxq/ZXJJ.git
fotomxq
ZXJJ
jtj-tool-2016-2
master

Search