Excel VBA插入方法失败

2024-10-03 04:37:37 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用xlwings和pywin32api来操作Excel文档。我想创建一个函数,在周一早上,获取一个打开的excel文档,在“volatile_column”的左侧插入一个新列,然后用0填充新列

迄今为止的代码:

import numpy as np
import xlwings as xw
import datetime as dtt
from pybev import datecheck


def monday_new_column(metrics):

    stripped_date = datecheck.date_to_datetime(dtt.datetime.today().date())

    if stripped_date.weekday() == 0:
        if stripped_date not in metrics.df.columns: # ensures no existing column
            col_num = int(np.where(metrics.df.columns == metrics.volatile_column)[0][0] + 2)
            max_row = int(len(metrics.df.index) + 2)

            # Using an xlwings constant & defining a column of zeroes
            xlShiftToRight = xw.constants.InsertShiftDirection.xlShiftToRight
            zero_array = np.zeros((max_row,), dtype=np.int)[np.newaxis].T

            print('Adding new week column...',end=''),

            # !! VBA code !!
            range_obj = metrics.sheet.range((1,col_num),(max_row,col_num))
            range_obj.api.Insert(Shift=xlShiftToRight) # here's the problem line
            range_obj.api.value = zero_array

            print('Done')

    return

它将转储错误:

^{pr2}$

这是一个VBA错误,所以我不认为周围的python代码是问题所在。documentation没有提供关于发生了什么的线索,google搜索错误只会让很多用户遇到Select()方法的问题,我在这里没有使用这个方法。在

我还尝试删除Shift=xlShiftToRight参数,每次都显式地调用metrics.sheet.range((1,col_num),(max_row,col_num)),而不是使用range_obj指针。这两种策略都会返回与初始策略相同的错误消息。在

我是不是缺少了一些简单的语法,或者这是一个更深层次的API问题?在


Tags: importobjdateas错误nprangecolumn