从字典键中定义Excel单元格名称

我正在尝试input数据到一系列命名的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中select的单元格,但是我不断收到错误,说该范围没有属性。 有没有解决这个错误的方法?

这可能取决于您使用的是哪个版本的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 ,而不是我之前build议的表单对象ws

如果所有这些关于对象的讨论都是令人困惑的,那么可能有助于阅读面向对象的概念。 事情是这听起来比实际上困难得多。 虽然从计算机科学家的angular度来看这可能是非常错误的,但我认为面向对象主要是作为组织事物的一种方式; 非常接近硬盘上的文件夹结构:

Excel的api让你获得很多function。 您使用的第一个对象是工作簿。 这有一些属性和方法。 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, ie for the wb object) ........