栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

xlwings报错:pywintypes.com

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

xlwings报错:pywintypes.com

import pandas as pd
import xlwings as xw
app = xw.App(visible=False, add_book=False)  # 启动excel程序
hlb = app.books.open('汇率表.xls')   # 打开读取汇率簿
hlb_b = hlb.sheets[0]  # 读取工作表
bz = hlb_b.range('A1').expand('down').value  # 读取第一列币种形成列表
hl = hlb_b.range('B1').expand('down').value  # 读取第二列汇率形成列表
hlb.close()  # 关闭工作簿
print(f'第一阶段{bz, hl}')  # 输出第一阶段监测点ok
bz_hl = dict(zip(bz, hl))  # 组成币种:汇率的字典
# file = file.split('n')
# file = file[0]
# print(f'第二阶段{file}')  # 输出第二阶段监测点ok
wb = app.books.open('fnd_gfm_930958.xls')
ws = wb.sheets[0]
sj = ws.range(1, 1).expand('right').value  # 读取第一行字段列表
hs = ws.range(1, 1).expand('down').rows.count
print(f'第三阶段{sj, hs}')  # 输出第三阶段监测点ok
hb = ['开证单位', '承付银行', '承付币种']  # 定义需要识别的两个字段
a = sj.index(hb[0])+1  # 了解对应字段在工作表的列数
b = sj.index(hb[1])+1  # 承付银行字段
c = sj.index(hb[2])+1  # 承付币种字段
print(f'第四阶段{a, b, c}')  # 输出第四阶段监测点ok
lst = []  # 列空表
lst_bz = []  # 币种空列表
for i in range(1, hs):  # 遍历两列字段做合并
    sc1 = ws.range(i+1, a).value  # 获取对应单元格值
    sc2 = ws.range(i+1, b).value
    sc3 = ws.range(i+1, c).value
    sc = r'{}-{}'.format(sc1, sc2)  # 合并字段:开证单位-承付银行
    lst += [sc]  # 组成列表【开证单位-承付银行】
    lst_bz += [sc3]  # 组成币种列表
print(f'第五阶段{lst}')  # 输出第五阶段监测点ok
jg = list(set(lst))  # 筛选掉重复值,形成无重复列表
jg_bz = list(set(lst_bz))
jg_bz = sorted(jg_bz)  # 将币种按照字母顺序排列
print(f'第六阶段{jg_bz}')  # 输出第六阶段监测点ok
jilu = '2.txt'  # 定义文本2记录币种列表
with open(jilu, 'w') as file_object:
    for i in jg_bz:
        file_object.write(i+'n')
jg_gs = len(jg)  # 列表个数
jg_bz_gs = len(jg_bz)
print(f'第七阶段{jg_gs}')  # 输出第七阶段监测点ok
ws2 = wb.sheets.add(name='输出结果', after=ws)
ws2.range(2, 1).value = ['开证单位', '承付银行', '折合人民币金额']  # 编写正常文字
ws2.range(1, 2).value = '承付币种'
for j in range(jg_gs):  # 遍历列表【开证单位-承付银行】
    sr = jg[j].split('-')  # 拆分列表字段:开征单位  承付银行 两个列表
    print(sr)
    ws2.range(j+3, 0).value = sr[0]  # 工作表输入字段1
    ws2.range(j+3, 1).value = sr[1]
for j in range(jg_bz_gs):  # 遍历币种列表
    ws2.range(1, j+4).value = jg_bz[j]  # 输入字段
ws2.autofit('c')  # 自动调整列宽
data = pd.read_excel('fnd_gfm_930958.xls')  # 利用pandas模块读取excel数据
# data_s = pd.read_excel('fnd_gfm_930958.xls', usecols="J:J")
print(data['承付金额'].sum())
for x in jg_bz:  # 遍历币种列表
    shuzi = jg_bz.index(x)  # 找到币种列表的位数
    try:
        dy_hl = bz_hl[x]  # 在币种-汇率字典找到对应币种的汇率值
        ws2.range(2, shuzi+4).value = dy_hl  # 书写在第二行
    except KeyError:
        ws2.range(2, shuzi+4).value = ' '  #填写第二行币种
lst2 = []
for x in range(jg_gs):  # 遍历列表【开证单位-承付银行】对应书写行数
    for y in range(jg_bz_gs):  # 遍历币种列表对应书写列数
        d = jg[x].split('-')
        e = data[(data['开证单位'] == d[0]) & (data['承付银行'] == d[1]) & (data['承付币种'] == jg_bz[y])
                 & (data['已拒付'] == 'N') & (data['财务备注'].str.contains('购汇'))]  # 利用筛选条件筛选数据
        f = e['承付金额'].sum()  # 筛选数据简单求和
        g = e['申请使用外汇金额'].sum()  # 筛选出使用外汇金额
        lst2 += [f-g]
        # print(f)
        ws2.range(x+3, y+40).value = f-g
wb.save("结果文件.xls")  # 保存工作簿
wb.close()
app.quit()

报错截图:

 求路过的大佬看一下,可以怎么解决

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/976672.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号