使用 Openpyxl 创建多个自定义电子表格
Using Openpyxl to create multiple custom spreadsheets
我正在尝试根据我们拥有的更大范围sheet 的标准为我的办公室创建一系列范围sheet。这可以很容易地手工完成,但由于我是编程新手,我认为这可能是一个有趣的练习,看看我是否可以使用 python 使用 Openpyxl 模块来完成它。
基本问题:
我有一份人们前往的国家/地区列表,并且我有包含人名和其他数据的行,包括每个人前往的国家/地区的名称。每个人要去的国家在第一列。对于每个国家/地区,我想制作一个单独的 工作簿 来获取每个前往该国家/地区的人的数据行。为了我办公室的其他目的,每个列表都应该保存为一个单独的 .xlsx 文件,而不是简单地在一个工作簿中保存一个新的 sheet。
我对编程还很陌生,但到目前为止我是这样尝试的:
import openpyxl
from openpyxl import load_workbook
from openpyxl import Workbook
def create_roster(Country_name):
roster_book = Workbook()
ws2 = roster_book.active
for row in cell_rows:
if row[0] == Country_name:
ws2.append(row)
roster_book.save('C:\....\{}.xlsx'.format(Country_name))
countries = ('Au','Brazil','Costa R','Cuba','France','Germ','Ghana','Greece','Hungary','Italy','Japan','Korea','Peru','Romania','S.A.','Switz','Thai')
wb = load_workbook('C:\....\Big_list.xlsx', data_only=True)
ws = wb.active
cell_rows = []
for row in ws.values:
cell_rows.append(tuple(row))
for country in countries:
create_roster(country)
当我 运行 这段代码时,出现了一条我以前从未收到过的错误消息,它说,
"Exception Unhandled: got invalid input value of type < class 'xml.etree.ElementTree.Element'>, expected string or Element."
到目前为止,搜索此错误消息对我来说还没有结果。
更奇怪的是,我没有像往常一样显示错误的行号(我使用的是 Visual Studio 2019),而是 IDE 模块显示文本"Frame not in module. The current stack frame was not found in a loaded module. Source cannot be shown for this location."
关于此错误的另一点相关信息是,在我尝试创建所有这些 .xlsx 文件的文件夹中,我列表中的第一个 Au.xlsx 出现在我正在尝试的文件夹中将它们全部保存到。但是当我尝试使用 Excel 打开这个文件时,它是不可读的。
我无法判断我尝试执行此操作的方式有什么问题。这是尝试创建多个自定义 .xlsx 文件的错误方法吗?此处的任何见解或建议将不胜感激。
df = pd.read_excel("Filename.xlsx")
#make a list of all unique country names
# or you can just read that specific cloumn and remove duplicate and pass it into a list
list = [All unique country names]
for i in list:
# apply str func to I/P for String Comparsion
i = str(i)
leng = len(i)
try:
#make slice of dataframe containing only country = i
df1= df[df.iloc[:, column_number_of_countries_column].str[:leng]== i]
except:
# pass if country does not exists
continue
#save df slice to excel sheet with name as Country
df1.to_excel(i+".xlsx", index= False)
print(" Sheet {} saved successfully!".format(i))
print("File Saved!")
我正在尝试根据我们拥有的更大范围sheet 的标准为我的办公室创建一系列范围sheet。这可以很容易地手工完成,但由于我是编程新手,我认为这可能是一个有趣的练习,看看我是否可以使用 python 使用 Openpyxl 模块来完成它。
基本问题: 我有一份人们前往的国家/地区列表,并且我有包含人名和其他数据的行,包括每个人前往的国家/地区的名称。每个人要去的国家在第一列。对于每个国家/地区,我想制作一个单独的 工作簿 来获取每个前往该国家/地区的人的数据行。为了我办公室的其他目的,每个列表都应该保存为一个单独的 .xlsx 文件,而不是简单地在一个工作簿中保存一个新的 sheet。
我对编程还很陌生,但到目前为止我是这样尝试的:
import openpyxl
from openpyxl import load_workbook
from openpyxl import Workbook
def create_roster(Country_name):
roster_book = Workbook()
ws2 = roster_book.active
for row in cell_rows:
if row[0] == Country_name:
ws2.append(row)
roster_book.save('C:\....\{}.xlsx'.format(Country_name))
countries = ('Au','Brazil','Costa R','Cuba','France','Germ','Ghana','Greece','Hungary','Italy','Japan','Korea','Peru','Romania','S.A.','Switz','Thai')
wb = load_workbook('C:\....\Big_list.xlsx', data_only=True)
ws = wb.active
cell_rows = []
for row in ws.values:
cell_rows.append(tuple(row))
for country in countries:
create_roster(country)
当我 运行 这段代码时,出现了一条我以前从未收到过的错误消息,它说, "Exception Unhandled: got invalid input value of type < class 'xml.etree.ElementTree.Element'>, expected string or Element."
到目前为止,搜索此错误消息对我来说还没有结果。
更奇怪的是,我没有像往常一样显示错误的行号(我使用的是 Visual Studio 2019),而是 IDE 模块显示文本"Frame not in module. The current stack frame was not found in a loaded module. Source cannot be shown for this location."
关于此错误的另一点相关信息是,在我尝试创建所有这些 .xlsx 文件的文件夹中,我列表中的第一个 Au.xlsx 出现在我正在尝试的文件夹中将它们全部保存到。但是当我尝试使用 Excel 打开这个文件时,它是不可读的。
我无法判断我尝试执行此操作的方式有什么问题。这是尝试创建多个自定义 .xlsx 文件的错误方法吗?此处的任何见解或建议将不胜感激。
df = pd.read_excel("Filename.xlsx")
#make a list of all unique country names
# or you can just read that specific cloumn and remove duplicate and pass it into a list
list = [All unique country names]
for i in list:
# apply str func to I/P for String Comparsion
i = str(i)
leng = len(i)
try:
#make slice of dataframe containing only country = i
df1= df[df.iloc[:, column_number_of_countries_column].str[:leng]== i]
except:
# pass if country does not exists
continue
#save df slice to excel sheet with name as Country
df1.to_excel(i+".xlsx", index= False)
print(" Sheet {} saved successfully!".format(i))
print("File Saved!")