从一个巨大的封闭工作簿中抓取并过滤超过255列

时间:2016-03-01 20:58:04

标签: sql excel vba excel-vba adox

我有一个庞大的工作簿(60万行)和315列,我的列名称需要抓取到一个数组中。由于体积庞大,我不想打开和关闭工作簿来复制该范围的第一行。另外,我想只抓取第一行中以" Global"开头的某些列。

任何人都可以提供有关如何执行此操作的简短代码示例吗?请注意我已尝试ADOX,ADO等,但都显示255列限制。我也不想打开工作簿,而是拉出所需的" Global" 315列中的列到数组中。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

您可以通过打开新工作簿来复制目标的第一行,并在A1中使用此公式:

='C:\PATH_TO_TARGET\[TARGET_FILE_NAME.xlsx]WORKSHEET_NAME'!A1

请注意,PATH + FILENAME + WORKSHEET用单引号括起来,FILENAME用方括号括起来,感叹号将单元格引用分开。

然后复制/粘贴或填充右边以获得接下来的314列。注意:此公式将为空目标单元格返回零。

获得列标题后,如果要销毁已关闭工作簿的链接,则可以复制/ paste_special_values。

希望有所帮助

答案 1 :(得分:1)

您可以使用Python编程语言。 虽然它不能与XLSX fiels一起使用,但您只需从此处安装openpyxl外部模块:https://pypi.python.org/pypi/openpyxl - (您还必须安装Python。当然 - 只需从www.python.org下载)

它将使您在交互式Python会话中处理数据变得轻而易举,无需加载Excel界面即可打开工作簿的时间应该是您期望的一小部分。 (我认为它必须符合你的记忆)。

但这是我必须在交互式Python2会话中打开工作簿的所有内容,并检索以" bl"开头的列名:

import openpyxl
a = openpyxl.load_workbook("bla.xlsx")
[cell.value for cell in a.worksheets[0].rows[0] if cell.value.startswith("bl")]

输出:

Out[8]: [u'bla', u'ble', u'bli', u'blo', u'blu']

最后一个输入行需要知道要理解的Python,所以,这里是发生了什么的总结:Python是一种非常喜欢使用序列的语言 - 而openpyxl libray为你的工作簿提供了: 一个对象,它是一系列工作表 - 每个工作表都有一个rows属性,该属性在工作表中包含所有行的序列,每行都是一系列单元格。每个单元格都有一个value属性,该属性就是其中的文本。

内联for语句是紧凑形式,但它可以写成多行语句:

In [10]: for cell in a.worksheets[0].rows[0]:
   ....:     if cell.value.startswith("bl"):
   ....:         print cell.value
   ....:         
bla
ble
bli
blo
blu

请记住,通过更深入地探索Python,您可以以比这样大小的数据集交互更容易的方式编程操作数据 - 您甚至可以使用Python本身将选择内容删除到SQL数据库,(包括其bult-in,单文件数据库,sqlite),其中复杂的索引和查询可以轻松处理您的数据)