将Excel中的电话导入手机联系人

2026-09-15 22:59:00
丁国栋
原创 12
摘要:本文介绍如何使用php脚本将Excel中的电话导入到手机联系人中。

默认手机是可以导入.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;

如果文件的内容是:姓名、备注(如车牌号)、电话号码三列,那处理起来就麻烦一些:

  1. 因为人有多个手机号,所以手机号的信息需要特殊处理,保证多个手机号对应同一个联系人;
  2. 有的人备注没填或者手机号没填,需要额外处理;
  3. 没有手机号就跳过;

<?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 文件,就可以用微信发回手机导入到联系人了。

---

发表评论
博客分类