標籤

bat (54) 作品 (41) python (24) shell (17) windows (11) 虛擬機 (11) php (10) CPP (6) KMS (6) 程式設計 (6) docker (5) 使用教學 (5) xoops (4) 公文 (4) Apache2 (3) Excel (3) juniper (3) 資料庫 (3) 轉檔 (3) mysql (2) 免動手 (2) 資料結構 (2) 軟體廣播 (2) 電腦維修 (2) Android Studio (1) Apple IPAD管理 (1) Arduino (1) CSS (1) LAMP (1) NAS (1) Ubuntu (1) VHD (1) Windows Server (1) 原因 (1) 程式應用 (1) 程式積木 (1) 編輯器 (1) 雲端硬碟 (1)

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 更新



資料來源:

只要點兩下,就能夠將InputAndOutput資料夾底下的子子孫孫資料夾內所有Word通通轉成PDF

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