顯示具有 工作技巧 標籤的文章。 顯示所有文章
顯示具有 工作技巧 標籤的文章。 顯示所有文章

2020年7月29日 星期三

善用大尺寸的風琴夾,整理零散的文件。

常常有一堆文件是要等人繳交齊後,才能統一作業及歸檔,但很多人常常是東交一份西交一份,這時還沒收集完成的的文件,你是怎麼歸檔的?我先前的作法是用透明的L型夾將文件收納,但經收到後面變下面這樣。


每次要找的時侯,要將L型夾一一取出來確認,非常麻煩,後來在 博客來 上,看到 HFPWP 這家廠商,有出 312412層風琴夾,可以收納大量的零散文件,而且尺寸可以放入制式辦公桌的最下層大抽屜,就買了 312412層風琴夾各一個回來試用,風琴夾樣式如下。


拆封後可看到,前方有名片收納可供填寫,並提供彩色標籤供你做索引標註。


在彩色標籤寫上分類名稱後,將其摺下置入索引套即可,如下圖所示。



索引全部填寫完後,將其置入制式辦公桌的最下層大抽屜,可以一次性的放入 312412層風琴夾各一個,但是放置完後,但移動時會有空隙。


這時可用 3M 雙面膠將風琴夾黏接起來。


黏貼起來結果如下圖,將文件依索引放置,這樣看起來是不是比較整齊,且方便找資料。







2020年4月26日 星期日

如何用 Sikuli 來將重複性的工作自動化,讓省下來的時間從事更有生產力的工作並提升生活品質。


Sikuli 介紹 

Sikuli 曾因是由在麻省理工學院的台灣學生所開發,且其可用圖像編寫程式的特色而名噪一時,Sikuli 後來被轉至克羅拉多大學,最後將它釋放出來,現由Rainmen維護,並且持續開發v2版本,現 Sikulix 的官方資訊網站如下:


Sikuli 可在Windows、Mac、某些Linux / Unix、VNC、甚至是 Android 下運行,使用OpenCV提供的圖像識別功能,來識別畫面上特定圖像,並編寫程式進行特定操作,除此之外其還有 OCR 的功能,提供在指定圖像中,進行文字識別的功能,此功能由 Tesseract支持,不過其中文辦識能力不佳。但以上功能讓 Sikuli 在我們可以在無法改動程式或網站上執行,這非常方便。

Sikuli 採用 Python 2.7版語法,其基底事實上是 Jython支持,也就是說 Sikuli 最底層事實上是 Java,因此其也支援了 Ruby (由JRuby支持)及 JavaScript(由 Java Scripting Engine 支持),另也支援  RobotFramework 腳本執行,一般來說,Sikuli 可用在以下用途:


  • 自動測試:測試所寫的網站或程式,可否正常且穩定的執行,這多半為程式或網站開發時所用,先前曾因網站需大量上傳圖像,為測試網站在大量上傳時的穩定性,用 SikuliX 同時用多台電腦操作上傳網站,測試穩定性。
  • 玩遊戲:也就是常說的開外掛,掛機自動執行。
  • 重複輸入或操作的應用程式或網頁:這也就是最近挺流行的 robotic process automation (RPA) ,在使用情境上,使用在對網站或應用程式無法修改為適用目前工作,或修改成本很高的情況下,例如: 網站需要輸入大量資料,且無提供整筆匯入功能,也無修改網站權限或能力時,這時可用 Sikuli 模擬人工操作的方式,將資料輸入。也可以用於線上搶票、搶訂閱、搶選課等用途(這有點偏了)。

Sikuli 安裝與執行

Sikuli 的安裝在這提目前這常用到的環境 WIndow 下的安裝,前面有說到 Sikuli 最底層是 Java ,所最開始要確認目前所用的 WIndow 系統下有無安裝 Java ,且因現 Oracle 有修改了Java 的授權,所以現在可能用 OpenJDK 會較好一點,再來就是要安裝 Jython ,不過不是去 Jython 官網下載安裝,而是要去下載  SikuliX 下載頁所附下列 Jython 解釋器,並與 SIkuliX 的 Jar放在同一目錄下,就如同我在在 WIN 10 下執行 SikuliX 2.0.X 版所說明的一樣,執行時在命令列模式下,於放置 SikuliX Jar 檔目錄下鍵入如下指令:

java -jar sikulix-2.0.X.jar
執行成功畫面如下:


Sikuli 的操作

在 Sikuli 最基本的函式是 find,是用來尋找在螢幕上我們所指定的圖形,舉個例子,假設我們現在想要開啟我的電腦,可以鍵入如下畫面語法:
其中我的電腦圖示,只要選左上螢幕截圖功能即可截取,當用 find 找到圖形後,我們可用dobuleClick 來模擬連按兩滑鼠左鍵的動作,鍵入上面程式碼後,按右上執行圖示,即可看到執行結果,但因執行速度太快,我們可能會看不清滑鼠的動作,這時可用慢動作執行方式來看看執行的過程。
另外截圖的部分也可做進一步的設定,只要滑鼠擊點圖示二下,即可進入設定畫面,畫面如下,第一畫面為截圖所放的路徑及檔名。


第二個畫面為顯示,所截的圖與現在螢幕畫面比對時,是否可正確找到我們所要的截圖,如下圖所示,紅色框表示所找到的截圖位置,由下圖來看有找到正確的位置,畫面下方可設定辨識度,預設為 0.7(70%),如果辦識的準確度可拉高設定值,但拉高設定值,也會造成失敗率增加,且就經驗來說,如果70%辨識度無法捉到正確的截圖的話,那就表示你所選的截圖是辦識度不夠高,不夠獨特,需要重新詢找截圖。


第三個畫面可讓我們設定找到截圖後,滑鼠焦點偏移的位置,Sikuli 預設找到截圖後滑鼠的焦點為截圖的正中心,但有時因為我們想要取的位置,辦識度不高,所以只好捉附近辦識度高的截圖,在捉到後設定偏移到我們要取的位置,在這畫面我們可以直接用滑鼠點我們所要的偏移位置,下方會顯示偏移量,在本例我們取偏移到資源回收桶的位置,取好後按下方 Apply 鍵即可設定完成。


Sikuli 其他可用函式,請參照 Sikuli 文檔 以及 Python 。

Sikuli 使用技巧

由前面的介紹我們可知道 ,Sikuli 以圖形辦識為核心,以Python(事實上為 Jython) 語法撰寫程式,因此在使用上有下面的注意事項:
  • 截圖的選擇並須符合下列幾個要點:
  1. 獨特性要高、要夠明顯(對比高),要為螢幕上唯一的圖示,例如在 Window 上資源回收桶的圖示,其多半為桌面上唯一的圖示,且夠明顯。像有些網頁其按鍵的圖示和背景一樣為淺灰色,其按鍵的框又為透明,這種狀況就很容易造成辦識度低,這時可能就要採取前一節所講的方法,取其他明顯的截圖,在偏移過去。
  2. 尺寸最好固定不變,雖然 Sikuli 辦識度設定為 70%,已有緩衝,但像是突然改變畫面解析度,或在看網頁時放大縮小畫面,皆會造成截圖尺寸的變化而造成失敗,不過通常用慣的畫面解析度不常會改變,網頁縮放設定在100%就可避免上述問題。
  3. 要不被其他程式遮蓋,像前面所提的資源回收桶圖示,就存在易被化程式遮蓋,這種情行可改用不易被其他程式遮蓋的圖示,在 Window 上工作列的圖示就不易被其他程式遮蓋,例如 Window 鍵。另一種作法是在執行辦識前把所有視窗縮到最小或關閉,避免遮到圖示。
  4. 採用偏移的方式時,所選的截圖和我們所要的位置偏移量需要固定不變,且偏移量不要太大,否則失敗率會增加,通常就近選擇載圖是較好的選擇。
以下為示範截圖如取不好,辦識度不佳的結果,由下圖我們可看到,我們選擇的截圖有不夠獨特明顯的問題,所以 Sikuli 的辦識結果就不好,找到了20多個相似的截圖,這是在使用上要避免的問題。

  • 不要所有的步驟都用截圖方式來執行,前面提到,Sikuli 辦識度設定為70%,還是有一定的失敗率,建議用 Sikuli 取得所要執行程式或網頁的焦點後,在程式或網頁執行用模擬鍵盤輸入的方式處理,像是用 type(key.TAB) 模擬鍵盤 TAB 鍵切換輸入欄位焦點,用 key("input message") 或 paste("要輸入的訊息"),來模擬輸入訊息,以提高正確率。
  • 雖然 Python 支援 Unicode ,但在 WIndow 上中文處理的問題,分兩個層面說明。
    1. 如果是要模疑鍵盤輸入,要輸入中文時,不能使用type(), 而需使用paste(), 且中文必需使用unicode("中文","utf8")做轉換,整個函式會變為 paste(unicode("中文","utf8")),即可正常使用。
    2. 如果在程式中要讀入含中文的 csv 檔時,在Windows需先用 Notepad++ 將 csv 檔的編碼轉為 UTF-8 ,讀入後在用 unicode 函式輸出,以下為範例程式碼。
import codecs
data = open("test.csv").read()
if data[:3] == codecs.BOM_UTF8:
    data = data[3:];
for row in data:
    paste(unicode(row[1],"utf-8"));
    
  • Sikuli 雖用採用 Python 2.7 語法,但其實是用 Jython,故還是跟 Python 有些許不同,故如要用 Python 套件需事先測試,但就以正常來說,直接用 Python(Jython)預設的套件是較好的選擇。 

Sikuli 的限制

Sikuli 的限制基本上就是由其賣點圖形辦識所引起的,在前面 Sikuli 使用技巧所提截圖尺寸的變化易而造成失敗,在單台電腦上可以用固定螢幕解析度設定來達成,但如要移植到其他台電腦上執行,就常常要在每一台上重新截圖,才可正常執行,這就造成了,作業上額外的負擔,也無法提供與一般人使用,我相信這也是 Sikuli 無法普及的一個主要原因,其應用範圍被限制於自動測試或單機 RPA。
另外新版的 Sikuli 雖然提供 OCR (文字辦識)的功能,不過其中文辦識能力不佳,仍有待進一步的改進。

結語

上面簡單介紹 Sikuli ,雖然其使用上有諸多限制,但在辦公室自動化上仍有用途,可以將重複性的作業自動化,節省工作的時間,如對 Sikuli 的應用有興趣,除可參見上面所提的官方網站外,也可參考這篇文章,做更進一步的暸解。

2020年4月12日 星期日

如何將 Gmail 會話群組的電子郵件一次下載完成

在 Gmail 中如果我們想要將部分電子郵件下載下來作為佐證或是備份,我後可以點入電子郵件後,選擇下載郵件的選項,如下圖所示。


但是如果我們想要將完整會話群組,一次下載下來要怎麼辦?總不成要一件一件的電子郵件下載吧。事實上,可以用下列 二種方法:

  • 使用 Gmail 以附件形式轉寄的功能轉寄所要下載的電子郵件後,再以附件下載形式將電子郵件下載,步驟如下:
    • 首先要將會話群組的功能取消,否則將無法選取所有的該群組的所有電子郵件。
    • 用搜尋功能找到該群組的所有電子郵件,最簡單的作法就是用主旨來搜尋,並對找到的該群組電子郵件選取。
    • 按滑鼠右鍵跳出快選選單,選擇以附件形式轉寄。
    • 這時會開啟一個信件草稿,我們可以看到,剛才所選的電子郵件,現在都以附件形式,附在信件草稿內。
    • 這時的電子郵件已經可以下載了,但只能一個一個下載,如果附件多了一個一個點太麻煩,這時只要把信件寄給自已,利用 Gmail 提供的下載所有附件的功即可將所有電子郵件一次下載下來。





  • 上述這方法可以下載完整的電子郵件,包含其附件。但如果目標是著重在電子郵件的內文內容,而且想將其一次轉出來時,這方法就不適用,要採用下面第二個方法。
    • 打開對話群組選擇右上角的列印功能。
    • 在列印時選擇儲存成PDF,這時就可以將電子郵件轉存成PDF檔。
















第二個方法的缺點就是電子郵件的附件內容無法一併顯示,但可以將其內容一次輸出。我們可以視需要的情境,選擇所要適用的方法。

2020年3月24日 星期二

善用 Excel 進階函數 vlookup,解決工作上大小事。

Excel 我們知道提供很多函數,從數學、財務、統計、日期...等等有上百個函數,但要在這些函數選一個最常用的函數,我想非 vlookup 莫屬,這個函數主要用途是在您指定的資料範圍內,透過「查閱值」,去尋找在所指定資料範圍內,你所要的欄位資料,其語法如下:
VLOOKUP(查閱值 , 資料範圍 , 指定欄位索引, [已排序])
其參數說明如下:

  • 查閱值我們所要搜尋的值,使用上有二個限制:
    1. 必需是資料範圍內第一欄所會出現的值。
    2. 資料範圍第一欄內,該值最好在第一欄內是唯一值,否則結果可能不如預期。
  • 資料範圍係我們所要搜尋的範圍,系統會在該範圍的第一欄尋找搜尋詞中指定查閱值。
  • 指定欄位索引,代表要傳回的值所屬的欄索引。資料範圍中的第一欄編號為 1,也就是說,如果你想要傳回資料範圍內第3欄的資料,指定欄位索引就設為3,如指定欄位索引並非介於 1 和資料範圍的欄數之間,系統會傳回 #VALUE!
  • [已排序]有二種情形:
    1. 絕大多數情況下,請設為 FALSE,該設定會使系統會傳回完全相符的值。如果有多個相符值,系統會傳回與找到的資料範圍第一欄中第一個值對應的儲存格內容;如果找不到相符值,則會傳回  #N/A
    2. 設為 TRUE 或省略,系統會傳回最接近的相符值 (小於或等於搜尋詞)。如果進行搜尋的欄中所有的值均大於搜尋詞,則會傳回 #N/A
以下舉一實際範例來說明如何應用,現假設我們想從下面範例的股票股利股息表,捉出特定公司現金股息及股價,算出其現金殖利率,在此因為股票代號是唯一的,當然我們就選用股票代號為查閱值,去查出該股票本年度的現金股息及股價。



因此在下面現金殖利率表中,股票代號由我們手動輸入所要查詢的股票代號,股價欄位則應用 vlookup 捉取,語法如下:


=vlookup(B2,'股票股利股息表'!A:F,6,false)

在此查閱值為現金殖利率表的B2,也就是股票代號欄位;資料範圍為股票股利股息表的A到F欄;指定欄位索引在此我們要的是股價,也就是在股票股利股息表由股票代號起算的第6個欄,因此設定為6;[已排序]一般則設為 false 。同樣的現金股息的部分也是相同的方式,語法如下:


=vlookup(B2,'股票股利股息表'!A:F,3,false)

得到股價及現金股息,就可以計算出現金股息殖利率了,在下表的範例1,我們展示計算泰詠現金股息殖利率的結果;在範例2,我們展示如果我們沒輸入股票代號或輸入股票代號,不在股票股利股息表中時,會傳回  #N/A,如果要避免出現,可加上 iferror 函數,將 #N/A轉為我指定的值,因此前面兩個函數可修改如下:


=iferror(vlookup(B4,'股票股利股息表'!A:F,6,false),) 
=iferror(vlookup(B4,'股票股利股息表'!A:F,3,false),)
修改後的結果如範例3所示,在此我們將 #N/A 改為空白 。



前面介紹完 vlookup 語法,粗略來看該語法所做的事情,事實上很簡單,就是將我們所要的資料,由指定資料範圍找出來,有點像是簡單查詢程式,但其應用變化多端存乎一心,用的好的話可以解決工作上的很多問題,例如可用在下面場合:

  1. 如同前面的範例,將其中一個表當作資料庫,將我們所要欄位資料捉到另一個表做計算使用。
  2. 比對兩個表或欄位資料是否有差異,在文書作業中,我們常常會製做很多表,有的時侯版本控管沒控管好,時間久了我們會忘了那一版為最終版,這時可用 vlookup 函數來做比對,方法是在其中一個表中捉取另一個表中的資料,看是全部都會捉到,還是會出現#N/A,由此可知兩個表的差異,當然如果要更細緻一點,可以在加上 if , and ,or 等判斷式,做更細部的確認
  3. 可以用於將多張不同的表,匯整成一張大表使用。
  4. 將適用於試算表運算的表,改為適合的閱讀或文書作業的表,就如同在如何將紙本表單轉為 Google 表單後,讓填寫人填寫完後轉為紙本表單格式印出。 所做的,將表單填表人所填的資訊,轉為紙本表單格式印出。
  5. 跟 4 的應用反過來,是將適合的閱讀或文書作業的表改為試用試算表計算用的表,在此時單用 vlookup 可能沒辦法完全處理好,需要搭配使用 index 、 column、row 等函數才有辦法處理。
以上為 vlookup 使用方式及其應用的介紹,如果能應用的好,事實上可以解決工作上的很多問題,故我一直認為 vlookup 為 Excel 最重要的函數,不過如果你問我在 Google 試算表是否也是如此,那我會說不一定,原因為在 Google 試算表有提供另一個同類型的函數 query ,其使用限制更少,功能更強,有興趣朋友可以參考我這篇文章。但 query 使用語法較為複雜,需下如 SQL 的語法才能使用,而且限制在Google 試算表才能用,因此 vlookup 還是一值得學習的函數。

2020年3月17日 星期二

使用手機當掃描機,將文件轉成PDF檔

一般來說,如果我們有需求要將文件轉成 PDF 時,會在事務機或在商用影印機,將文件掃描轉成 PDF 檔,但有時剛好在外面有將文件轉換為 PDF 需求時該如何?事實上現在的手機功能強大,並且相機的解析度也高,事實上硬體功能已經足夠來做這件事,也有很多手機 APP有提供這樣的功能,像是 Camera Scanner To Pdf - TapScannerAdobe Scan:PDF 掃描器等,這裡介紹一個個人常用,且其功能持續有在改進的 APP : CamScanner

CamScanner 這個 APP,個人覺得最好用的功能是,可用手機拍文檔,自動去除雜亂背景,生成高清JPEG圖片或PDF檔,除此之外,如果你不滿意 APP 調整的結果,也可手動調節圖像參數,用手機即可將紙質文件,快速轉為電子檔。

 CamScanner 這個 APP的使用非常簡單,在進入主畫面後,按下右下方的相機按鍵,即可開始使用。

接下會進入拍照畫面,下方可以選擇想要的模式,一般來說選擇普通就可以了,將文件擺到定位確定對焦清楚後,按下中間的相機鍵即可,但請注意拍攝的背景畫面最好選擇單色的,並且跟文件的底色差異愈大愈好。另如果拍時怕有反光,也可開閃光燈解決此問題。


在拍完後就會進入到調整畫面,在此我們可以看到 APP 已經自動將文件的裁切邊界標出來,如果覺得不滿意,可以拉動圓點的部分調整,如果沒問題直接選擇右下的打勾鍵。


接下來只要選擇文檔名稱及類型(也可不設),在選確定即完成。


完成整個程序後,會回到主畫面,這時可看到最上方就是我們所新增的文件。


點進去可看到該文件所有影像,如這時還想在這文件新增影像,可在選右下方的相機鍵,依上面的步驟行一次即可。如果想轉為 PDF 檔,請點選右上方 PDF 圖示。


這時會跳到轉換畫面,下方有一些額外的功能可用,不過除了檔案瘦身的功能外,都要付費升級後才可使用,畫面也會列出浮水印位置,如不要浮水印,需付費升級。如看過沒問題,可選擇分享,看要將此文檔轉到那一個 APP 進行後面工作。






以上為簡單介紹 CamScanner 這個 APP,事實上這個 APP 功能不只如此,其功能還有很多,只是部分需付費升級才可使用,有興趣的朋友,可以用用看。




2020年3月15日 星期日

如何捉取其他 Google 試算表資料

在 Goole 試算表中,如果我們要捉取其他試算表的資料,例如現在有一個工作表2如下:
現我們想將工作表2 A1 格內的資料連結到工作表1 A1 的資料,我們可以在工作表1的 A1 鍵入 ='工作表2'!A1 ,這麼做就可將工作表2的A1格的資料連結到工作表1的 A1格中,結果如下面所示。
但如果是要捉取別的 Google 試算表內工作表的資料,該如何做?在 Google 試算表中可以使用 importrange 函式,語法如下:

IMPORTRANGE(spreadsheet_key, range_string)

其中 spreadsheet_key - 做為資料匯入來源的試算表網址,spreadsheet_key 的值必須放置在引號內,或者是一個含有適當文字的儲存格參照。例如我們想要將試表算1的工作表2的A1:B3 的資料連結到試算表2的工作表1,我們要先取得試算表1的網址,如下圖紅框所示。

在使用時,可將全部的網址用引號括起來,然後直接帶入函式中,不然也可以只取 spreadsheet_key,也就是 d/ 至 /edit 中間粗體字串使用。

range_string - 符合 "[sheet_name!]range" 格式的字串 ,用於指定要匯入的範圍。在本例也就是  工作表2'!A1:B3 ,也需要用引號括起來
整個函式為以下:

=importrange("10Pa3p6E5STYxFoq4UPCXMoraQxxS9ml5UZqP4Q_3Sv4", "'工作表2'!A1:B3")

代入試算表2一開始會出現錯誤訊息 #REF ,如下圖所示。
這是因為還未取得授權,只要點下允許存取鍵即可,結果如下圖。
如此即完成整個設定過程。

2020年2月25日 星期二

善用 Gmail 電子郵件範本的功能,快速發出信件。

Gmail 電子郵件範本功能可以讓我們將常用的電子郵件內容設為範本,在需要時直接取用,簡單修改即可寄出,適用於經常需要發出固定格式電子郵件的時機,要使用Gmail 電子郵件範本的功能,先在Gmail 開新郵件,並將所要電子郵件內容打好,按右下角紅色框起來的符號,進入進階設定。

選擇[範本]->[將草稿儲存為範本]->[另存為新範本](如果要覆蓋舊範本,可選擇覆寫範本下所列範本,在本例因為新建,所以沒有舊範本。)
這時會跳視窗供確認範本名稱,預設名稱為電子郵件的主旨,如果覺得不夠直覺,可以改為自已所想要的名稱,這樣就設定完我們所要的範本。
設定完電子郵件範本後,要使用時一樣先在 Gmail 開一個新郵件,在右下角的進階設定選擇[範本],在選擇插入範本內所呈現,我們先前所建立的[信件範本],即可將範本內容帶入電子郵件內。

善用電子郵件範本的功能,可以大幅度簡化我們的對常發送定型稿類型的電子郵件的作業,並加快電子郵件的寄發,是個有用且值得學習的功能。


2020年2月16日 星期日

如何用手機連接印表機列印

現在手機功能強大,最新的高階手機效能已不輸電腦,但列印文件時常常還是將文件轉寄或傳輸到電腦上列印,但事實上如果附近有連網的印表機,像是支援WIFI或實體網路線的印表機,Android 手機可以直接 WIFI 經區域網路連結到印表機列印,以小米手機連結到同一區域網路的Fuji Xerox 印表機為例,設定步驟如下:
1.開啟手機的「設定」應用程式。

2.依序輕觸 [連接與共享] 下一步  [列印]。

3.選取 [新增服務]來新增印表機。
4.依所要連接印表機廠商,選擇對應的手機APP,在此我們選擇 FUJI XEROX 印表機 APP。


5.新增完後在[列印]中,選取 Fuji Xerox Print Utility 設定印表機。
6.在 Fuji Xerox Print Utility 畫面中選擇[新增印表機 ],在新增印表機的畫面中輸入我們所要使用的 Fuji Xerox 印表機在網路上的 IP 位址後,選擇登記。


7.回到 Fuji Xerox Print Utility 畫面就會看到剛新增的印表機。

8.現在在手機上打開你所要列印的文件,然後選擇[列印]。



9 .如同在電腦上列印的程序一樣,選擇剛剛新增的印表機,然後選擇列印,文件就會傳輸到印表機列印了。
以上為手機設定印表機連結的使用方式,透過這樣的設定,手機基本上可以當成是行動辦公室,在手機上的文件可以直接列印出來,非常的方便,大家可以多多利用。

[Excel]如何創建自定義函數

在 Excel 內建函式中找不到自已想要的函式怎麼辦?事實上我們可以自已建一個,以下是一個簡單的Excel自定義函數示例,用於將民國年轉為西元: Function 民國轉西元(x As Double) As Double     民國轉西元 = x + 1911 End Func...