excel 电源自动-检查有效日期

bjg7j2ky  于 2023-01-14  发布在  其他
关注(0)|答案(3)|浏览(129)

我有一个Power Automate流,它调用Office脚本来读取Excel工作簿中的特定单元格。该单元格应该具有格式正确的日期。如果格式正确,为了使Power Automate能够读取该日期,我使用以下表达式设置了一个变量:

addDays('1899-12-30', int(outputs('Run_script_2')?['body/result/DeliveryDate']), 'MM/dd/yy')

但是,如果该脚本的输出不是预期值(即8/9/2022而不是8/9/2022),则在尝试运行该表达式时流程中断。如何编写在没有预期Excel类型日期时不会失败的表达式?如果表达式无法计算实际日期值,我希望表达式等于null。

t1qtbnec

t1qtbnec1#

您可以检查NumberFormatCategory或单元格的特定NumberFormat以检查其格式是否为日期。

if (selectedSheet.getRange("A1").getNumberFormatCategory() == ExcelScript.NumberFormatCategory.date) 
...

if (selectedSheet.getRange("A1").getNumberFormatLocal() == "m/d/yyyy") 
...

您也可以将此布尔值返回到Power Automate,并相应地构建表达式。

rdrgkggo

rdrgkggo2#

下面是我解决这个问题的方法,因为我的用户使用Excel日期字段不止一个日期,比如输入“NA”、“Not Known”、“TBD”等。
对日期值使用INT()函数。使用“配置运行时间”设置将下一步骤配置为仅“失败”。将之后的步骤配置为“跳过”。
在我的例子中,在失败的情况下,我只是将excel值复制到一个字符串中,用于输出文件。如果INT()成功,我运行一个条件语句,因为我想清空未来的日期,但保留过去的日期

rekjcdws

rekjcdws3#

您可以尝试使用JavaScript的Date类来转换单元格中的日期。当您创建date对象的示例时,您可以在其构造函数中为它提供单元格中的日期值。然后,您可以调用date对象的toLocalDateString()方法并返回该方法。您可以在下面看到如何执行此操作的示例:

function main(workbook: ExcelScript.Workbook) {
      let selectedSheet: ExcelScript.Worksheet = workbook.getActiveWorksheet();
      let rang: ExcelScript.Range = selectedSheet.getRange("A1") //cell contains the value 8.9.2022
      rang.setNumberFormat("mm/dd/yyyy")
      let date: Date = new Date(rang.getValue() as string);
      return date.toLocaleDateString();
    }

相关问题