顯示具有 Office 標籤的文章。 顯示所有文章
顯示具有 Office 標籤的文章。 顯示所有文章

2019年10月10日 星期四

[閱讀] 《賦權:當責式管理的延伸實踐》 當責-授權-賦能 的運作方式

《賦權:當責式管理的延伸實踐》
張文隆,商周出版,2010

剛剛 8 月的 177 期 經理人月刊,以「帶出得力部屬的11堂賦權課」為主題,當中對這本書和作者的名字有點印象,其後圖書館就留意到這本書了。「賦權」Empowerment,或者最初我接觸時所聽「賦能」Enabling 的概念,一直是個希望更好地做到的事。怎樣才能讓團隊成員有能力做出成果,有所擔當,從工作中得到滿足,感到的是成長而非消磨?剛開始閱讀時,覺得只是大堆文字鋪陳說教著一個簡單的理念;但愈讀下去就愈是欣賞,當看到它的脈絡之後,和它對每個小步都有深入的闡釋。是值得細閱的書。

Accountability (當責)


這一切從 Accountability (當責) 開始講起。本書認為責任感有兩個層次,「當責」是「負責」的提升。負責者有責任確實執行被交付的任務、把事情做對;當責者更是有責任去交出最後成果、做對的事情。這說法是怎麼樣?想起2017年龍尾人工泳灘工程中的遷移生物行動,職員指有關的搬遷手法是按規定而做。事情是做了,但所謂方法是否做到保護生物的原意乗成果?又例如,工作上這個電郵我是寄出了,要我做的事在行動上是做了,但我是否有跟進目的有否達到?當責的態度就像《7 Effective Habit》中的首要習慣-主動積極。如果區分一個陷入受害者循環的人,總在推諉卸責、怨天尤人;他要提升到負責;更要向外再跨出一步,會主動想像「我該做些什麼,......,以交出我所期望的成果?」。

2019年9月21日 星期六

[閱讀] 《父母效能訓練》 的 「行為四角形」

今日分享一本書《父母效能訓練》,介紹一套同名 Parent Effectiveness Training ( P.E.T. ) 的家長訓練課程。所教授的核心技巧是積極聆聽、「我」信息、轉換法、和無輸家的衝突協議。而「行為四角形」 是這套方法內,認識在什麼情況用什麼技巧的關鍵。今日就著書本中的內容,介紹一下 P.E.T. 中的 「行為四角形」 的概念。

在開始之前,會先循書本的切入角度了解這套家長訓練的背景和理念。


在1962年由心理學家的 Thomas Gordon 提出。對當時的青少年成長、家庭問題中,他看到往往父母只有被責備,而無接受訓練的機會。每年有無數的新手爸媽展開人生中最困難的任務—迎接完全無助的嬰兒。他們負起照顧孩子身體及心理健康的責任,並將孩子養育成具有生產力、合作、能有所貢獻的公民,還有什麼被此工作更為困難吃力呢?然而有多少父母接受相關的訓練?

許多父母仍然沿用它們上一代的方式教養子女。其實在心理學、兒童發展以及其他的行為科學,皆提供有關孩子、父母、人際互動、如何協助他人成長、為他人創造健康的心理情境等方面,一些豐富的新知。

他最初擬定的目標是教導父母一些專業諮詢師、治療師所使用的技巧,以協助孩子克服情緒的困擾和不適應的行為。即使不曾修過大學心理學課程的父母也能學習這些技巧,並且懂得如何有效地適時地幫助他們的孩子。

父母是人,不是神

本來是兩個單獨的個體,突然間轉變為先生和太太,以及父母親的角色。嚴格而言這種轉變並非好現象,因為它會導致父母忘了自己仍然是人,只要人就會犯錯,人有其限制,人有真實的感情。當他們失去了自我,更忘了他們的情緒可能因時因地而不同,他們無法自由地表達自己,以為父母的身份必須優於他個人。

這訓練告訴父母無需丟棄人性,而成為稱職的父母。你能夠接受自己面對孩子時,所擁有的正面及負面的感覺。 真實的父母,有時對孩子的某些行為可以接納,有時卻有無法接納。

2019年9月14日 星期六

[閱讀] 《冰山在融化》 變革的步驟與溝通

《冰山在融化》/《Our Iceberg is Melting》,從前看過網上版本的介紹,是一本講述如何在企業內推動變革的寓言故事,今次經過圖書館看到。心想不一定要是公司的大型變革,面對在很多程序中的小改動,是否都可以有學習之處?而書中的八大步驟分別是:

「搭建平台」
步驟一:建立危機意識
幫助大家意識到變革的必要,以及馬上採取行動的重要。
步驟二:成立領導團隊
確保成立一個強而有力的領導團隊,一個具有領導才能、公信力、溝通技巧、權威、分析技能和危機意識的團隊。

「做出決定」
步驟三:提出願景
讓大家清楚認知變革後的未來與過去會有什麼不同,預見願景落實的步驟。


「實行變革」
步驟四:溝通願景
盡可能讓全體成員理解並接受變革願景和策略
步驟五:授權員工參與
盡可能為那些願意投身變革的人掃除障礙。
步驟六:創造近程戰果
盡快取得一些看得到成果的勝利
步驟七:鞏固戰果並再接再厲
取得初步成功後要更加努力,不斷進行變革,直到將願景變為現實。

「鞏固成果」
步驟八:將新做法深植企業文化中
堅持新的行為方式,確保他們成功並日益強大,直到取代舊傳統,成為企業文化。

故事中面臨融化危機的冰山,可以是整個公司、部門,但應該也可以是一個職場小薯仔,日常所面對的工作?只是當然地規模有別。例如,小薯經常出現的情況是,有事情發生,留意到一些徵兆,預計日常流程需要改變。希望提點自己可以這樣做:

1. 馬上讓大家看到情況。挑選一個小型的領導團隊,大扺1至2人的SME/Change跟進。
2. 讓團隊研究處理的方案,提出主意和步驟。(耐心和追蹤進度)
3. 向全體成員解釋方向和做法。了解執行者會面對什麼困難,並嘗試協助掃除。盡快有一些可見的成果。累積成果直到完成改變。
4. 將新流程傳送給所有人,監察新流程的執行。

此外,現實會面對的困難,可能是如何順利推動每個步驟當中涉及的參與者。企鵝弗雷德每天觀察冰山,本身是可算是冰山狀況的SME,但這方面的知識冷門得其他企鵝沒什麼認識,大家因習慣而既有的信念是:冰山是大家安穩無憂的家。所謂推動變革,一個重要部份就是推動這些「企鵝」/「人」們去進行變革。

就像在研究型的弗雷德推動行動派的主管愛麗思時,最有效的是帶她親自看看。為準備在時間匆匆的領導層會議中說服高層,他要預先了解與會者的特質,才決定以看得到的模型輔助和動之以情的說話來闡述主張。然後讓大眾理解現況時,也是類似的方法,可以眼見的模型作類比。

而企鵝國王路易士成立團隊後,先是要聯繫大家關係,讓成員對團隊有信心,再由成員不斷發掘和討論各種方案。決定方案後,就是溝通上有親和感染力的巴迪和路易士向群體交待方向,帶動大家。過程中群體內成員可能有想法可以幫助變革的過程,團隊就去支持這些願意貢獻的小企鵝實踐他們的計畫。

相比步驟,這份推動力的作用更能在不同層面的工作有所作用。 無論是Change,以至恆常Routie的、各種零碎Ad hoc 的。回到小薯的辦公室工作上,看完這本書後的想法,一個立即可以嘗試的行動,就是留意一下這 8 個步驟是否改善這些日常的改變。

2018年7月21日 星期六

[VBA] 打開 IE 瀏覽器去操作和列印

辦公室之用,之前寫過如何用 VBA 控制 IE 去將網頁列印成 PDF。但後來遇到在 PDF 軟件上的問題,本應可以將存檔也自動化的步驟失效了,而自己對這工具的需求也減少了,就未有再檢視如何改進它。最近重新拾起辦公室內的一些VBA小工具,看見能發揮效果的感覺真不錯,所以,一於重新嘗試如何改進這個自動化的小工具,先整理之前的方法。

在基本的VBA功能以外,還有兩個 Library 需要先引入:打開 Reference - VBAProject,勾選引入 Microsoft Internet Controls 及 Microsoft HTML Object Library。 下面代碼中的 "ShellWindows" 會得到 Windows 下的 Shell 窗口對象,可以用来操控 Windows的文件夹和 IE 瀏覽器。 "InternetExplorer" 顧名思義可以控制Internet Explorer。 取得某個 IE 的控制後,會需要一點 HTML 語法 和 DOM 結構的認識,之後用 GetElementByID("") GetElementsByTagName("").Item(n)、 GetElementsByClassName("").Item(n) 之類的方法去取得HTML 當中的元素; 甚或如透過 .Style.display 、 .innerText 等屬性去改變網頁的顯示。

(直接印紙的話仍可以做到,只是要轉成 PDF 的話就要看 PDF 軟件的造化..... 可能下周試用 Sendkeys處理 Print Dialog?其實VBA又是否能做到其他語言中的Web Scraping方式呢,大概是未有Library的第 3 方支持?。 另外,因為保守地想給予足夠時間讀取網頁,所以也加入很多等待的時間。)

Sub IEautoprint
    
    Dim shellWins As ShellWindows
    Dim myIE As InternetExplorer
    
    Set shellWins = New ShellWindows
    Set mySheet = ThisWorkbook.Sheets("SecuritySheet")
    Set myIE = CreateObject("InternetExplorer.Application")
    StartRow = 2
    MaxRow = 65536
    
    '打開網址
    myIE.Navigate "http://website.com/fullpath"
    Application.Wait (Now + Time("0:00:01")) 

    ' Optional - 以 Title 標題去選擇視窗
    If shellWins.Count > 0 Then
        For i = shellWins.Count - 1 to 0 Step -1
            If (shellWins.Item(i).LocationName = "Window Title") Then
                Set myIE = shellWins.Item(i)
                myIE.Visible = True
                Exit For
            End If
        Next
    End If
    
    ' Loop Excel mySheet 中的 Input, 重覆:遞交HTML表單、改變頁面顯示、列印 等動作 
    For x = StartRow To MaxRow
        ' 填入HTML的表單及遞交
        Do While .ReadyState <> 4
        Loop ' 等待網頁載入完畢
        myIE.Document.Form(0).Elements("CTYPE").Value = mySheet.Cells(x,1).Value 'Html 表單中的元素
        myIE.Document.Form(0).Elements("CCODE").Value = mySheet.Cells(x,2).Value 'Html 表單中的元素 
        myIE.Document.Form(0).Submit 'Html 表單Submit
 
        ' 改變 HTML中的Style屬性去影響 Expand/Collapse 
        Do While .ReadyState <> 4
        Loop
        On Error Resume Next
        If Not (.Document.getElementbyID("hide105") Is Nothing) Then
            myIE.Document.getElementbyID("hide101").Style.display = "None"
            myIE.Document.getElementbyID("hide105").Style.display = "Block"
        End If
        
        ' 列印
        myIE.ExecWB 6, 2   'ExecWB指令, OLECMDID_PRINT=6, OLECMDEXECOPT_DONTPROMPTUSER=2
        Application.Wait (Now + TimeValue("0:00:02")) ' 等待特定的時間讓檔案建立
        
        Do While .Busy Or .ReadyState <> 4
        Loop
        
        ' 新一格沒有內容時完結 => Done~!!
        If mySheet.Cells(x+1, 1).Value = "" Then
            GoTo LastLine            
        End If
    Next
' 完結時的處理LineDone:
    MsgBox "Done"
    Set shellWins = Nothing
    Set myIE = Nothing
End Sub


ShellWindowshttps://msdn.microsoft.com/en-us/library/windows/desktop/bb773974(v=vs.85).aspx
InternetExplorerhttps://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/platform-apis/aa752084(v=vs.85)
ExecWB 的 IOleCommandTarget interfacehttps://docs.microsoft.com/en-us/windows/desktop/api/docobj/ne-docobj-olecmdid
OLECMDIDhttps://docs.microsoft.com/en-us/windows/desktop/api/docobj/ne-docobj-olecmdid

2018年1月19日 星期五

[PowerShell] [Office] 用 Regular Expression 轉換日期格式 (US/GB)

前日上班的車程中,想起同事偶爾會碰到日期格式(美式/英式)的問題。雖然可以在打開Excel,為資料分列(Text to Columns)時做處理,去指定每列資料讀取時的格式。但想到要指示得人人明白卻不太易,能否有個只需簡單一按的小工具,可以做美式/英式間的格式轉換呢?

Office 中的問題,PowerShell 解決。也學到一些Regular Expression(正則表達式)的運用:
$inputfile = "test.csv"

(Get-Content $inputfile) | 
Foreach-Object {$_ -replace "([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})", '$2/$1/$3'} | 
Set-Content '_output.txt'


部份 Regular Expression 的解釋:
字元/符號 範例 說明 成立例子
一般字元 / 含字母 “/” 的字串 25/12
^ ^A 比對字串開始位置AB
$ C$ 比對字串結束位置 ABC
\e\^2避開特殊字元 e^2
[......] B[aeiou]t 比對 [......] 內的任意字元 Bit
Bot

[0-9] [0-9] 比對0到9的任意字元,另有[a-z]和[A-Z]等用法 9
{n} B{2} 比對{n}前的字元n次,n必為正整數 BB
{n,m} [0-9]{2,4} 比對{n,m}前的字元至少n次但最多m次,n,m均為正整數 01
2389

(x) ([0-9]+)/([0-9]+) 比對 x 並將符合的部分存入一個變數 可比對 “123/45” 中的 “123” 、 “45”, 並將這個比對得到的字串設定至變數 \$1 和 \$2







加入給使用者的簡介部份:
$rePattern = '([0-9]{1,2})/([0-9]{1,2})/([0-9]{4})'
Write-Host "This will do date-format conversion for your AA/BB/CCCC into BB/AA/CCCC,"
Write-Host "Output as '_converted.txt'. Enjoy."
Write-Host ""
$fileRaw = Read-Host -Prompt 'Input your filename (same folder, ever with file extension): '
(Get-Content $fileRaw) | Foreach-Object {$_ -replace $rePattern, '$2/$1/$3'} | Set-Content '_convert.txt'


對這類辦公室日常出現的問題,有時太重技術層面去應對了就算的話,也明白就像是諸侯舞庶人之劍的感覺。 而且,這個日期格式的問題本來已有專案去處理和做了改變,好處是應該可以更完善的解決問題。但世上總有意外或突然的需要,再啟動一個項目的形式,過程往往會快費較長時間,而小修小補就是quick-and-dirty。

再者,參考使用者自己也會用的方法,就好像社區提案的概念,這些方案可能更切合用家的需要。如果能讓人人都有能力和空餘可以做些小創新、小改變,應該對人對己都是好處吧。

2017年6月25日 星期日

[PowerShell] [Office] 自動執行應用程式之間的複製貼上

簡單的補充一篇早前返工時的嘗試,大概這個方法還可以用在其他平台/情況。

話說有個軟件的用家介面在顯示一些設定資料的版面上,沒有「匯出」功能,只讓人逐格地Copy & Paste。不想人手這麼耗時,就找方法來自動Copy&Paste抄寫到Excel中。

# 用家設定參數, 
# $count: 這裡預執行次數=行數-1;
# $winTitle01: Copy的應用程式標題; 
# $winTitle02: Paste的應用程式標題;
param(
$count = 36, 
$winTitle01 = "This Platform x.xx  [ USER - ENVIRONMENT ]",
$winTitle02 = "Book1 - Excel"
)

add-type -AssemblyName microsoft.VisualBasic  #載入VB的部件。
add-type -AssemblyName System.Windows.Forms  #載入System.Windows.Forms的部件。

start-sleep -Milliseconds 1000 #暫停1000微秒
#For-Loop 執行for ($i = 1; $i -lt $count; $i++) { 
    Start-Sleep -Seconds 1  #暫停1秒
  [Microsoft.VisualBasic.Interaction]::AppActivate($winTitle01)  #啟動已在執行中的應用程式。
  [System.Windows.Forms.SendKeys]::SendWait("{DOWN}^(c)")  #傳送指定的按鍵至使用中的應用程式,然後等待訊息的處理。
    Start-Sleep -Seconds 1
  [Microsoft.VisualBasic.Interaction]::AppActive($winTitle02)
  [System.Windows.Forms.SendKeys]::SendWait("{DOWN}^(v)")
}

Powershell - Add-Type
https://ss64.com/ps/add-type.html

MSDN - Interaction.AppActivate Method (String)
https://msdn.microsoft.com/en-us/library/x57y7863(v=vs.110).aspx

MSDN - SendKeys.SendWait Method (String)
https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys.sendwait(v=vs.110).aspx

MSDN - SendKeys Class - KeyStoke的對應表
https://msdn.microsoft.com/en-us/library/system.windows.forms.sendkeys(v=vs.110).aspx

2017年6月1日 星期四

[PowerShell] [Office] 快速完成文字檔「搜尋取代」字串的工作

這張圖的設計者應該就是Developer,我也幾喜歡這張圖,但我畢竟不是IT (所以出來寫的code大概在專業眼中會看出奇怪,用的程式也雜亂)。在營運部門的工作中有時接到奇奇怪怪的問題和要求,應不應該做、如何做,都是要討論的問題。其中一個就算要做也是相關的技術部門比我們更適合處理的情況,就是一些批量處理資料庫數據的情況,最近就有個類似的情況。也許我應該也要多站在後面抱頭、蒙眼、尖叫⋯⋯

2016年8月7日 星期日

[Excel] 偷看加密的VBA Project Code

因為剛剛放假去了一趟意大利旅遊而沒有更新。回到香港已經兩個星期了,本來打算回來就寫這次的遊記,但才寫到第2天的事,很多都還在整理當中。回港當日一下機就帶著行李直接回Office,不過那星期就在工作上遇到一個特別的發現,值得先記下來充撐充撐⋯⋯話說之前一項專案找了 IT Team寫了一個Excel的工具來做一項數據處理的工序。最近隨著這項目的更新,我們需要另外加入新的運算程序。在同事研究該怎樣做的時候,發現了原來可以輕易破解加密了的Excel VBA Project。就算無意自己去改動IT的出品,對「原來有這辦法」就感到很有趣。日後也是一個好機會去了解下別人的專業角度如何寫Code。

大致上:這方法是用十六進制編輯器-Hex Editor 去打開檔案,找尋並修改檔案中特定的識別字串,就可在打開檔案時除掉加密保護。(這方法是試在辦公室的Window機Office2013。而現在用自家電腦準備以下圖片時知道,Mac機的Office 2011在打開最後那個修改過的檔案時,有不同的處理,所以偷看不到。)

  • 常見帶Macro的Excel 會存成 xls 或 xlsm 副檔名的檔案,而這方法用在xls檔上。因為我手上的是xlsm,所以要做一個另存新檔的步驟,存成xls檔。
  •  用Hex Editor打開檔案,若是自家電腦可以找Notepad++的外掛,工作的電腦可以抓網上的Online Hex Editor (如 https://hexed.it/)。找尋"DBP"並修改為"DBx"。然後匯出檔案。
  • 這時打開剛修改過的檔案,過程中會出現錯誤訊息,可以選擇略過錯誤。然後進入VB Editor,會發現已經可以檢視程式碼(Office 2011只能選擇"開啟並修復",打開後Module部份不見了)。這時最好也重新設定/解除VBA Project的加密,並另行存檔。

後話:在嘗試這方法時,也想起的當年的PC遊戲-三國志曹操傳,就有使用十六進制編輯器的修改法。

2016年6月4日 星期六

Office Life - 外賣膠飯盒的重用試驗

自備飯盒的測試不敵自己的玻璃盒對熱麵的不方便,放低了一段日子後,但外賣時老是帶點猶豫。最近隔離位的同事提到他也會買把早餐的塑膠碗重用幾次,覺得這也不失為一個方法。這樣就解決了飯盒的設計如何適合餐廳運作和我所點的食物這些問題。也想起另一個重用的例子是樓下飯堂中午的自選沙律。之前遇過有個外藉職員買沙律時都是自備的。當時未留意這些膠盒的自己,看他氣憤般怪店員又給了它一個膠盒,只有感到好奇。

同身邊同事們也傾到這可以重用多少次。有人認為五次,而我當時純感覺的話是放一星期就該丟棄。因為猶豫的都是會否什麼有害物質。尤其它要經得起一次次的熱湯(在公司的早餐我是傾向食粉麵的)和洗潔精。傾完之後,接著就當然要親自嘗試,帶著乾淨的膠碗到職員餐廳,在點了早餐後把碗交給煮麵阿姐,自己不會擔心打破或放置,就轉去另一邊點飲品,完全配合到本來的流程。最後一樣地拍卡俾錢,帶回工作枱邊做邊食早餐。有空才把膠碗拿去茶水間,簡單地用點洗潔精洗,不過清洗時會感到質地比重覆使用的飯盒軟身得多。我知道用力去清潔才最乾淨,但一用力清洗時,就有點擔心質量上有沒有問題⋯⋯另外,用這種配合指定食物的盒子,才發覺自己並不是經常都想食同一款食物的。粉麵可能一星期兩三次,隔星期食下沙律,另外有時食粥,有時三文治⋯⋯枱面就放了不同款式的膠盒,一星期內的重用度不是那麼高。


2016年2月20日 星期六

[Math] Office Work - 從編排更表到Hungarian Algorithm

因為會處理歐美收市和亞洲收市,所以我這組人的繁忙時間是清早和晚上兩端,需要有輪班制,工作分早晚兩更,據英文堂所學這種工作時間有個形容詞是antisocial hour, 人手足夠時就可以讓同事返九點左右的正常時間。編更上如何令大家滿意,這問題幾似數學Operational Research / Graph Theory中的 Matching problem。大概最近FB見到恆隆同伯賴段片,數學應用的頭腦靈活過來,想到還是可以用典型的Hungarian Algorithm。這演算法所處理的情況是:假設有n個任務需要分派給n個人,每人要完成各個任務都有某個成本,問如何編配任務才能讓總成本最少。

例如成員 i 要處理任務 j 的成本是cij,這些成本可以寫成矩陣C表示。例如第一個人p1處理任務一task1要成本1, p1 處理 task2 要成本5, p1 處理 task3 要成本3;分派方法可以寫成矩陣A,這簡單例子的最佳分配可以直觀得知如下, 總成本為6。而Hungarian Algorithm 的步驟是這樣,大致有以下程序:(一)將所有數值減去該行最小的數,然後再將所有數值減去該列最小的數,今每行、列都有零存在。(二)[Trial and Error] 找出一個"Independent zero"的組合,用最少條線穿過所有零。(三)如果剛好存在於n條線上,該"Independent zero"組合就可以得出答案;如果只需少過n條線,修改矩陣重覆步驟二。

$$
C=\begin{bmatrix}
1 & 5 & 3 \\
4 & 2 & 8 \\
7 & 9 & 3 \end{bmatrix},
A=\begin{bmatrix}
1 & 0 & 0 \\
0 & 1 & 0 \\
0 & 0 & 1 \end{bmatrix}
$$