2020/08/06

Word / 檔案救援

word有時候會突然當掉

然後通常會自動重新開啟並且自動復原

但是,當你以為自己在這之前曾經有儲存過檔案而按下刪除復原檔

然而,發現結果卻不是的時候

這時候,就要去資源回收桶

找找看有沒有 *.asd    (*表示要尋找的檔案名稱)

如果有的話,還有機會救回最近版本的檔案

假如檔案開啟的時間夠久的話

可能會有兩個.asd檔

一個是「即時復原儲存關於*.asd」→當掉重啟的復原檔案

另一個是「儲存自動回復*.asd」→自動儲存的檔案

這兩個檔案都可以試試看

檔案救援的方法是將副檔名.asd改成 .wbk

就能夠在word開啟,順利的話就可以另存成新檔

救回最近版本的檔案

 

參考:Word 如何建立和復原自動回復檔案

2020/08/04

VBA / 使用Excel VBA批次寄信

每個電子信箱當然都可以寄出大量信件

但是很容易會被當成寄出廣告信件

解決的辦法之一就是要有寄件間隔時間

只是要控制寄件間隔就要額外想辦法

在網路上找到一個很厲害的老師-彰化一整天所寫的excel VBA程式

補充:原作者說明-https://www.youtube.com/watch?v=mmYejL3ABcc 原始程式

可以實現批次寄信,並且設定每封信的寄出間隔時間

相關資訊可以直接用關鍵字拜谷狗大神

嘗試將固定間隔時間改為亂數5~10秒

實際使用之後,是可以正常運作

主要調整的內容如下

' 每封間格時間(單位:秒) 5<= delaysec <= 10'          Int( (上限-下現+1) * Rnd() + 下限 )delaysec = Int((10 - 5 + 1) * Rnd() + 5)' MsgBox (delaysec)Application.Wait (Now + TimeValue("0:00:" & delaysec))

說明:

delaysec是間隔時間的變數,並且將變數移到寄出信件的While迴圈之內

這樣就能夠每跑一次迴圈,重新取得一個5~10之內的亂數值

而程式便是透過暫停時間來達成每封信寄出的間隔時間

取得一個範圍亂數值的方式是參考 Excel VBA 產生隨機亂數教學與範例

參考資料

Application.Wait

TimeValue()

TimeSerial()

Excel VBA 產生隨機亂數教學與範例

2020/06/30

網站 / 莊生趣味 tricohobby手動更新Let’s Encrypt的免費SSL憑證(2021/10/10修改)(2022/06/03修改)(2022/06/07修改)(2023/06/01修改)

現在只有一個網站

https://tricohobby.net/ 回到GCP


現在同時有兩個網站

一個在GCP  暫時用 https://backup.tricohobby.net/

一個在BlueHost 用 https://tricohobby.net/


因為網站主機改到BlueHost

BlueHost有提供SSL

所以就不用特別需要設定了


Let’s Encrypt的免費SSL憑證快到期了

可以參考下面網站的說明讓主機排程90天自動更新

在GCP上安裝WordPress with NGINX and SSL Certified by Bitnami and Automattic,並設定Let’s Encrypt SSL憑證

Generate And Install A Let’s Encrypt SSL Certificate For A Bitnami Application

自動排程執行緒


#!/bin/bash

sudo /opt/bitnami/ctlscript.sh stop nginx
sudo /opt/bitnami/letsencrypt/lego --tls --email="你的信箱" --domains="你的網域" --path="/opt/bitnami/letsencrypt" renew --days 90
sudo /opt/bitnami/ctlscript.sh start nginx


手動更新的方式

直接在主機端執行以下程式碼(從Google Cloud Platform-Compurer Engine-SSH連線)

sudo /opt/bitnami/ctlscript.sh stop nginx
sudo /opt/bitnami/letsencrypt/lego --tls --email="你的信箱" --domains="你的網域" --path="/opt/bitnami/letsencrypt" renew
sudo /opt/bitnami/ctlscript.sh start nginx
 

備註

之前無法自動排程的原因可能是權限設定的問題

參考這個網站的說明linux下chmod +x的意思?为什么要进行chmod +x

透過 ls 指令顯示的檔案資訊

執行緒必須是顯示成綠色

當初只是照著說明執行程式碼

所以根本不知道chmod +x 指令的功能,所以也不知道到底有沒有設定成功

sudo chmod +x /opt/bitnami/letsencrypt/scripts/renew-certificate.sh

現在看起來當初只是在這個步驟沒設定好

2020/05/29

Gg / 使用GoogleCharts快速製作QrCode

許多要公開的資訊除了放上網之外,還要有方便讓人取得的管道

像是縮網址,可以方便記憶,也可以讓資訊量精簡一點

現在也常使用QrCode,手機一掃就可以快速取得資訊

最近在規劃辦理研習,需要用到進修網的報名網址與QrCode

但是,報名網址跟QrCode 卻無法從業務承辦人權限帳號的頁面功能中取得

之前我的作法是用一般帳號查詢研習,再進到報名頁面

 

這樣就可以知道網址

而網址結構是:https://inservice.edu.tw/NAPP/CourseView.aspx?cid=研習課程代碼

之後也可以直接帶入新的研習課程代碼來取得報名網址

同時這個報名頁面上也會出現QrCode

但是能進到報名頁面,看得到QrCode,其實這個QrCode就什麼沒必要了~~

好處反而在於業務承辦人可以從這邊抓到QrCode的圖檔

不過在之前抓QrCode的圖檔時,發現這個圖檔並不是實際存在的檔案(因為按右鍵無法另存新檔圖檔)

 

另存新檔,會存到網頁

 

利用Chrome的「檢查-內容」功能可以看到是完整的網址

https://chart.googleapis.com/chart?chs=120×120&cht=qr&chld=M|3&chl=https://inservice.edu.tw/NAPP/CourseView.aspx?cid=2861727

註:120×120,中間是英文小寫 x ,不知道為什麼wordpress會轉成×;兩者的字碼不一樣 x →  120,× → 41425

從網址結構可以看出來是https://chart.googleapis.com/chart?加上一連串傳遞的參數組合而成

拜谷狗大神得知這是GoogleCharts的功能,雖然官方網頁上寫不推薦使用

但我猜測這是因為無法透過帳號後台紀錄這個QrCode使用情況

官方網站詳細說明了這些參數的設定

https://developers.google.com/chart/infographics/docs/qr_codes?hl=zh-tw#syntax

簡單說明如下:

至少要有這三個參數 chs cht chl

chs=120x120 → QrCode圖檔大小,可以自行設定大小,寬x高,中間是英文字小寫 x (不知道為什麼wordpress會轉成×)

cht=qr → 這是固定的設定

chl=https://inservice.edu.tw/NAPP/CourseView.aspx?cid=2861727 → QrCode的內容

而進修網有再設定chld=M|3→QrCode的容錯率與版本,進修網設定的是 M 或( | )  第3版,預設第4版
 

綜合這些

1.以後要取得新課程的報名頁面網址

可以直接套用https://inservice.edu.tw/NAPP/CourseView.aspx?cid=研習課程代碼

2.要取得QrCode

可以直接套用https://chart.googleapis.com/chart?chs=120x120&cht=qr&chld=M|3&chl=報名頁面網址

取得的圖檔是png格式,24位元全彩,而不是32位元(背景透明)

當然這個方式也適用於取得其他網址/字串訊息的QrCode

2020/05/27

Py / 透過selenium-webdriver爬youtube的介紹資訊(2021/10/28修改)

原本是透過Python 跟 selenium-webdriver抓取Html

但是後來網頁原始檔都變成JavaScript程式碼

2020/05/24

VBA / 初階課程筆記-5

105.04.07 第5次上課 (範例-05尋找與參照函數練習.xls)

上課內容:

補充:名稱管理員

定義名稱,Excel中相當重要的一項功能,在很多操作中它不是必需的,但卻是高手進階的一個重要功能。它是把單元格區域、函數、常量或表格定義一個名稱,在我們一些操作,尤其是編輯Excel公式過程中,可以簡化操作,使Excel公式便於理解和維護。(原文網址:https://kknews.cc/tech/a84bvnx.html)

 

01_LOOKUP函數與查詢介面

LOOKUP 函數

向量形式的 LOOKUP 會在單列或單欄範圍 (亦稱為向量) 中尋找值,並傳回第二個單列或單欄範圍內相同位置的值。

=LOOKUP(lookup_value, lookup_vector, [result_vector])


 

應用:利用 LOOKUP函數找出查詢編號對應的資料

 

02_如何增加下拉清單(名稱與資料驗證)

建立下拉清單-資料驗證
 

應用:使用名稱管理員建立下拉式清單的資料來源

 

03_如何改用VLOOKUP查詢資料

VLOOKUP 函數

=VLOOKUP (lookup_value, table_array, col_index_num, [range_lookup])

= VLOOKUP (查閱值 , 包含查閱值的範圍 , 範圍中包含傳回值的欄號 , 大約符合(TRUE)或完全符合(FALSE))

range_lookup (選填)-這是用以指定要 VLOOKUP 尋找大約符合或完全符合值的邏輯值:

1-大致相符 / TRUE   假設表格中的第一欄是以數值或字母順序排序,然後搜尋最接近的值。 預設值。

0-完全符合 / FALSE  假設表格中的第一欄是以數值或字母順序排序,然後會在第一欄中搜尋確切值。 
 

應用:找出銷量79000的提成率


 

04_改用MATCH與INDEX函數查詢資料

INDEX函數

=INDEX(array, row_num, [column_num])

=INDEX(表格範圍,列索引值,行索引值)

MATCH函數

=MATCH(lookup_value, lookup_array, [match_type])

MATCH會傳回lookup_array中相符值的位置,而不是值本身。

match_type(選填)

match_type 選擇性。 數字 -1、0 或 1。 match_type 引數會指定 Excel 如何將 lookup_value 與 lookup_array 中的值相比對。 這個引數的預設值是 1。

1 或省略:MATCH 會尋找小於或等於 lookup_value 的最大值。 lookup_array 引數內的值必須以遞增次序排列,例如:…-2,-1,0,1,2, …,A-Z,FALSE,TRUE。

0:MATCH 會尋找完全等於 lookup_value 的第一個值。 lookup_array 引數內的值可以依任意次序排列。

-1:MATCH 找出大於或等於lookup_value的最小值。 Lookup_array引數中的值必須以遞減順序放置,例如: TRUE、FALSE、Z-A, …,2、1、0、-1、-2、… 等等。
 

應用:利用INDEX函數與MATCH函數找出查詢編號對應的各項資料

Row_num:

透過 Match函數 找出查詢編號對應的列號位置

 

Column_num:

姓名的欄號為 2、總銷量的欄號為 3~~

剛好可以對應公式所在 C3 列號 3 – 1 = 2、C4 列號 4 -1 = 3 → ROW()-1


 

05_利用ROW函數取得列號、COLUMN函數取得欄號與九九乘法表

ROW函數

=ROW()    公式出現的列號

COLUMN函數

=COLUMN()    公式出現的欄號
 

應用:九九乘法表


 

06_切割名字範例與九九乘法表(範例-切割名字.xlsm),使用INDEX

=IFERROR(INDEX(名稱,COLUMN()-2+(ROW()-1)*5,1),"")

第一列:1+0*5  2+0*5 ..

第二列:1+1*5  2+1*5 ..

..

→column()-2 + (row()-1)*5
 

備註:

IFERROR函數 如果公式計算結果錯誤,IFERROR 會傳回指定的值;否則,它會傳回公式的結果。

=IFERROR(value, value_if_error)