UiPath Level 1-Lesson 9. Excel & Data Tables


簡介:

Excel是一種廣泛應用的表格處理軟件。本單元中,將介紹專門針對於Excel和DataTable型數據的活動以及與Excel交互的兩種不同方式等。

學習大綱:

  • 如何用Read Range活動從Excel文件中讀取信息
  • 如何操作DataTable
  • 如何篩選表格數據
  • 如何使用Append Range活動

1. 概念

1) Excel相關的活動:在App Integration - Excel分類下。 

2) DataTable相關的活動:在Programming - DataTable分類下。

3) Excel Workbook (工作簿) vs. Data Table

Workbook就是Excel文件,它可以包含各種類型的數據、工作表、也可以應用各種格式、布局、合並單元格等等。

Data Table是最簡單的表格數據,只包括行、列,也可以有標題行。


 

2. 實例1

目標:打開一個Excel文件並顯示它的內容,最后將它存到一個新的Excel文件中。

數據

方法

1) 首先,讀取數據。添加一個Excel Application Scope活動

在處理Excel文件時,添加的第一個活動總是Excel Application Scope活動。它是一個容器,其他與這個Excel文件相關的活動包括讀取、寫入等,都放在容器里運行。

2) 點擊瀏覽按鈕 並選取Excel文件。瀏覽窗口默認打開Project所在的文件夾。如果文件就在Project所在的文件夾下,部分路徑會省略。比如"xls\science.xlsx"表示Project所在文件夾下(已省略)的xls文件夾里的science.xlsx文件。

注意:Workbook Path參數也可以用變量代替來達到動態化。

3) 設置Visible參數。此處取消選擇Visible參數。

Visible參數如果選中,表示使用Microsoft Excel應用程序來讀取文件;如果未選中,則操作會在內部進行。

區別

使用Excel程序:必須安裝Excel軟件;可在同一個文件上運行多個進程;變化實時可見。比較適合調試程序和檢測程序進度。

直接訪問:不需要安裝Excel軟件;一個文件只允許一個進程使用;只能用於xlsx格式的文件;進程在后台運行。

4) 在Excel Application Scope容器里,添加一個Read Range活動

Read Range活動可以讀取Excel文件的一部分內容並把它存儲到一個Data Table里。

在Output里創建一個DataTable型變量DT1。在Input里,Range參數默認是空的,表示讀取整個工作表的數據,可以為它設置具體的范圍比如"A2:C3"。這里使用空值即可。

5) 接下來,顯示這個Data Table。添加一個Output Data Table活動

雖然活動名為Output,但它不會把結果顯示在Output面板上。該活動是將DataTable型數據轉換成字符串型數據,以便於顯示它。

在Input里填上DT1,在Output里創建一個新的String型變量strDT。 

 

6) 添加一個Message Box活動,並在Input里填入strDT,來顯示Data Table。 

7) 最后,把數據保存到一個新的Excel文件里。因為是新文件,要添加一個新的Excel Application Scope容器。

指定數據寫入的Excel文件所在的路徑。如果路徑下沒有該文件,則將創建它。

8) 添加一個Write Range活動

在Write Range活動的Input里填上需要寫入的DataTable型變量。StartingCell參數表示寫入數據的起始單元格。如果指定的單元格區域已經存在數據,Write Range會把舊的數據覆蓋掉

 

AddHeaders參數

在Read Range活動中,AddHeaders參數表示是否把第一行作為標題行;在Write Range活動里則表示,是否在寫入數據時添加標題行。


 

3. Excel和Data Table的其他常用活動

1) Append Range活動

和Write Range活動同樣是寫入數據,Append Range活動在工作表現有的數據之后寫入數據,不會覆蓋已有數據

2) Build Data Table活動

該活動可以創建一個DataTable型數據。

  • 單擊DataTable...按鈕以打開創建窗口。
  • 默認生成一行兩列的Data Table。點擊x號可以刪除行列,點擊+號可以添加新列。
  • 添加新列時會彈出New Column窗口。
  • 最后將創建的DataTable保存到Output變量里。

3) Sort Data Table活動

Input填入要排序的DataTable型數據;Output用來輸出排序后的結果;Sorting Column指定要排序的列,它有三個參數,可任選一個來指定列。 

  • Column參數:指定實際的Column對象。
  • Index參數:指定列號。注意,DataTable數據都是從0開始索引的 (0-indexed),即第一列的列號是0。
  • Name參數:指定列標題。

4) Read Cell活動 Write Cell活動

5) Select Range活動:選中單元格或單元格區域。

6) LookUp Range活動:在工作表里查找某個特定值。


 

4. 實例2

數據:大約有300條數據。

目標1:

篩選並顯示年齡小於30且薪水大於$100,000的記錄。

方法1:

1) 添加一個Excel Application Scope容器,在里面添加一個Read Range活動來讀取數據,將數據存儲到變量DT1中。

2) 在Excel Application Scope容器外添加一個Filter Table活動篩選數據。

Filter Rows Tab:

  • Input DataTable:數據源。
  • Output DataTable:篩選結果。可以和Input DataTable使用同一個變量。
  • Keep Rows/Romove Rows:保留/刪除符合條件的行。
  • Column:列標題,必須是String型。
  • Operation:大於、小於等條件。
  • Value:支持多種類型的數據,可以不是String型。
  • :刪除/添加新的條件。
  • :設置多條件篩選的邏輯:And或Or。單擊And即可切換成Or。

Output Columns Tab:

  • Keep Columns/Remove Columns:保留/刪除篩選條件的所在列,此例中為Age和Pay列。

 3) 添加一個Output Data Table活動Message Box活動來顯示篩選結果。

 

目標2:

使用已有的數據創建一個新的DataTable,包括姓名、年齡和收入三列。

方法2:

1) 添加一個Excel Application Scope容器,在里面添加一個Read Range活動,選上Add Headers參數,將數據存儲到變量DT1中。 

2) 在容器里添加一個Build Data Table活動,添加Name、Age和Income三列,並存儲到變量newDT中。

3) 在容器外添加一個For Each Row活動,在In里設置在哪個Data Table中循環。

  • For Each Row活動是Data Table專用的,它可以遍歷Data Table里的每一行。For Each活動比較通用。

4) 在For Each Row活動的Body中添加三個Get Row Item活動,它可以輸出當前行里某個特定單元格的值。

  • ColumnIndex:填索引號,從0開始。
  • ColumnName:填列標題,前提是選中Add Headers參數。
  • Row:填row即可。

*ColumnIndex和ColumnName選擇后者可以更好的適應添加/刪除列的情況。

 

5) 在最后一個Get Row Item活動之后添加一個Add Data Row活動

  • Array Row:要添加的信息,以數組的形式出現。此例中填入{name, age, income}。
  • DataTable:要添加行的DataTable。此例中為newDT。

6) 在For Each活動的下面添加一個Excel Application Scope容器。在其中添加一個Write Range活動寫入數據。


 

5. 練習1

數據

要求:通過三種不同的方式得到A列和B列單元格的和,並寫入C列。

  • 方法1:Excel保持打開的狀態並實時寫入數據,你可以看見每一行的變化。
  • 方法2:Excel處於關閉的狀態,將每一個列的值存儲到Datatable中,最后把得到的結果一次性寫到Excel里。
  • 方法3:使用Excel公式計算。

方法1:

  • 添加一個Excel Application Scope活動。填入數據所在的工作簿的完整路徑,確保Visible參數被選中。
  • 在Excel Application Scope容器里添加一個Read Range活動。設置Range參數為以讀取整個工作表,將讀取的數據存儲到變量inputsTable中。
  • 在Read Range活動后添加一個For Each Row活動,設置該活動在inputsTable中循環。
  • 在For Each Row容器里添加一個Assign活動。創建一個Int32型變量rowIndex,將inputsTable.Rows.Indexof(row)+1賦值給rowIndex。
    • 這樣做使rowIndex的值等於目前正在For Each Row活動中循環的行在Excel中的行號。+1是因為DataTable的行號是從0開始的。
  • 在Assign活動后添加兩個Get Row Item活動
  • 第一個Get Row Item活動設置ColumnIndex參數為0 (A列),Row參數為row (臨時循環變量),將讀取的數據存儲到變量valueA中。
  • 第二個Get Row Item活動設置ColumnIndex參數為1 (B列),Row參數為row (臨時循環變量),將讀取的數據存儲到變量valueB
  • Below that activity, find and add two Get Row Item activities
  • 添加一個Assign活動。創建變量valueC,使它等於valueA+valueB。
  • 添加一個Write Value活動。設置Range參數為"C"+rowIndex.ToString,設置Value參數為valueC。  

  

  

方法2:

(不使用Excel Application Scope活動,自動化在內部完成。)

  • 添加一個Read Range活動,設置工作簿的路徑,創建變量 inputsTable
  • 添加一個Add Data Column活動,設置ColumnName參數為C,設置DataTable參數為inputsTable。設置Argument Type為object。

  

  • 添加一個For Each Row活動,並在inputsTable中循環。
  • For Each Row活動的容器中添加兩個Assign活動。一個把row(0).ToString的值賦給變量valueA;一個把row(1).ToString的值賦給變量valueB
    • row(0).ToString和row(1).ToString把對象轉換為更便利的文本型的數據。
  • 再添加一個Assign活動,把Integer.Parse(valueA) + Integer.Parse(valueB)的值賦給row(2)。
    • Integer.Parse是一種VB方法,可以把字符串型數據轉換為數字型數據。
  • 在For Each Row活動的后面添加一個Write Range活動,設置DataTable參數為inputsTable,設置Starting Cell參數的值為空,並設置一個新的工作簿路徑。
    • 如果文件不存在,UiPath會自動創建該文件。

  

方法3:

(使用Excel公式計算。)

  • 添加一個Excel Application Scope活動。設置工作簿的路徑,選中Visbility選項。
  • 在Excel Application Scope容器里添加一個Read Range活動,創建DataTable型變量inputsTable
  • 添加一個Assign活動,將 inputsTable.Rows.Count賦值給一個新的變量rowsCount
  • 添加一個Write Value活動,設置寫入的Range為:"C1:C" + rowsCount,設置寫入的值為"=SUM(A1,B1)"。
    • Excel會自動將寫入的值按照行號迭代。

   


 

 

*本課使用的新活動、方法、函數等:

  • Excel Application Scope
  • Read Range
  • output data table
  • Write Range
  • Append Range
  • Build Data Table
  • Sort Data Table
  • Read Cell
  • Write Cell
  • Select Range
  • LookUp Range
  • Filter Table
  • For Each Row
  • Get Row Item
  • Add Data Row
  • Write Value
  • Integer.Parse:VB方法,可以把字符串型數據轉換為數字型數據。
  • Rows.Count


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM