我的团队领导提交了一个表单,其中包含团队成员的姓名和电子邮件(每个团队最多8个电子邮件),这将填充主列表。我想将这些电子邮件导入到新工作表的单列中(单元格CO2:CO20;CR2:CR20;CU2:CU20 etc.etc。合并为一列)
我可以看到用";“分隔的多个导入字符串是如何工作的,但是考虑到我需要堆叠命令的次数,它似乎效率很低。有没有更好、更快的方法?
发布于 2017-08-28 05:12:50
多到一个
此脚本允许您选择许多列,并以a1表示法创建这些范围的逗号分隔字符串。
由于这是一个无模式对话框,您可以继续选择范围并在每个范围之后按下Add按钮,它将继续构建字符串。
您不能一次选择多个列区域,但您可以将字符串复制并保存到某个位置,然后将其粘贴到文本区域中,然后单击加载按钮,它将一次保存所有区域。
加载完所有范围后,选择要将所有这些值复制到的列的顶部单元格,然后单击copy按钮。它一次将它们全部复制。如果您自己构建csv字符串,则只能用逗号分隔字符串。没有空格。没有引号。
这些按钮上有工具提示,以防您忘记它们的作用。
Code.gs:
function lotsToOneMenu()//this creates of Lots to One Tools Menu
{
SpreadsheetApp.getUi().createMenu('LotsToOne Tools')
.addItem('Copy Lots To One', 'copyLotsToOne')
.addToUi();
}
function copyLotsToOne()//This is the main function which starts the ball rolling.
{
clearCurrentRangeList();
var ui=HtmlService.createHtmlOutputFromFile('lots2one');
SpreadsheetApp.getUi().showModelessDialog(ui, 'Copy Lots of Columns To One');
}
function copyToColumn()//This copies all of the range values into one array and copies to final column
{
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getActiveRange();
var rgRow=rg.getRow();
var rgCol=rg.getColumn();
var rgL=getCurrentRangeList();
var rgA=rgL.split(',');
var vA=[];
for(var i=0;i<rgA.length;i++)
{
var rgA1vA=sh.getRange(rgA[i]).getValues();
for(j=0;j<rgA1vA.length;j++)
{
vA.push([rgA1vA[j]]);
}
}
sh.getRange(rgRow,rgCol,vA.length,1).setValues(vA);
}
function addSelectedRange()//This adds one column to the current range at a time
{
var ss=SpreadsheetApp.getActive();
var sh=ss.getActiveSheet();
var rg=sh.getActiveRange();
var rgA1=rg.getA1Notation();
appendCurrentRangeList(rgA1);
return getCurrentRangeList();
}
function appendCurrentRangeList(rgA1)//This is used by above function to append to the string.
{
var current=getCurrentRangeList();
if(current)
{
current+=',' + rgA1;
}
else
{
current=rgA1;
}
putCurrentRangeList(current)
}
function getCurrentRangeList()
{
var props=PropertiesService.getScriptProperties();
var crl=props.getProperty('CurrentRangeList');
return crl;
}
function putCurrentRangeList(rgA1)
{
var props=PropertiesService.getScriptProperties();
props.setProperty('CurrentRangeList',rgA1)
}
function clearCurrentRangeList()
{
var props=PropertiesService.getScriptProperties();
props.setProperty('CurrentRangeList', '')
}lots2one.html
<!DOCTYPE html>
<html>
<head>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>
function addARange()
{
google.script.run
.withSuccessHandler(dispRange)
.addSelectedRange();
}
function dispRange(rl)
{
$('#txt1').val(rl);
}
function setRange()
{
var rs=$('#txt1').val();
google.script.run.putCurrentRangeList(rs);
}
function copyToColumn()
{
google.script.run.copyToColumn();
}
</script>
<style>#btn1{float:right;margin:0 0 0 50px;}#txt1{width:100%;}#btn2{margin:0 0 0 20px;}</style>
</head>
<body>
<div id="div1">
<textarea id="txt1" rows="4" cols="35"></textarea>
<br /><input id="btn0" type="button" value="Add" title="Select a Columnar Range and Click Add" onClick="addARange();" />
<input id="btn2" type="button" value="Load" title="Loads s string of A1Notation columns separated by commas only" onClick="setRange();" />
<input id="btn1" type="button" value="Copy" title="Select Top of Destination Column and Click onCopy" onClick="copyToColumn();" />
</div>
</body>
</html>该对话框如下所示:

输入和输出:

https://stackoverflow.com/questions/45898492
复制相似问题