我有一个大型的联系电子表格,列名称,电话,电子邮件等... 其中有很多行包含无效的电子邮件,所以我想删除包含无效电子邮件的行,有什么建议吗?
答案 0 :(得分:0)
最好的方法是编写用户定义的函数,以使用VBA的RegExp55库验证单元格是否包含有效的电子邮件地址(TRUE)(FALSE)。
您可以开始使用此代码:
Option Explicit
Const MODULE_NAME As String = "modMail"
'' Validate email address
Public Function ValidateEmailAddress(ByVal strEmailAddress As String) As Boolean
On Error GoTo Catch
Dim objRegExp As New RegExp
Dim blnIsValidEmail As Boolean
objRegExp.IgnoreCase = True
objRegExp.Global = True
objRegExp.Pattern = "^([a-zA-Z0-9_\-\.]+)@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$"
blnIsValidEmail = objRegExp.Test(strEmailAddress)
ValidateEmailAddress = blnIsValidEmail
Exit Function
Catch:
ValidateEmailAddress = False
MsgBox "Module: " & MODULE_NAME & " - ValidateEmailAddress function" & vbCrLf & vbCrLf _
& "Error#: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Function
我从这tutorial获取的。如果您查看链接,可以找到有关如何使用它的说明。
答案 1 :(得分:0)
有一个解决方案,它与我的大型列表完美配合,这不是确切的答案,需要一个PHP平台才能运行。
<强> Input_List.csv 强>
姓名|电子邮件|电话
以下是我上面的代码:
<?php
$input_file = "Input_List.csv"; //source file
$output_file = "Output_List.csv"; //cleaned output file
$fp1 = fopen($input_file, "r");
$fp2 = fopen($output_file, 'w');
if ($fp1) {
while (($lines = fgetcsv($fp1)) !== false) {
//print_r($lines);
$inv_flag = 1;
$cf_x_c_d = '';
$co = 0; //incrimenting tocken for column
foreach ($lines as $cf_x) {
if($co == 1){ //check if 2nd column, 2nd column is the email column
if(validate_email($cf_x)){
$cf_x_c_d .= $cf_x.",";
}else{
$inv_flag = 0;
}
}elseif($inv_flag == 1){
$cf_x_c_d .= $cf_x.",";
}
$co = $co + 1;
}
if($inv_flag == 1){
$cf_x_c_d_arr = explode(',', $cf_x_c_d);
fputcsv($fp2, array_values($cf_x_c_d_arr));
}
}
fclose($fp1);
fclose($fp2);
}
function validate_email($email){
$email = str_replace(' ', '', $email);
if(filter_var($email, FILTER_VALIDATE_EMAIL)) {
return true;
}else{
return false;
}
}
?>