Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 从Win32 COM向Excel提供数据时发生命名冲突(_FilterDatabase)_Python_Excel_Win32com - Fatal编程技术网

Python 从Win32 COM向Excel提供数据时发生命名冲突(_FilterDatabase)

Python 从Win32 COM向Excel提供数据时发生命名冲突(_FilterDatabase),python,excel,win32com,Python,Excel,Win32com,我想创建一个快速脚本,从标准化表单(word文档/docx)中提取数据,并将其传输到Excel工作表中,附带一个进行一些计算的工作表。 一切都很好,只有一个例外: 我希望能够过滤特定项目编号、用户首字母或其他数据点的结果,但当我在Excel工作表上添加过滤器时,无论何时从Python运行它,我都会收到一条“命名冲突”错误消息,并且必须为“_FilterDatabase”选择一个新名称,当我这样做时,过滤器就消失了。 如果我不这样做,脚本就会崩溃 我像这样打开这张表: import win32co

我想创建一个快速脚本,从标准化表单(word文档/docx)中提取数据,并将其传输到Excel工作表中,附带一个进行一些计算的工作表。 一切都很好,只有一个例外:

我希望能够过滤特定项目编号、用户首字母或其他数据点的结果,但当我在Excel工作表上添加过滤器时,无论何时从Python运行它,我都会收到一条“命名冲突”错误消息,并且必须为“_FilterDatabase”选择一个新名称,当我这样做时,过滤器就消失了。 如果我不这样做,脚本就会崩溃

我像这样打开这张表:

import win32com.client as win32
def openExcel():
    xl = win32.gencache.EnsureDispatch('Excel.Application')
    wb = xl.Workbooks.Open(path+"\\"+'Analysis.xlsx')
    ws = wb.Sheets(1)
    xl.Visible = True

    return ws 
然后我将数据中包含的数据点传递给Excel

def print2Excel(data, ws):
    const = win32.constants
    ws.Range("A2:H2").Insert(const.xlShiftDown, const.xlFormatFromRightOrBelow)
    ws.Cells(2,1).Value = data["datapoint"]
    ...

即使在事后卸下过滤器,此问题仍然存在。一旦Excel工作表被过滤一次,错误将一直发生到时间结束。到目前为止,唯一的解决办法是git重置/签出Excel。

我看不出您在哪里应用了筛选器,但在应用筛选器之前,您是否尝试过将AutoFilterMode设置为False,然后添加筛选器?比如说

    sh_data.Rows(1).AutoFilter(Field=1, Criteria1='B')


我看不到您在哪里应用过滤器,但在应用过滤器之前,您是否尝试将AutoFilterMode设置为False,然后添加过滤器?比如说

    sh_data.Rows(1).AutoFilter(Field=1, Criteria1='B')


我没有在脚本中应用过滤器。可以说,目标excel文件应该是一个“数据转储”,通过脚本不断导入数据。问题不在于python,甚至可能不在于win32com,而在于Excel本身。如果Excel工作表(在任何时间点)有一个过滤器(即使它已被删除),无论是通过脚本创建的还是手动添加的,当脚本试图访问工作簿时,我都会遇到此错误。我在代码中也做了类似的事情,似乎根本没有遇到任何问题,所以也不认为这是Excel问题?我通常使用xlwings组合转储数据,使用win32com清除数据、设置样式/格式等。。。(需要注意的是,我的工作簿对象是在主函数中创建的,并作为参数传递给所有子函数)例如:``def processing_data():wb_-win=Excel.Workbooks.Add()wb_-xw=xw.books[wb_-win.Name]load_data(wb_-win=wb_-win,wb_-xw=wb_-xw)def load_-data(wb_-win,wb_-xw)ws_-win=wb_-win.Sheets(ws_-Name)ws_-win.AutoFilterMode=False ws_-win.ClearContents()wb_xw.sheets[ws_name].range('A2')。value=data['datapoint']返回true如果我通过工作表,我认为代码的放置不应该对此处产生影响。但如果你不能重现这个问题,那就很有趣了。我在不同的文件和不同的同事的电脑上试用了它,但我到处都遇到了同样的问题。然后,这是Excel当时不喜欢的代码。除了粘贴数据外,您是否还在电子表格中添加任何范围名称或进行任何其他更改?我没有在脚本中应用过滤器。可以说,目标excel文件应该是一个“数据转储”,通过脚本不断导入数据。问题不在于python,甚至可能不在于win32com,而在于Excel本身。如果Excel工作表(在任何时间点)有一个过滤器(即使它已被删除),无论是通过脚本创建的还是手动添加的,当脚本试图访问工作簿时,我都会遇到此错误。我在代码中也做了类似的事情,似乎根本没有遇到任何问题,所以也不认为这是Excel问题?我通常使用xlwings组合转储数据,使用win32com清除数据、设置样式/格式等。。。(需要注意的是,我的工作簿对象是在主函数中创建的,并作为参数传递给所有子函数)例如:``def processing_data():wb_-win=Excel.Workbooks.Add()wb_-xw=xw.books[wb_-win.Name]load_data(wb_-win=wb_-win,wb_-xw=wb_-xw)def load_-data(wb_-win,wb_-xw)ws_-win=wb_-win.Sheets(ws_-Name)ws_-win.AutoFilterMode=False ws_-win.ClearContents()wb_xw.sheets[ws_name].range('A2')。value=data['datapoint']返回true如果我通过工作表,我认为代码的放置不应该对此处产生影响。但如果你不能重现这个问题,那就很有趣了。我在不同的文件和不同的同事的电脑上试用了它,但我到处都遇到了同样的问题。然后,这是Excel当时不喜欢的代码。除了粘贴数据外,您是否添加了任何范围名称或对电子表格进行了任何其他更改?我也有这个问题-这非常令人沮丧,并且使我的代码无法提供给其他人使用。使用xlwings更新已包含筛选器的excel工作表时,我会收到一条弹出错误消息-命名与_FilterDatabase冲突。我已经用VBA宏手动删除了这个名字,因为大多数线程都会指向这个名字,但是错误会断断续续地出现。一个解决方案会很好吗?从没有答案和我的问题发布以来经过的时间来看,似乎没有答案。到目前为止,我还没有发现任何问题,只是有点放弃了:/我也有这个问题-这是最令人沮丧的,使我的代码不可能给别人使用。使用xlwings更新已包含筛选器的excel工作表时,我会收到一条弹出错误消息-命名与_FilterDatabase冲突。我已经用VBA宏手动删除了这个名字,因为大多数线程都会指向这个名字,但是错误会断断续续地出现。一个解决方案会很好吗?从没有答案和我的问题发布以来经过的时间来看,似乎没有答案。到目前为止,我还没有找到,只是有点放弃了:/