#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: В графическом интерфейсе:
- Щелкните правой кнопкой мыши на ярлыке «Полезная нагрузка» (левая панель).
- Нажмите на опцию «Конфигурация считывателя».
- Откроется графический интерфейс с несколькими параметрами, которые необходимо установить.
- Настройте «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.