XlDirectionDown和使用Python选择填充的单元格

2024-10-01 22:40:57 发布

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

我已经问了根本问题,但我想我可以看看是否可以得到更多的帮助。我尝试使用XlDirectionDown来选择Excel电子表格中最后填充的单元格。在

最后,我想用Python从A到AE选择这个表中所有填充的单元格。它将被复制到一个文本文件中并附加到SQL Server中…所以我不需要任何空白。在

到目前为止我所拥有的:

import win32com.client as win32
excel = win32.gencache.EnsureDispatch('Excel.Application')
excel.Visible = 1;

excel.Workbooks.Open('G:/working.xlsx')

XlDirectionDown = 4

last = excel.Range("A:A").End(XlDirectionDown)
excel.Range("A1:A"+str(last)).Select()

首先,XlDirectionDown似乎不起作用。Excel中的光标保留在第一个单元格上。 其次,我得到了这段代码最后一行的异常(与Range有关)。有人知道这是怎么回事吗?另外,有没有关于win32com或Pywin32的文档??我找不到任何操作方法!一如既往地感谢大家。在


Tags: importclientsqlserverrangeexcel空白win32com
2条回答

我开始使用win32com和Excelhere。在

在您的代码中,excel.Range("A:A").End(XlDirectionDown)返回什么?测试一下。您可能需要添加.Select(),然后使用excel.Selection.Address来获得最后一个单元格。在交互模式下测试,更容易看到那里发生了什么。在

另一种方法是使用while循环遍历单元格。此代码循环行,直到出现空单元格:

excel.Range("A1").Select()
while excel.ActiveCell.Value:
    val = excel.ActiveCell.Value
    print(val)
    excel.ActiveCell.Offset(2,1).Select()  # Move a row down

最后一行有点有趣;在VBA中,您应该写Offset(1,0)以下移一行。但是在Python中,必须同时向行和列添加一个。可能是因为索引?在

我使用了一个特定的单元,而不是一系列的单元作为起点。更换

last = excel.Range("A:A").End(XlDirectionDown)

^{pr2}$

但是,如果有任何空白单元格,它将在它之前停止。您可能需要使用UsedRange()。这将是包含所有单元格的最小范围,根据Excel:您可能会发现结果范围比AE(末尾包含空白列)更宽,并且在底部包含许多完全空白的行。但是,由于您希望以任何方式筛选出空白单元格,因此在筛选期间将跳过这些单元格。在

至于最后一行代码中的异常,这是因为End返回一个Range对象,并且不能将一个Range转换为string,或者如果可以的话,str(last)是一个范围,所以{}将是一个无效的范围。在

至于过滤空白单元格,我不知道这意味着什么:当你把数据复制到文本文件中时,你会为空白单元格放什么?如果你有“空C”,你会把“A C”放进去吗?C将在数据库的错误列中结束。不管怎样,只是一些引起我注意的东西。在

win32com的文档没有一个单独的地方,尽管Python on Windows的书有很多信息,google给你的结果非常有用,包括sohits。每当我使用Excel COM(这并不是python的win32com所特有的)时,有一件事让我大吃一惊:工作簿中的每件事都是一个范围,你不能有一个单独的单元格,即使有些方法或属性可能会让你认为你得到的是一个单元格,实际上是一个范围,它通常需要一点额外的思考如何去获得所需的细胞。在

相关问题 更多 >

    热门问题