Недавно я пытался перекинуть свои контакты из старого Блекберри в телефон с Андроидом и меня постигла неудача - оказалось не существует инструментов для корректного преобразования одного формата в другой.
Тогда я решил преобразовать мои контакты, полученные из старого телефона, в таблицу excel, и с помощью несложного скрипта в VBA преобразовать её файл вида .vcf, который можно скормить любому современному телефону.
Таблица у меня получилась такого вида:
Public Sub vcard()
Dim a(), i&, ii&, t
Dim b As String, OutDir As String
Dim fso As Object 'FileSystemObject
Dim txt As Object 'TextStream
a = [a1].CurrentRegion.Value
b = "" ' Переменная, в которую мы будем собирать информацию в формате .vcf
For i = 2 To UBound(a)
b = b & "BEGIN:VCARD" & vbNewLine & "VERSION:2.1" & vbNewLine
b = b & "FN:" & Cells(i, 1).Text & vbNewLine
If Cells(i, 2).Text <> "" Then b = b & "EMAIL:" & Cells(i, 2).Text & vbNewLine
If Cells(i, 3).Text <> "" Then b = b & "ADR:" & Cells(i, 3).Text & ", " & Cells(i, 4).Text & vbNewLine
If Cells(i, 5).Text <> "" Then b = b & "TEL;HOME:" & Cells(i, 5).Text & vbNewLine
If Cells(i, 6).Text <> "" Then b = b & "TEL;CELL;PREF:" & Cells(i, 6).Text & vbNewLine
If Cells(i, 7).Text <> "" Then b = b & "TEL;WORK:" & Cells(i, 7).Text & vbNewLine
If Cells(i, 8).Text <> "" Then b = b & "ORG:" & Cells(i, 8).Text & vbNewLine
If Cells(i, 9).Text <> "" Then b = b & "TITLE:" & Cells(i, 9).Text & vbNewLine
If Cells(i, 10).Text <> "" Then b = b & "NOTE:" & Cells(i, 10).Text & vbNewLine
b = b & "END:VCARD" & vbNewLine
Next
OutDir = "C:\out\" 'Папка, в которую сохраним полученный файл
Set fso = CreateObject("Scripting.FileSystemObject")
Set txt = fso.CreateTextFile(OutDir & "out.vcf", 1, 1) 'Последний параметр - Unicode
txt.WriteLine b
txt.Close
End Sub
Код перебирает строки и ячейки и если находит информацию в соответствующих ячейках создаёт соответствующую строчку в файле .vcf.
Вы можете сформировать другую табличку в excel и немого скорректировав скрипт сможете собрать свой файл .vcf.
Ничего сложного, но может кому-то понадобится.
P.S. для информации напоминаю структуру файла .vcf.
Начинаться контакт должен строками:
"BEGIN:VCARD"
"VERSION:2.1"
Далее идут ключи (они могут отсутствовать, тогда просто информации в соответствующих ячейках не будет)
"FN:" - название контакта
"EMAIL:" - электронная почта
"ADR:" - адресс
"TEL;HOME:" - домашний телефон
"TEL;CELL;PREF:" - сотовый телефон
"TEL;WORK:" - рабочий телефон
"ORG:" - название организации
"TITLE:" - должность
"NOTE:" - заметка
Контакт должен завершаться строчкой:
"END:VCARD"
В одном файле .vcf может быть сколь угодно много контактов, идущих друг за другом.
Комментарии (12)
mixsture
11.11.2023 23:41+1И с очисткой данных тут тоже стоит поработать. Формат записи явно использует двоеточие и точку с запятой как разделители и, если встретит их внутри данных (например, в адресе), то врятли выйдет корректный файл на выходе.
Вероятно, их как-то можно экранировать или хотя бы заменять на неопасные символы.Kutush Автор
11.11.2023 23:41Очистку данных я предлагаю делать в excel самостоятельно - там достаточно богатый инструментарий, который может использовать любой офисный работник.
Z55
11.11.2023 23:41+3Если честно, не очень понятно зачем?
Поясню. У вас уже есть excel-файл с контактами. Гугл, с радостью импортирует к себе csv файл с контактами и при очередной синхронизации доставит контакты в телефон. Без лишних скриптов.
Kutush Автор
11.11.2023 23:41Я конечно пробовал. ) Импортирует не корректно. Пришлось разбираться с структуре файла
.vcf и писать скрипт.
Z55
11.11.2023 23:41Всё там отлично. А если непонятна структура csv, нужно просто экспортировать текущие контакты там же и посмотреть, как должен выглядеть файл. Работает отлично, проверено не однократно.
Kutush Автор
11.11.2023 23:41Но у меня не получилось... Часть данных терялось, часть искажалась.
Я импортировал контакты выгруженные из какой-то утилиты для Блекберри... Это не то же самое, что перекидывать контакты из старого телефона с Андроидом на новый Айфон. Проблемы были... И проблемы такие встречаются у людей - им поможет подобный скрипт (я надеюсь )))
Merrynose
11.11.2023 23:41+2Есть значительно более простой путь:
Сохраняете свою эксель-табличку как CSV
Открываете сайт contacts.google.com
Через пункт меню "Импортировать" импортируете ваш CSV
Profit
Kutush Автор
11.11.2023 23:41У меня импортировалось некорректно, пока я лично не сделал скрипт (разобравшись при этом в структуре файла
.vcf
) как я описал в статье.Ясное дело, что я пробовал очевидные способы и потерпел крах )))
Зачем бы я начал писать свой скрипт, если бы работал импорт контактов. )
Надо понимать, что гугл импортирует табличку определённой структуры. Если к примеру попробовать вставить в него табличку в том виде, в котором я её в статье привёл в качестве примера, он половину информации игнорирует, часть сохраняет некорректно и тп.
Merrynose
11.11.2023 23:41Не готов ставить диагноз именно вашей табличке (возможно ему пробелы в названиях столбцов не нравится или ещё что), но я неоднократно использовал этот способ и все нормально импортировалось.
mixsture
Предложу разделить читающую часть и записывающую на разные процедуры. Тогда адаптация скрипта к новому файлу будет состоять из редактирования только читающей процедуры.
Если двигаться дальше, то из читающей части я бы вынес информацию о расположении колонок в "настройки", а из пишущей части - путь к папке сохранения в них же. Тогда при адаптации можно ограничиться лишь исправлением этих настроек, не трогая основной код.
Kutush Автор
Да, спасибо, скрипт конечно можно усовершенствовать, но он станет сложней. Я стремился сделать самый простой скрипт, который может использовать любой пользователь excel. Мне кажется, в таком виде он наиболее понятен, а если что не так - любой пользователь сможет его скорректировать.
Тут я считаю играет связка excel - скрипт. Сначала подготавливаем данные в том виде, который нужно, средствами excel, затем делаем файл
.vcf с помощью наиболее простого скрипта.