我有一个包含两列的Google电子表格。
第一列包括引荐来源者的名称,第二列包括免费格式文本,其中提到了一些引用的电子邮件地址。一个单元格中可能有多个电子邮件地址,或者没有。
例如:
Referrer | Referral
--------------------------------------------------------------------------
Mister X | I would like to refer somebody@gmail.com and somebodyelse@outlook.com
Miss Y | myfriend@mail.com
Mister Z | None!
etc | ...
我想格式化数据,以便每个引用的地址都有引荐来源和引用的电子邮件地址。
EX:
Referrer | Referral
--------------------------------------------------------------------------
Mister X | somebody@gmail.com
Mister X | somebodyelse@outlook.com
Miss Y | myfriend@mail.com
etc | ...
实现这一目标的最佳方式是什么?
答案 0 :(得分:1)
这是表格中的原始数据。
Referrer Referral
Mister X I would like to refer somebody@gmail.com and somebodyelse@outlook.com
Miss Y myfriend@mail.com
Mister Z None!
在写完之后,这是相同的列。
Referrer none
Mister X somebody@gmail.com
Mister X somebodyelse@outlook.com
Miss Y myfriend@mail.com
Mister Z none
这是代码。目前,您按照我们的显示选择了两列,然后我按照您要求的格式编写它们。虽然有这样一个有限的数据集,但永远不能100%肯定。所以进一步测试会很好。我包括了菜单和一些帮助我调试程序的显示例程。我想你可能想改变范围。去吧。玩得开心。我很喜欢写它。
function onOpen()
{
var ui = SpreadsheetApp.getUi();
ui.createMenu('My Tools')
.addItem('Extract Emails','emailFishing')
.addToUi();
}
function emailFishing()
{
var rng = SpreadsheetApp.getActiveRange();
var rngA = rng.getValues();
var resultsA = [];
//var s = '[';
for(var i = 0;i < rngA.length; i++)
{
if(rngA[i][1])
{
matchA = extractEmails(rngA[i][1]);
if(matchA)
{
for(var j = 0; j < matchA.length;j++)
{
resultsA.push([rngA[i][0], matchA[j]]);
//s += '[' + rngA[i][0] + ', ' + matchA[j] + '], '
}
}
else
{
resultsA.push([rngA[i][0],'none']);
//s += '[' + rngA[i][0] + ', \'none\'],'
}
}
}
//s += ']';
var orng = SpreadsheetApp.getActiveSheet().getRange(rng.getRow(), rng.getColumn(), resultsA.length, resultsA[0].length);
orng.setValues(resultsA);
//dispStatus('Results Array', s, 500, 400);
}
function extractEmails (text)
{
return text.match(/([a-zA-Z0-9._-]+@[a-zA-Z0-9._-]+\.[a-zA-Z0-9._-]+)/gi);
}
function dispStatus(title,html,width,height)
{
// Display a modeless dialog box with custom HtmlService content.
var title = typeof(title) !== 'undefined' ? title : 'No Title Provided';
var width = typeof(width) !== 'undefined' ? width : 250;
var height = typeof(height) !== 'undefined' ? height : 300;
var html = typeof(html) !== 'undefined' ? html : '<p>No html provided.</p>';
var htmlOutput = HtmlService
.createHtmlOutput(html)
.setWidth(width)
.setHeight(height);
SpreadsheetApp.getUi().showModelessDialog(htmlOutput, title);
}
函数extractEmail来自Leniel Macaferi。来自这篇文章Extract all email addresses from bulk text using jquery。虽然我遗漏了JQuery部分。