2022年4月30日 星期六

如何利用Python程式來匯出Google Classroom 所需社團學生帳號表


        近來因為確診人數節節升高,導致社團也要有線上課程。因此,趕忙製作學生彰化Gsuite帳號名單。但問題是各班學生散佈到各社團。而彰化Gsuite 只提供各班學生Gsuite帳號。上篇利用EXCEL來建立年班座號與Gsuite對應表,建立社團Classroom,已經解決我的燃眉之急。但是上篇中,人工操作的部分依舊很多,所需的時間約一個工作天(包含查詢Excel函式相關資料、匯入彰化Gsuite至Excel與人工操作Google Classroom 所需社團學生帳號表)。希望能降低人工操作的部分,甚至能夠一鍵完成。那我該如何利用Python程式來匯出Google Classroom 所需社團學生帳號表。
下載檔案。解壓密碼:demo1234
教學影片:


1.手動安裝 pandas 與 openpyxl
$pip install pandas
$pip install openpyxl

1.利用BAT自動安裝套件
(1)安裝Python 3.9.0 執行環境
(2)利用BAT 安裝 pandas 與 openpyxl
程式目的:安裝ListOfClubStudents.py 所需的套件包pandas 與 openpyxl
檔案名稱:PandasOpenpyxlSetup.bat
檔案內容:
@echo off
if not exist %HomeDrive%%HomePath%\AppData\Local\Programs\Python\Python39 (
echo "Please install Python 3.9.0"
start https://skjhcreator.blogspot.com/2022/05/batpython-390.html
) else (
echo "Python 3.9.0 OK"
python -m pip install pandas openpyxl
)
pause
exit

2.資料夾架構:
 

3.
程式目的:讀取Input內的兩個EXCEL檔,匯出所有社團學生年班座號與Email的CSV檔案
檔案名稱:ListOfClubStudents.py
檔案內容:
import os
import csv
import openpyxl
import pandas as pd
# 取得 input資料夾內的兩個Excel檔名
FileName = []
DirPath=str(os.path.abspath(os.getcwd()))+'\\Input\\'
FileName=os.listdir(DirPath)
StrFileName0=DirPath+str(FileName[0])
StrFileName1=DirPath+str(FileName[1])
# 取得第二個Excel內所有的年班座號->Email對應表並存入dict
workbook1 = openpyxl.load_workbook(StrFileName1)
sheet1 = workbook1.worksheets[0]
df1_dict = dict()
for i in range(2,sheet1.max_row+1):
     df1_dict[sheet1.cell(row=i,column=2).value]=sheet1.cell(row=i,column=3).value

# 取得第一個Excel內的所有sheet名稱並存入List
df0=pd.read_excel(StrFileName0,None)
df0_SheetNames=[]
for key in df0.keys():
     df0_SheetNames.append(key)
workbook0 = openpyxl.load_workbook(StrFileName0)

# output 檔名
# print(df0_SheetNames)
# print(len(df0_SheetNames))
for k in range(0,len(df0_SheetNames)):
     OutputFileName = str(k+1).rjust(2,'0')+df0_SheetNames[k]+".csv"
     sheet0 = workbook0.worksheets[k]
     ClassNumber = dict()
# 擷取年班座號
# print(sheet0.cell(row=2,column=2).value[0]+sheet0.cell(row=2,column=2).value[2:4]+str(sheet0.cell(row=2,column=3).value).rjust(2,'0'))
     for i in range(0,sheet0.max_row-1):
          ClassNumber[int(sheet0.cell(row=2+i,column=2).value[0]+sheet0.cell(row=2+i,column=2).value[2:4]+str(sheet0.cell(row=2+i,column=3).value).rjust(2,'0'))]=0
#print(len(ClassNumber))

# 比較ClassNumber 與 df1_dict
     for i in ClassNumber:
          for j in df1_dict:
               if i == j:
                    ClassNumber[i] = df1_dict[j]

# 寫入CSV
     with open(OutputFileName,'w',newline="") as csvfile:
          FieldNames = ['classnumber','EMail']
          writer = csv.DictWriter(csvfile,fieldnames=FieldNames)
          writer.writeheader()
          for i in ClassNumber:
               writer.writerow({FieldNames[0]:i,FieldNames[1]:ClassNumber[i]+";"})


資料來源:

2022年4月28日 星期四

安裝退職所得應稅所得計算軟體後,無法出現啟動捷徑,該怎麼辦?

        出納組長因為人員退休須辦理退職所得應稅所得計算,電腦需要安裝退職所得應稅所得計算軟體。安裝完後,卻無法出現啟動捷徑,於是尋求我的協助。
原本應該是這樣
但卻找不到啟動捷徑。那接下來應該怎麼處理?
到C:\Program Files (x86)\退職所得應課稅所得試算軟體,裡面有個Pension.bat。如下所示:
將C:\Program Files (x86)\退職所得應課稅所得試算軟體\Pension.bat 按滑鼠右鍵,出現下選單。選擇傳送到(N)桌面(建立捷徑)。如下圖所示:

利用EXCEL來建立年班座號與Gsuite對應表,建立社團Classroom

系列文章:

        近來因為確診人數節節升高,導致社團也要有線上課程。因此,趕忙製作學生彰化Gsuite帳號名單。但問題是各班學生散佈到各社團。而彰化Gsuite 只提供各班學生Gsuite帳號。那我該如何利用EXCEL來建立年班座號與Gsuite對應表。
        分析所能取得的資料如下:
        彰化Gsuite所能取得的資料名稱:姓名、年班座號、彰化Gsuite帳號
        社團學生名單資料:該社團學生班級、座號、姓名、性別等。因為考慮學生姓名會有同名同姓的特例,所以改用年班座號。下方為取得資料的班級座號表。
那接下來,就在社團學生名單資料新增欄位。
取得B2欄位的年。語法: =LEFT(B2,1)
取得B2欄位的班級。語法: =MID(B2,3,2)
取得C2欄位的座號。語法: =TEXT(MID(C2,1,2),"00")
將上述年、班級、座號組合成年班座號。語法: =L2&M2&N2
將彰化Gsuite的學生帳號資料放置最後,該資料表名稱為對應表。
在新的欄位,跟O2欄位進行對應。語法: =VLOOKUP(VALUE(O2),對應表!A1:B853,2)



2022年4月7日 星期四

如何在Office 2019的Word中,讓中文字出現正確的注音符號

        最近有老師問我這個問題,在Word裡面,如何讓中文字出現注音符號?我心裡想這不是很簡單嗎?而且網路都有教學,Google搜尋就會出現一大堆。於是找了找,依照網路教學試了試。很奇怪,四聲的音符都會出錯。以下就是截圖:




        後來,找到資料來源4.多音破音字型,就是下載字型->安裝字型->對中文字反白->切換字型。

Windows 10 電腦開機時出現Secure Boot Violation,然後無法進入開機畫面,該如何解決

        最近處理電腦問題,Windows 10 電腦開機時出現Secure Boot Violation,然後無法進入開機畫面。那我該如何解決?
        教學影片:

2022年4月6日 星期三

只要點兩下,開機還原電腦停用Edge與Chrome更新


       造成電腦教室學生電腦變得很慢的兇手竟然是 Chrome 更新
        又到模擬志願選填的時候,往年總是會碰到電腦教室的學生機變得很慢。因此,導致無法讓學生在時限內完成志願選填。到底是什麼原因?後來發現學生機的Chrome 正在做更新。而且版本越舊,更新時間就越長。Chrome 更新期間,學生使用Chrome 就會變得很慢。
       已經停用了Windows 更新與Chrome更新,電腦教室學生電腦又變得很慢。造成電腦教室學生電腦變得很慢的兇手竟然是 Edge 更新。
        又到模擬志願選填的時候,往年總是會碰到電腦教室的學生機變得很慢。因此,導致無法讓學生在時限內完成志願選填。到底是什麼原因?停用了Windows 更新與Chrome更新,後來發現學生機的Edge 正在做更新。而且版本越舊,更新時間就越長。Edge 更新期間,學生使用Edge 就會變得很慢。

        在系列文章一與二中,分別停用Edge 與 Chrome 更新。這次則是希望只要點兩下,停用Edge與Chrome更新。降低滑鼠點選的次數。
檔案下載:解壓縮密碼demo1234
教學影片:

        在BAT的寫法觀念中,要特別注意的地方如下:
        %ProgramFiles%=C:\Program Files
        %ProgramFiles(x86)%=C:\Program Files (x86)

目的:停用Edge與Chrome更新
程式名稱:StopEdgeAndChromeUpdate.bat
程式內容:
@echo off
REM ---------------以下是程式碼,不需更改---------------
REM :: BatchGotAdmin (Run as Admin code starts)
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
REM :: BatchGotAdmin (Run as Admin code ends)
REM :: Your codes should start from the following line
cd %ProgramFiles(x86)%\Google\Update\
if exist  GoogleUpdate.exe (
    rename GoogleUpdate.exe GoogleUpdate01.exe
)
cd %ProgramFiles(x86)%\Microsoft\EdgeUpdate\
if exist  MicrosoftEdgeUpdate.exe (
    rename MicrosoftEdgeUpdate.exe MicrosoftEdgeUpdate01.exe
)
exit

目的:啟用Edge與Chrome更新
程式名稱:StartEdgeAndChromeUpdate.bat
程式內容:
@echo off
REM ---------------以下是程式碼,不需更改---------------
REM :: BatchGotAdmin (Run as Admin code starts)
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
REM :: BatchGotAdmin (Run as Admin code ends)
REM :: Your codes should start from the following line
cd %ProgramFiles(x86)%\Google\Update\
if exist  GoogleUpdate01.exe (
    rename GoogleUpdate01.exe GoogleUpdate.exe
cd %ProgramFiles(x86)%\Microsoft\EdgeUpdate\
if exist  MicrosoftEdgeUpdate01.exe (
    rename MicrosoftEdgeUpdate01.exe MicrosoftEdgeUpdate.exe
)
exit



只要點兩下,開機還原電腦停用Edge更新


        已經停用了Windows 更新與Chrome更新,電腦教室學生電腦又變得很慢。造成電腦教室學生電腦變得很慢的兇手竟然是 Edge 更新。
        又到模擬志願選填的時候,往年總是會碰到電腦教室的學生機變得很慢。因此,導致無法讓學生在時限內完成志願選填。到底是什麼原因?停用了Windows 更新與Chrome更新,後來發現學生機的Edge 正在做更新。而且版本越舊,更新時間就越長。Edge 更新期間,學生使用Edge 就會變得很慢。可是教師機並沒有這種情形,那到底是怎麼一回事?原來教師機並沒有開機還原,而學生機每次都要做開機還原。噢!!天啊!原來是還原的關係,導致MicroSoft Edge 每次開機都要更新一次。那可能讓學生機不做開機還原嗎?當然是不可能!那只好讓學生機Edge 瀏覽器不更新。
        參考資料中,都在說明要做這幾件事,才能停用MicroSoft Edge更新。
        (1)停用MicroSoft Edge 更新服務:

        但是點選Edge 瀏覽器也會執行MicroSoft Edge 更新服務。即便已做了(1)停用MicroSoft Edge更新服務,也是會出現詢問視窗是否允許MicroSoft Edge 更新,然後一般人都會點選允許,然後MicroSoft Edge 更新。換言之,[停用MicroSoft Edge 更新服務]沒用。


        那要停用Edge 更新,那要怎麼做?有兩種:一、點兩下BAT,二、手動更改檔名。
一、點兩下BAT
檔案下載:解壓縮密碼demo1234
教學影片:

        如下圖所示,均執行C:\Program Files (x86)\Microsoft\EdgeUpdate\MicrosoftEdgeUpdate.exe。換言之,只要更改MicrosoftEdgeUpdate.exe檔名,就無法執行更新了。


        在BAT的寫法觀念中,要特別注意的地方如下:
        %ProgramFiles%=C:\Program Files
        %ProgramFiles(x86)%=C:\Program Files (x86)

目的:停用Edge更新
程式名稱:StopEdgeUpdate.bat
程式內容:
@echo off
REM ---------------以下是程式碼,不需更改---------------
REM :: BatchGotAdmin (Run as Admin code starts)
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
REM :: BatchGotAdmin (Run as Admin code ends)
REM :: Your codes should start from the following line
cd %ProgramFiles(x86)%\Microsoft\EdgeUpdate\
if exist  MicrosoftEdgeUpdate.exe (
    rename MicrosoftEdgeUpdate.exe MicrosoftEdgeUpdate01.exe
)
exit

目的:啟用Edge更新
程式名稱:StartEdgeUpdate.bat
程式內容:
@echo off
REM ---------------以下是程式碼,不需更改---------------
REM :: BatchGotAdmin (Run as Admin code starts)
REM --> Check for permissions
>nul 2>&1 "%SYSTEMROOT%\system32\cacls.exe" "%SYSTEMROOT%\system32\config\system"
REM --> If error flag set, we do not have admin.
if '%errorlevel%' NEQ '0' (
echo Requesting administrative privileges...
goto UACPrompt
) else ( goto gotAdmin )
:UACPrompt
echo Set UAC = CreateObject^("Shell.Application"^) > "%temp%\getadmin.vbs"
echo UAC.ShellExecute "%~s0", "", "", "runas", 1 >> "%temp%\getadmin.vbs"
"%temp%\getadmin.vbs"
exit /B
:gotAdmin
if exist "%temp%\getadmin.vbs" ( del "%temp%\getadmin.vbs" )
pushd "%CD%"
CD /D "%~dp0"
REM :: BatchGotAdmin (Run as Admin code ends)
REM :: Your codes should start from the following line
cd %ProgramFiles(x86)%\Microsoft\EdgeUpdate\
if exist  MicrosoftEdgeUpdate01.exe (
    rename MicrosoftEdgeUpdate01.exe MicrosoftEdgeUpdate.exe
)
exit


二、手動更改檔名
        手動更改MicrosoftEdgeUpdate.exe檔名


三、檢查Edge 更新



資料來源:

只要點兩下,就可以將資料夾input內的所有Word通通轉成一個PDF

  系列文章: 1.  只要點兩下,就能將一堆的Doc與Docx 轉成 PDF 1. https://skjhcreator.blogspot.com/2023/05/docdocx-pdf.html 2. 只要點兩下,就能將一堆的JPG轉成一個PDF,並以JPG所在的資料夾名稱...