Создание нескольких телефонов vCard с использованием vObject
Я использую vObject для создания vCard. Все работает хорошо, за исключением того, что я не могу добавить несколько телефонных номеров.
Прямо сейчас я делаю это:
v.add('tel')
v.tel.type_param = 'WORK'
v.tel.value = employee.office_phone
v.add('tel')
v.tel.type_param = 'FAX'
v.tel.value = employee.fax
Поскольку он работает в качестве ключевого значения, рабочий телефон перезаписывается номером факса.
Любая идея о том, кто делать это правильно?
Спасибо!
2 ответа
Решение
add()
Метод возвращает конкретный объект, который можно использовать для заполнения дополнительных данных:
import vobject
j = vobject.vCard()
o = j.add('fn')
o.value = "Meiner Einer"
o = j.add('n')
o.value = vobject.vcard.Name( family='Einer', given='Meiner' )
o = j.add('tel')
o.type_param = "cell"
o.value = '+321 987 654321'
o = j.add('tel')
o.type_param = "work"
o.value = '+01 88 77 66 55'
o = j.add('tel')
o.type_param = "home"
o.value = '+49 181 99 00 00 00'
print(j.serialize())
Выход:
BEGIN:VCARD
VERSION:3.0
FN:Meiner Einer
N:Einer;Meiner;;;
TEL;TYPE=cell:+321 987 654321
TEL;TYPE=work:+01 88 77 66 55
TEL;TYPE=home:+49 181 99 00 00 00
END:VCARD
У меня была такая же проблема, и я сделал это:
card = vobject.vCard()
card.add('fn')
card.fn.value = fullname
card.add('email')
card.email.value = email
card.email.type_param = 'INTERNET'
card.add('tel')
card.tel.value = cellphone
card.tel.type_param = 'CELL,VOICE,PREF'
if workphone != '' :
card.tel_list.append(vobject.base.ContentLine('tel', [['TYPE:','work:']], workphone))
if fax != '' :
card.tel_list.append(vobject.base.ContentLine('tel', [['TYPE:','fax:']], fax))
vcard_data = card.serialize()