標籤

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]+";"})


資料來源:

沒有留言:

張貼留言

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

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