将Excel中的电话导入手机联系人
- 2026-09-15 22:59:00
- 丁国栋
- 原创 15
默认手机是可以导入.vcf格式的联系人的,先在手机里创建一个联系人,然后通过二维码或者导出vcf获取联系人的内容模板,例如:
注:二维码是vcf格式的,可以用微信扫描复制出文本,就是我们需要的模板。
BEGIN:VCARD VERSION:3.0 N:;姓名;;; FN:姓名 TEL;TYPE=CELL:电话号码 NOTE;CHARSET=UTF-8:备注信息 END:VCARD
需要哪些部分就添加哪些部分。其中电话号码可以有多个,例如 TEL;TYPE=PREF:电话号码和 TEL;TYPE=CELL:电话号码,PREF 是主要的意思,相当于 Main,CELL 就是手机。我们可以在备注信息里填写我们需要额外记录的信息,如车牌号等。
下面是PHP代码示例:
注:有一段时间没有手写PHP代码了,再加上最近一直在看Go,写起PHP代码来竟然有些手生,还是要多写多练,保持基本水平,大脑和记忆用进废退,不要让AI迷失了基本的编码能力。
如果只有姓名和电话号码,可以这样写:
<?php
$contents = file_get_contents('ids.txt'); # ids.txt 每一行分别是姓名、手机号
$items = preg_split('/\n/', $contents);
$vcf_tpl = <<<eod
BEGIN:VCARD
VERSION:3.0
N:;%s;;;
FN:%s
TEL;TYPE=CELL:%s
END:VCARD
eod;
foreach($items as $item)
{
if(empty(trim($item))) continue;
list($name, $phone) = preg_split('/\t/', $item);
if(empty($name) || empty($phone)) continue;
$name = 'PREFIX' . $name;
$vcf_item = sprintf($vcf_tpl, $name, $name, $phone);
$vcf_lines[] = $vcf_item;
}
$vcf_lines = array_unique($vcf_lines);
$vcf_contents = join(PHP_EOL, $vcf_lines);
echo $vcf_contents;
如果文件的内容是:姓名、备注(如车牌号)、电话号码三列,那处理起来就麻烦一些:
- 因为人有多个手机号,所以手机号的信息需要特殊处理,保证多个手机号对应同一个联系人;
- 有的人备注没填或者手机号没填,需要额外处理;
- 没有手机号就跳过;
<?php
$contents = file_get_contents('ids2.txt'); # ids2.txt 每一行分别是姓名、备注、手机号
$items = preg_split('/\n/', $contents);
$vcf_tpl = <<<eod
BEGIN:VCARD
VERSION:3.0
N:;%s;;;
FN:%s
%s
NOTE;CHARSET=UTF-8:%s
END:VCARD
eod;
foreach($items as $item)
{
if(empty(trim($item))) continue;
$record = preg_split('/\t/', $item);
$note = '';
if(count($record) === 3) list($name, $note, $phone) = $record;
if(count($record) === 2)
{
list($name, $field) = $record;
preg_match('/\d{11}/', $field, $matches);
if($matches)
$phone = $field;
else
$note = $field;
}
$note = preg_replace('/ +/', '', $note);
if(empty($name) || empty($phone)) continue;
$contact = new stdClass();
if(!isset($contacts[$name]))
{
$contact->name = $name;
}
else
{
$contact = $contacts[$name];
}
$contact->notes[] = $note;
$contact->phone[] = $phone;
$contacts[$name] = $contact;
}
foreach($contacts as $contact)
{
$name = $contact->name;
if(!empty($contact->notes))
$note = join(';', $contact->notes);
else
$note = '';
if(count($contact->phone) == 1) $phone = sprintf('TEL;TYPE=PREF:%s', $contact->phone[0]);
if(count($contact->phone) == 2)
{
$phone1 = $contact->phone[0];
$phone2 = $contact->phone[1];
$main_phone = sprintf('TEL;TYPE=PREF:%s', $phone1);
$cell_phone = sprintf('TEL;TYPE=CELL:%s', $phone2);
if($phone1 != $phone2)
$phone = $main_phone . '\n' . $cell_phone;
else
$phone = $main_phone;
}
$name = 'PREFIX' . $name;
$vcf_item = sprintf($vcf_tpl, $name, $name, $phone, $note);
$vcf_lines[] = $vcf_item;
}
$vcf_lines = array_unique($vcf_lines);
$vcf_contents = join(PHP_EOL, $vcf_lines);
echo $vcf_contents;
然后把输出的内容保存为 .vcf 文件,就可以用微信发回手机导入到联系人了。
---
发表评论