3

我需要从 excel 文件(大约 3000 行)中获取 NumberFormat,然后我编写了一个简单的脚本,将其从 A 列逐行复制到 C 列。10 分钟后,我尝试将此脚本与 Power Automate 一起使用。

我已经将超时设置为 60 分钟,但似乎我的租户配置总是在 10 分钟后中止它。

这是我的脚本:

    function main(workbook: ExcelScript.Workbook) {
    let sheet = workbook.getWorksheets()[0]

    let range = sheet.getUsedRange(true);
      let rows = range.getUsedRange(true).getRowCount();
      let cols = range.getUsedRange(true).getColumnCount();
      
      for (let row = 2; row <= rows; row++) {
        sheet.getRange("C" + row).setValue(sheet.getRange("A" + row).getNumberFormat())
      }
}

有没有更简单的方法可以将 NumberFormat 从一列复制到另一列,有人知道更好的方法吗?

4

2 回答 2

2

请确保在提出这些问题时放置 Office-Scripts 标签,因为这是 Office Scripts。你不需要循环来实现这一点。您可以像下面的代码一样使用getNumberFormats() 。

function main(workbook: ExcelScript.Workbook) {
  let sheet = workbook.getWorksheets()[0];
  let rowCount = sheet.getUsedRange(true).getRowCount();
  let numFormats = sheet.getRange("A1:A" + rowCount).getNumberFormats();
  let newRng = sheet.getRange("C1:C" + numFormats.length).setValues(numFormats);
}

编辑 21 年 4 月 23 日

如果您只想获得缩进级别,那么您可以只在 C 列中插入此公式,而不是获取数字格式。

在此处输入图像描述

=IFERROR(LET(indentLevel,FIND("[",FILTER(A:A,A:A<>""),1),SWITCH(indentLevel,4,1,6,2,8,3,10,4,12,5)),"Other Formula Here")

这是 Office 脚本

function main(workbook: ExcelScript.Workbook) {
  let sheet = workbook.getWorksheet("Sheet1");
  sheet.getRange("C1")
    .setFormulaLocal("=IFERROR(LET(indentLevel,FIND(\"[\",FILTER(A:A,A:A<>\"\"),1),SWITCH(indentLevel,4,1,6,2,8,3,10,4,12,5)),\"Other Formula Here\")");
}
于 2021-04-19T11:09:13.903 回答
0

这是我使用 for 循环的 VBA 代码:

Sub GetHierachyParents()
    Set appExcel = holeAnwendung("Excel.Application")
        
    Set wbkExcel = appExcel.Workbooks.Open("C:\impport.xlsx")
                    
    Set wksExcel = wbkExcel.Sheets("Hierachy")                      
    countRows = wksExcel.Range("A1").End(xlDown).Row
    
    For i = 2 To countRows
        Node = 0
    
        If (Len(wksExcel.Range("A" & i).NumberFormat) - Len(Replace(wksExcel.Range("A" & i).NumberFormat, "[-]", "")) > 0) Then
            IndentLevel = (Len(wksExcel.Range("A" & i).NumberFormat) - Len(Replace(wksExcel.Range("A" & i).NumberFormat, " ", "")) - 1) / 2
            Node = -1
        Else
            IndentLevel = (Len(wksExcel.Range("A" & i).NumberFormat) - Len(Replace(wksExcel.Range("A" & i).NumberFormat, " ", "")) - 5) / 2
            Node = 0
        End If
        
        sql = "INSERT INTO impTemp0 (F1, F2, F3, F4) VALUES ('" & wksExcel.Range("A" & i) & "', '" & Replace(wksExcel.Range("B" & i), "'", "") & "', " & IndentLevel & ", " & Node & ")"
        CurrentDb.Execute sql
    Next i
    
    CurrentDb.Execute "UPDATE [impTemp0] SET Parent = DMAX('id','[impTemp0]','[impTemp0].id<' & [impTemp0].id & ' AND [impTemp0].Level=' & [impTemp0].Level-1 & '')"
     
End Sub

这是前 8 行的示例:

"  [-] "@
"    [-] "@
"      [-] "@
"        [-] "@
"          [-] "@
"                 "@
于 2021-04-22T12:32:23.570 回答