天天看點

嘗試:Script Lab,Excel 基礎操作(1)

準備工作

Script Lab 在 2018 年經曆了一次從頭到尾的重新編寫。雖然其視覺設計與 2017 版保持相似,但其技術堆棧已經過大修,為了能夠利用 React 和 Fabric React 的優秀性質。改進包括了:鍵盤可通路性、更快的運作速度、使用者可配置的設定。

但是為了保持代碼的簡潔性,思來想去還是犧牲以上優點,從目前預設環境(Production)暫時切換到 2017 版本的 Script Lab ,為此需要執行以下操作:

  1. 打開編輯器窗格,然後選擇或建立一個代碼段;
  2. 在編輯器的右下角,單擊cog圖示以打開設定;
  3. 在頁腳左側下拉清單中,選擇“Script Lab 2017”。
嘗試:Script Lab,Excel 基礎操作(1)

最小代碼

【對像層級】

上下文:context

工作簿:workbook 

工作表:sheet 

單元格:cell

【單元指派】單元值: [["HSOffice"]]

Excel.run
    (
    async (context) => {

        //
        const workbook = context.workbook;
        const sheet = workbook.worksheets.getActiveWorksheet();
        const cell = sheet.getCell(0, 0);

        //
        cell.values =
            [
                ["HSOffice"]
            ]
    }
    );      

【小技巧】代碼美化:Shift-Alt-F

嘗試:Script Lab,Excel 基礎操作(1)

Excel.run

我們先從代碼第一行代碼看起:Excel.run。在這裡 Excel 是命名空間,而 run 而是一個啟動函數(我暫時先這樣稱呼,直到找到官方的說法),接受一個函數作為其參數,前傳回一個對像(後面會提到用途)。而這個内部函數,其實是一個批處理函數,代表了真正的 Excel 操作。

批處理函數有一個代表宿主請求的上下文參數,該參數是與宿主(在這裡是 Excel 本身)進行通信的途徑。Excel.run 方法隻是傳向批處理函數傳遞了一個新的上下文請求,批處理函數才是整個代碼的核心部分,在這裡我們看到了最常見的處理方式:

const workbook = context.workbook;      

其實更典型的寫法,要會加上錯誤捕獲的部分。補充一點,Excel.run 其實還會傳回一個 Promise 對象(Promise在處理異步操作非常有用)。反正更為正統的寫法是,在啟動函數之後應該始終跟随.catch(錯誤捕獲),示例如下:

//啟動函數
Excel.run
    (


    //批處理函數
    function (context) {
        //批處理内容

        //傳回代理
        return context.sync();
    }
    ).catch
    (
        //異常處理
    );      
嘗試:Script Lab,Excel 基礎操作(1)