Dataweave не идентифицирует заголовки в файле Excel - PullRequest
1 голос
/ 26 марта 2019

Я использую Mule 4 и Anypoint Studio 7.

Я хочу извлечь данные из электронной таблицы Excel, но таблица, из которой я хочу извлечь данные, начинается со строки 4 на листе, а вывод из сообщения Transform является нулевым, что, как я полагаю, связано с тем, что он не определяет имена столбцов как они в строке 4, а не в строке 1.

Как я могу это исправить?

Dataweave XML

        <ee:transform doc:name="Transform Message" doc:id="1bdda7fe-2abe-48d3-8bc5-42a94c12b6b9" >
            <ee:message >
                <ee:set-payload ><![CDATA[%dw 2.0
input payload application/xlsx header=true
output application/json
---
{
    "Customers": payload."CUSTOMERS" filter $$ > 2 map ( cUSTOMER , indexOfCUSTOMER ) -> {
        "Type": cUSTOMER.type,
        "Category": cUSTOMER.category
    }
}]]></ee:set-payload>
            </ee:message>
        </ee:transform>

Код данных:

%dw 2.0
input payload application/xlsx header=true
output application/json
---
{
    "Customers": payload."CUSTOMERS" filter $$ > 2 map ( cUSTOMER , indexOfCUSTOMER ) -> {
        "Type": cUSTOMER.type,
        "Category": cUSTOMER.category
    }
}

Excel

enter image description here

Спасибо за любую помощь

1 Ответ

1 голос
/ 27 марта 2019

Вы можете установить свойство tableOffset для столбца, в котором данные начинаются в формате xlsx.

Для мула 3: В графическом интерфейсе:

  1. Щелкните правой кнопкой мыши на ярлыке «Полезная нагрузка» (левая панель).
  2. Нажмите на опцию «Настройка считывателя».
  3. Графический интерфейс открывается с возможностью установки нескольких параметров.
  4. Настройте "tableOffset" для начальной ячейки таблицы. в вашем примере А4.

Пример кода:

<dw:transform-message doc:name="Transform Message" metadata:id="9abf7128-71b8-4610-8fca-7ceda17f852e">
            <dw:input-payload mimeType="application/xlsx">
                <dw:reader-property name="tableOffset" value="A4"/>
            </dw:input-payload>
            <dw:set-payload><![CDATA[%dw 1.0 
%output application/json
---
payload]]></dw:set-payload>
        </dw:transform-message>

Для Mule 4 необходимо установить свойства считывателя для источника события:

https://docs.mulesoft.com/mule-runtime/4.1/dataweave-formats#reader_writer_properties

Например, если вы читаете xlsx из файла:

<file:listener doc:name="On New File" config-ref="File_Config" outputMimeType='application/xlsx tableOffset="A4"'>
  <scheduling-strategy >
    <fixed-frequency frequency="45" timeUnit="SECONDS"/>
  </scheduling-strategy>
  <file:matcher filenamePattern="myfile.xlsx" />
</file:listener>

Перед преобразованием вы также можете попробовать использовать простое преобразование для добавления новых свойств считывателя:

<set-payload value="#[output application/xlsx tableOffset='A4' --- payload]" />
        <!-- Then your normal transformer -->
        <ee:transform xsi:schemaLocation="http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd"
            doc:id="bed303c7-1549-45da-af58-10c4ad937926">

            <ee:message>

                <ee:set-payload><![CDATA[%dw 2.0
output application/json --- payload]]></ee:set-payload>
            </ee:message>
        </ee:transform>
...