Преобразовать пользовательский определённый класс в Excel

Преобразовать пользовательский определённый класс в Excel

Иногда у нас есть коллекция классов, и если мы хотим импортировать информацию о классе в файл Excel, удобным решением является использование механизма отражения Python для включения данных класса и имен его переменных-членов без необходимости заранее знать метаданные класса. Вот пример кода, демонстрирующий, как импортировать данные из списка пользовательских классов в файл Excel с помощью Aspose.Cells для Python via .NET: Файл ImportCustomObject.py определяет информацию о классе для импорта и использует механизм отражения Python для включения как данных класса, так и имен переменных-членов в конкретные диапазоны ячеек.

from datetime import date, datetime
import aspose.cells as ac
class MyClass:
def __init__(self, Name, Age, Is_Student, Date, DateTime, Height):
self.Name = Name
self.Age = Age
self.Is_Student = Is_Student
self.Date = Date
self.DateTime = DateTime
self.Height = Height
def import_custom_object(people, cells, row, column, import_options):
# If a header needs to be displayed, write the header (attribute names)
if import_options.is_field_name_shown:
header = vars(people[0]).keys()
for col_index, attr_name in enumerate(header):
cells.get(row, column + col_index).put_value(attr_name)
row += 1
# Write the attribute values of the object
for obj in people:
for col_index, (attr_name, attr_value) in enumerate(vars(obj).items()):
cell = cells.get(row, column + col_index)
if isinstance(attr_value, (int, float, str, bool)):
cell.put_value(attr_value)
elif isinstance(attr_value, (date, datetime)):
cell.put_value(attr_value)
style = cell.get_style()
if isinstance(attr_value, datetime):
style.custom = "yyyy-MM-dd HH:mm:ss"
elif isinstance(attr_value, date):
style.number = 14 # Excel Date Format
cell.set_style(style)
else:
cell.put_value(str(attr_value))
row += 1

Файл TestImportCustomObject.py иллюстрирует простой случай использования. Пользователи могут обратиться к этому примеру или внести небольшие изменения для импорта своих данных.

from datetime import date, datetime
import aspose.cells as ac
from ImportCustomObject import MyClass, import_custom_object
people = [
MyClass("Bob", 30, True, date(2024, 3, 9), datetime.now(), 112.0),
MyClass("Lucy", 25, False, date(2024, 3, 10), datetime.now(), 111.1),
MyClass("Tom", 45, True, date(2024, 3, 11), datetime.now(), 110.8),
]
workbook = ac.Workbook()
worksheet = workbook.worksheets[0]
cells = worksheet.cells
import_options = ac.ImportTableOptions()
# Display the table header or not
import_options.is_field_name_shown = True
start_row = 4
start_column = 1
import_custom_object(people, cells, start_row, start_column, import_options)
workbook.save("import_custom_object.xlsx")