Dataweave не идентифицирует заголовки в файле Excel

#mule #anypoint-studio #dataweave

#mule #anypoint-studio #dataweave

Вопрос:

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

Я хочу извлечь данные из электронной таблицы Excel, но таблица, из которой я хочу извлечь данные, начинается со строки 4 на рабочем листе, а вывод из сообщения Transform равен null, что, как я предполагаю, связано с тем, что он не определяет имена столбцов, поскольку они находятся в строке 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>
  

Код Dataweave:

 %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

введите описание изображения здесь

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

Комментарии:

1. Мысль: можете ли вы использовать отдельный преобразователь, прежде чем обрезать первые 3 строки? Ваш заголовок будет таким же, просто измените header=false и тело должно быть payload[3 to -1] . Затем вы могли бы передать результат этого в свой скрипт выше.

2. Обновленный ответ.

Ответ №1:

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

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

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

Пример кода:

 <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>
  

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

 <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>
  

Комментарии:

1. Привет. Похоже, что эта опция недоступна в Mule 4 / Dataweave 2.0. Я тоже пытался добавить код, но, похоже, он тоже не работает. Есть другие предложения? Я обновил свой вопрос, чтобы включить XML сообщения о преобразовании.

2. Добавлены некоторые параметры mule 4.