如何从excel文件中将列标题读入Qlikview

时间:2014-09-24 12:15:33

标签: excel qlikview

我的要求是,我需要重新加载大量的excel文件。但在加载之前,我需要检查所有这些文件中的所有列标题是否正确(这些是数据文件和格式相同。所有列标题都应该相同)。

所以,我的问题是如何从qlikview中为每个文件读取excel中的列标题并与列标题的引用数组匹配?

我的尝试:由于我是Qlikview的新手并且不熟悉脚本,因此无法走得太远。我现在所能做的就是在我的代码中从存储它的目录中逐个获取所有文件,但不确定如何从中读取列标题并进行比较。

感谢您的帮助

1 个答案:

答案 0 :(得分:4)

阅读标题

如果您只想比较列标题列表(即名称),则可以从Excel文件中读取它们。例如,如果我们有如下的Excel工作簿:

Example of an Excel Workbook

然后我们可以使用以下脚本读取标题:

FIRST 1
LOAD 
    A, 
    B, 
    C
FROM
[TestData.xlsx]
(ooxml, no labels, table is Sheet1);

这样做只是从工作簿中读取第一行(FIRST 1)。由于在文件参数中指定了no labels选项,因此工作簿的第一行被视为另一行数据。

然后产生以下结果:

Example of results from script

比较标题

根据存储引用列标题的位置,一种比较方法是创建连接的“键”并将其与上面脚本中加载的标题进行比较。

下面是一个示例脚本,其中引用标头是通过字符串常量设置的:

SET ReferenceHeaders = 'Column1|Column2|Column3';

DataHeaders:
FIRST 1
LOAD
    A & '|' & B & '|' & C as HeaderKey;
LOAD 
    A, 
    B, 
    C
FROM
[TestData.xlsx]
(ooxml, no labels, table is Sheet1);

LET LoadedHeaders = peek('HeaderKey',0,'DataHeaders');

IF LoadedHeaders = ReferenceHeaders THEN 
    // Load table etc.
ENDIF

peek语句允许您从表中获取单个记录,在这种情况下,我们只是读取HeaderKey第一行的值。由于此表只包含一行,因此这将为我们提供以字符串形式加载的标题。

然后我们可以将它与参考标题进行比较,然后在它们匹配时采取适当的操作。

但是,这假定数据文件中的标题与引用标题的顺序相同,因此是最简单的实现方法。如果列无序,则该过程变得更加困难。