我正在尝试根据字典中的键将数据输入到一系列命名的Excel工作表中,例如CellName1
而不是A1
。我正在使用的代码如下所示:
snCells = {}
for item1 in defVars:
if item1.find("LFDef"):
ws = wLF
snCells.update({item1:ws.Range[item1](1,1)})
elif item1.find("UFDef"):
ws = wLF
snCells.update({item1:ws.Range["%s" % item1](1,1)})
else:
ws = wST
snCells.update({item1:ws.Range["%s"% item1](1,1)})
其中:
ex = Marshal.GetActiveObject("Excel.Application")
wb = ex.ActiveWorkbook
ws = wb.ActiveSheet
wUF = wb.Sheets(1).Select
wLF = wb.Sheets(2).Select
wST = wb.Sheets(4).Select
范围应该定义Python在Excel中选择的单元格,但是我不断收到错误,说明范围没有属性。有没有办法解决这个错误?
答案 0 :(得分:0)
可能取决于您使用的是哪个版本的Excel,但在2010年,Range
对象具有Name
属性。
如果不尝试,您似乎应该调用Name
对象并使用Name.RefersToRange
属性来获取您所追求的Range
对象。
使用Excel时非常有用的书签:http://msdn.microsoft.com/en-us/library/office/ff846392%28v=office.14%29.aspx
它应该是这样的:
snCells.update({item1: wb.Names(item1).RefersToRange()})
wb.Names(item1).RefersToRange()
返回一个元组元组,其中包含您所追踪的数据。假设您的范围是“A1:B2”,它将如下所示:
((A1 value, A2 value),
(B1 value, B2 value))
如果您只想要您所在范围内的特定值,例如A1,你可以这样做:wb.Names("item1").RefersToRange()[0][0]
。第一个[0]为您提供第一个元组,即第一个元组,第二个[0]为您提供该行中的第一个值。
请注意,Names
位于工作簿对象wb
中,而不是我之前建议的工作表对象ws
。
如果所有关于对象等的讨论都令人困惑,那么阅读面向对象的概念可能会有所帮助。事情是,它听起来比实际更难。虽然从计算机科学家的角度来看这可能是非常错误的,但我认为面向对象主要是一种组织事物的方式;非常靠近硬盘上的文件夹结构:
excel api为您提供了许多功能。您使用的第一个对象是工作簿。这有许多属性和方法。 wb.Name返回文件名,而wb.Names允许您访问已定义的所有命名范围和/或单元格。这些单元格具有更多属性,例如返回名称所指范围内的值。像这样:
- wb
- Name: Returns filename # <--- a property available for the wb object
- Names( name ): Returns reference to the range called 'name'
- .RefersToRange(): Returns tuple with values of the range # <--- a function available under the Names object
- ...... (much more in here) ........
- ...... (much more in here, i.e. for the wb object) ........