【问题标题】:Allow empty cell values of an excel sheet in mule 4在 mule 4 中允许 excel 表的空单元格值
【发布时间】:2020-01-16 02:20:31
【问题描述】:

在阅读 Excel 工作表时,我需要显示所有列值,即使它们为空。

但除非最后一个单元格有值,否则 mule 不会考虑空单元格。

我的要求是我需要映射所有的列值,即使它们是空的。

Dateweave 脚本如下所示:

%dw 2.0
var myInput = readUrl("classpath://Book1.xlsx", "application/xlsx")
output application/json
---
myInput.'Sheet1' map ($ mapObject {
    "$$" : $
})

HTTP 侦听器设置为:

<http:listener doc:name="Listener" doc:id="ed1c0abb-8f7a-4856-b305-d0a249a07c96" config-ref="HTTP_Listener_config" path="/test" outputMimeType="application/xlsx; tableoffset=A2; ignoreemptyline=false; header=true"/>

下面的图片可能会更好地展示:

【问题讨论】:

  • 给我一个 CSV 文件的内容来重新生成输入。此外,我确实检查了 xlsx 文件的读取器属性,并且没有任何东西会强制读取 AFAI 可以判断的空列。 docs.mulesoft.com/mule-runtime/4.2/…。不过有办法完成它,我会在我有时间的时候为你做,可能是今晚。
  • 感谢您的评论。 link
  • 我根据您的示例电子表格创建了一个 xlsx,并使用了您的示例 DW 脚本,但无法重现该问题。我在电子表格中的所有空白单元格的 JSON 输出中得到空字符串。在 mac 上使用 mule runtime 4.2.1 和 studio 7.3.2。

标签: json excel dataweave mule4


【解决方案1】:

如果可能,我将尝试仅使用 CSV 文件。如果你别无选择,试试这个,剩下的代码应该和你的 sn-p 一样:

var blank = myInput.'Sheet1' reduce (
    (e, acc=[]) -> acc ++ (e pluck $$)
) 
distinctBy $
reduce (
    (e, acc={}) -> acc ++ {(e): ""}
)
import mergeWith from dw::core::Objects
---
myInput.'Sheet1' map (
    blank mergeWith $
)

由于某种原因,我可能无法在最新版本的 studio 中读取和解析 xlsx(由于错误),但我使用的是上面的 sn-p。希望对你有帮助。

【讨论】:

  • 感谢您的回答。是的,它适用于这个问题。但我应该提供一个通用/可重用的解决方案。列名会随着不同类型的记录而改变。实际数据编织看起来像这样:``` %dw 2.0 import * from dw::core::Strings output application/json --- payload.'MASTER' map ($ mapObject { (camelize(lower(($$ replace " " with "_")))): if (isNumeric($)) ($ as String as Number) else $ }) ```
  • 那么你需要收集并获取所有字段的不同列表,因为你申请了mergeWith。等等……
  • 我更新了我的原始解决方案,以便您根据输入计算空白对象。唯一认为我改变的是空白对象,其余的都是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-08-24
  • 1970-01-01
  • 2015-09-01
相关资源
最近更新 更多