系列文章:
近來因為確診人數節節升高,導致社團也要有線上課程。因此,趕忙製作學生彰化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]+";"})