首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >XlDirectionDown与使用Python选择填充的单元格

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

Stack Overflow用户
提问于 2014-02-25 16:45:04
回答 2查看 5.9K关注 0票数 3

我已经问过根本的问题了,但我想我也许能在这方面得到更多的帮助。我正在尝试使用XlDirectionDown,以便在Excel电子表格中选择最后填充的单元格。

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

到目前为止我所拥有的是:

代码语言:javascript
运行
复制
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中的光标保留在第一个单元格上。其次,我得到了这段代码中最后一行的异常(与范围有关)。有人知道这段代码是怎么回事吗?另外,是否有关于win32com或Pywin32的文档??我找不到什么方法了!像往常一样谢谢大家。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-25 22:40:33

我用了一个特定的细胞,而不是细胞的范围作为起点。替换

代码语言:javascript
运行
复制
last = excel.Range("A:A").End(XlDirectionDown)

使用

代码语言:javascript
运行
复制
last = excel.Range("A1:A1").End(XlDirectionDown)

然而,如果有任何空白单元格,这将停止就在它。您可能希望使用UsedRange()代替。根据Excel,这将是包含所有单元格的最小范围:您可能会发现(正如我所知道的)结果范围比AE (在末尾包含空白列)更宽,并且在底部包含许多完全空白的行。但是,由于您希望以任何方式过滤空单元格,这些单元格将在筛选过程中被跳过。

至于最后一行代码上的异常,这是因为End返回一个range对象,您不能将一个范围转换为字符串,或者如果您可以,那么str(last)是一个范围,因此"A1:A"+str(last)将是一个无效的范围。

至于过滤空单元格,我不知道这意味着什么:当您将数据复制到文本文件时,您将为空白单元格添加什么?如果你有"A空白C“,你会写"A C”吗?C将最终出现在数据库的错误列中。不管怎样,这只是引起我注意的东西。

win32com的文档没有一个单独的地方,尽管Python有很多信息,谷歌给你的结果非常有用,包括点击量。每当我使用Excel时(这并不是python的win32com所特有的),唯一让我感到困扰的是,工作簿中的所有内容都是一个范围,您不能有一个单独的单元格,即使某些方法或属性可能会导致您认为您正在得到一个单元格--您实际上得到了一个范围--通常需要对如何获得所需的单元格进行一些额外的思考。

票数 4
EN

Stack Overflow用户

发布于 2014-02-25 20:14:15

我开始使用win32com和Excel 这里

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

作为另一种选择,您可以使用while循环来遍历单元格。此代码正在循环这些行,直到出现空单元格:

代码语言:javascript
运行
复制
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中,您必须同时向行和列添加一个。也许是因为索引?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22020691

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档