1

我有一个问题,我正在循环处理它!:| 我希望有一个人可以帮助我..

所以我有一个输入文件(.xls),这很简单,但是有一行(比如说它的“ROW1”)是这样的:

  1. 第 1 行 | 第 2 行 | 第 3 行 | ROW_N
  2. 765 | 1 | AAAA-MM-DD | ...
  3. 空 | 1 | AAAA-MM-DD | ...
  4. 空 | 1 | AAAA-MM-DD | ...
  5. 第944章 2 | AAAA-MM-DD | ...
  6. 空 | 2 | AAAA-MM-DD | ...
  7. 088 | 7 | AAAA-MM-DD | ...
  8. 555 | 2 | AAAA-MM-DD | ...
  9. 空 | 2 | AAAA-MM-DD | ...

如您所见,这里没有标准。有一些行为空(ROW1),在 ROW2 中有相同的数字,与 ROW1 的关联不同(如第 5 行和第 6 行,然后是第 8 行和第 9 行)。

我的目标是从 ROW1 中复制并粘贴值,在 ROW1 之后何时为空,直到不为空。基本上是复制上一步的形式,什么时候为空...

我正在尝试使用“公式”步骤,方法是:

=IF(AND(ISBLANK([ROW1]);NOT(ISBLANK([ROW2]));ROW_n=ROW1;IF(AND(NOT(ISBLANK([ROW1]));NOT(ISBLANK([ROW2])); ROW_n=ROW1;ROW_n=""));

但是还没有。。

我试过“分析查询”,但也没有。

我只使用流式传输 xls 文件输入..

非常感谢,非常感谢任何帮助!

最好的问候!

4

2 回答 2

1

好吧,我发现了一个解决方案,使用以下代码添加“用户定义的 Java 类”:

import java.util.HashMap; private FieldHelper output_field, card_field; private RowSet out, log; private String previou_card =null;

public boolean processRow(StepMetaInterface smi, StepDataInterface sdi) throws KettleException {

if (first)
{
    first = false;
    out = findTargetRowSet("out");

    output_field = get(Fields.Out, "previous_card");
} else {
    Object[] r = getRow();
    if (r == null) {
        setOutputDone();
        return false;
    }

    r = createOutputRow(r, data.outputRowMeta.size());
    if (previous_card != null) {
        output_field.setValue(r, previous_card);
    }

    if (card_field == null) {
        card_field = get(Fields.In, "Grupo de Cartões");
    }

    String card = card_field.getString(r);
    if (card != null && !card.isEmpty()) {
        previous_card = card;
    }
    // Send the row on to the next step.
    putRowTo(data.outputRowMeta, r, out);
}
return true;

在此之后,我必须采取一些步骤,但这非常有帮助。

谢谢小伙伴!!

于 2015-05-14T16:01:26.327 回答
-2

最后我得到了结果。请按照以下步骤

  1. 下图是完整的转换屏幕。 在此处输入图像描述

  2. 数据网格数据将是这样的。抱歉,在我的本地我没有 Microsoft,因为我使用了 Data Grid。您可以拖放 Microsoft Excel 输入步骤,而不是数据网格。

在此处输入图像描述

  1. 拖放一个 java 脚本步骤并编写以下代码。

在此处输入图像描述

  1. 转换的最后一步,拖放选择值步骤并选择列。(这些步骤不是必需的)

在此处输入图像描述

  1. 最终的结果将是这样的。

在此处输入图像描述

希望这可以帮助。

于 2015-05-14T03:51:36.640 回答