将Excel Cell Value直接读取到复杂的Python对象DataNitro

时间:2013-07-04 06:40:40

标签: python excel datanitro

我正在开发一个程序,允许我执行诊断并从包含数百个Excel工作表的文件中提取数据。我正在使用DataNitro添加。

我的计划分为两个阶段:

PhaseI:诊断:程序读取每张工作表上某些用户输入列中的每个单元格,并将字典和列表返回到Excel选项卡中。列表的示例是:要提取的数据的开始/结束行。缺失的工作表和观察列表,或具有异常值等。这些对象有两个目的:1)允许用户识别在提取数据之前应检查的值; 2)描述每个工作表的数据结构。

阶段II:数据提取程序使用第一阶段中创建的对象,从各个工作表中提取数据,并在新工作表上进行编译。

该程序运行得非常好,我能够非常快速地提取成千上万的观察结果(当你明白我以前的职位是手工完成的时候!)。

所以这就是问题:

为了使第二阶段发生,它使用第一阶段创建的对象。这意味着,一旦诊断阶段结束,并且用户已经迭代了足够多次,直到他对数据准备好被提取感到满意为止,整个程序必须从头开始再次运行。这绝对是一种低效率,特别是因为诊断阶段可能需要几分钟。所以我想知道的是,有没有办法将单元格值中包含的列表读回到python中作为它们的目标类型?如果有,那么我可以使用第一阶段中的对象,因为它们出现在excel表中,并直接将它们带到第二阶段而无需重新运行第一阶段程序。

例如:其中一个dictionarys有一个代表工作表编号的密钥,一个条目本身就是一个带有观察值键的字典列表,一个条目是一个列表,在该列表上可以找到观察值。 ..

{'Sheet1':[{'OBSERVATION4':[12,13,14]},{'OBSERVATION12':[29,31,35]}],'Sheet12':[{'OBSERVATION7':[6 ,7,9]},{'OBSERVATION18':[40,44,48]}}}

在excel单元格中,这只是一个字符串。

如何直接将这种类型的复杂对象读回到python ???

由于

1 个答案:

答案 0 :(得分:3)

您可以将字符串传递给eval函数,该函数将此值作为Python代码进行评估。例如,如果在名为“数据表”的工作表的单元格A1上有该字符串,则可以执行

my_dict = eval(Cell("Data Sheet", "A1").value)

将字典加载回my_dict

通常,在使用eval函数时应该小心,因为评估任意用户输入是一个安全漏洞。 (例如,您不希望在网站上执行此操作。)但是,在这种情况下,用户无论如何都可以编写和运行自己的代码,因此这不是问题。