Apache NiFi用ConvertExcelToCSVProcessor转Excel到CSV年份从yyyy转yy如何避免
解决ConvertExcelToCSVProcessor转换日期丢失4位年份问题
该问题的核心原因是ConvertExcelToCSVProcessor默认读取Excel单元格的格式化显示值而非原始存储值,若Excel单元格默认短日期格式仅展示2位年份,转换后就会丢失长年份信息,可通过以下两种方案解决:
方案1:直接修改ConvertExcelToCSVProcessor配置
- 进入组件配置页的Properties标签页
- 将
Dates as Strings属性设置为true,强制组件将日期单元格以字符串形式读取,避免默认格式转换 - 新增/修改
Spreadsheet Date Format属性,填入值为d/M/yyyy(注意月份为大写M,避免和分钟的小写m混淆) - 若存在时间戳格式的单元格,同步将
Spreadsheet Timestamp Format配置为对应完整格式即可 - 保存配置重启组件后重新执行转换,即可保留4位年份
方案2:多日期格式混合场景适配
如果你的Excel文件中存在多种不同格式的日期列,全局指定格式会导致部分列解析错误,可使用该方案:
- 先将ConvertExcelToCSVProcessor的
Dates as Strings设置为true,不指定全局日期格式 - 在该组件下游添加
UpdateRecord处理器,逐列做日期格式补全:- 配置Record Reader为
CSVReader,Record Writer为CSVRecordSetWriter - 添加自定义属性,规则为
/你的日期字段名:${field.value:toDate('d/M/yy'):format('d/M/yyyy')} - 该规则默认将00-29的2位年份识别为2000-2029,30-99识别为1930-1999,可根据业务需求调整解析逻辑
- 配置Record Reader为
注意事项
- 配置日期格式时严格区分大小写:
M代表月份,m代表分钟,yyyy代表4位年份,yy代表2位年份,格式填写错误会直接导致解析失败 - 若Excel存在多个不同格式的日期列,优先选择方案2逐列指定转换规则,兼容性更高
内容的提问来源于stack exchange,提问作者user3520253
相关产品推荐
相关产品推荐

