Excel (XLSX) ファイルのデータの参照

この DataWeave の例では、​filter​ 関数を使用して、指定された値を含む、Excel (XLSX) 入力ファイルの行のみを返します。 開始する前に、DataWeave バージョン 2 (​%dw 2.0​) は Mule 4 アプリケーションを対象とすることに注意してください。Mule 3 アプリケーションの場合、Mule 3.9 ドキュメントセットの DataWeave バージョン 1 (​%dw 1.0​) の例を参照してください。他の Mule バージョンの場合は、目次の Mule Runtime バージョンセレクターを使用できます。

デフォルトでは、1.5 MB を超えるファイルはディスクに保存されます。これより小さいファイルはメモリに保存されます。

次の DataWeave スクリプトでは、XLSX ファイルを読み取り、そのファイルから絞り込まれたデータを返します。​ourBugs.xlsx​ という名前のスプレッドシートには、​Fred M​ という名前の担当者を含め、チームのすべてのメンバーに割り当てられたバグに関するデータが含まれていると仮定します。

DataWeave スクリプト:
%dw 2.0
var myInput = readUrl("classpath://ourBugs.xlsx", "application/xlsx")
output application/json
---
myInput."Data" filter ((entry, index) -> entry."Assignee" == "Fred M")
  • スクリプトは ​classpath:ourBugs.xlsx​ を ​readUrl​ 関数に渡して、Studio プロジェクトディレクトリ (​src/main/resources​) からファイルを読み取ります。結果は変数 ​myInput​ に保存されます。

  • スクリプトは XLSX ファイルから ​Data​ という名前のシートを選択した後、​Assignee​ 列に ​Fred M​ の値が含まれるレコードを除き、すべてのレコードを除外します。結果は JSON オブジェクトの配列で返されます。次に例を示します。

[
  {
    "Issue Key": "BUG-11708",
    "Issue Type": "Bug",
    "Summary": "Some Description of the Bug",
    "Assignee": "Fred M",
    "Reporter": "Natalie C",
    "Priority": "To be reviewed",
    "Status": "Closed",
    "Resolution": "Done",
    "Created": "2019-04-29T03:57:00",
    "Updated": "2019-05-06T10:40:00",
    "Due Date": ""
  },
  {
    "Issue Key": "BUG-4903",
    "Issue Type": "Story",
    "Summary": "Some Description of the Bug",
    "Assignee": "Fred M",
    "Reporter": "Fred M",
    "Priority": "To be reviewed",
    "Status": "In Progress",
    "Resolution": "",
    "Created": "2019-05-07T11:22:00",
    "Updated": "2019-05-08T10:16:00",
    "Due Date": ""
  },
  {
    "Issue Key": "BUG-4840",
    "Issue Type": "Story",
    "Summary": "Some Description of the Bug",
    "Assignee": "Fred M",
    "Reporter": "Pablo C",
    "Priority": "To be reviewed",
    "Status": "In Validation",
    "Resolution": "",
    "Created": "2019-04-30T07:11:00",
    "Updated": "2019-05-08T10:16:00",
    "Due Date": ""
  }
]

次の例は、前の例と同じ DataWeave スクリプトを使用して、​filter​ 式の結果をファイル ​fredBugs.json​ に書き込みます。この例は、Studio の Mule プロジェクトからの設定 XML です。

Studio での XML 設定:
<file:config name="File_Read_Config" doc:name="File Read Config" />
<file:config name="File_Write_Config" doc:name="File Write Config" />
<flow name="xlsx-lookup" >
  <scheduler doc:name="Scheduler" >
    <scheduling-strategy >
      <fixed-frequency frequency="1" timeUnit="MINUTES"/>
    </scheduling-strategy>
  </scheduler>
  <ee:transform doc:name="Transform Message" >
    <ee:message >
      <ee:set-payload ><![CDATA[%dw 2.0
var myInput = readUrl("classpath://ourBugs.xlsx", "application/xlsx")
output application/json
---
myInput."Data" filter ((entry, index) -> entry."Assignee" == "Fred M")]]></ee:set-payload>
    </ee:message>
  </ee:transform>
  <file:write doc:name="Write JSON"
              path="/path/to/fredBugs.json"
              config-ref="File_Write_Config">
</flow>
  • Scheduler (​scheduler​) はフローをトリガーし、次のコンポーネント (Transform Message) を実行します。

  • Transform Message コンポーネント (​ee:transform​) は、​Assignee​ 列に ​Fred M​ の値が含まれるすべてのレコードを ​"Data"​ シートから返す DataWeave スクリプトを提供し、バイナリ XLSX 入力を JSON 出力に変換します。

  • File Connector の Write 操作 (​file:write​) は、​ee:transform​ から JSON ペイロードを受け取り、​fredBugs.json​ という名前のファイルにペイロードを書き込みます。