如何修改现有的电子邮件CSV脚本以跳过空白行或在任何字段中具有单个零的行
How can I modify the existing email CSV script to skip blank rows, or rows with a single zero in either field?
我一直在使用谷歌提供的脚本从谷歌表格生成和发送csv。我对它进行了定制,这样它就不会要求输入范围或文件名。这样,它就会定期自动给我发邮件,告诉我范围的内容。
问题是CSV包含空行,最后,我希望脚本自动过滤掉(我无法实现,因为我只是没有知识)。反过来,这样做的原因是范围包含空行-但这有一个很好的理由,即范围中的行有时会扩展,有时会收缩,这取决于底层数据。(这个范围实际上与数据透视表有关)。
作为额外奖励,我还希望它跳过行,如果行中两列中的任何一列都有一个零。(我应该能够在数据透视表中过滤掉这个;我可以,但是如果出现新值,过滤器就不能正常工作了。
这是我的电子邮件CSVs的一个例子:
0,0
,0
0.65,0
0.75,16900
0.78,2000
0.79,500
0.8,110800
0.83,1200
0.85,20000
0.87,4500
0.9,3500
1,5000
1.1,4000
1.2,41500
,
,
,
,
,
,
,
,
,
,
,
,
,
,
这是一个我希望如何接收CSV的示例:
0.75,16900
0.78,2000
0.79,500
0.8,110800
0.83,1200
0.85,20000
0.87,4500
0.9,3500
1,5000
1.1,4000
1.2,41500
任何帮助,这将是非常感激。谢谢。
这是我目前使用的脚本:
var settings = {
"recipients": "myemailaddress",
"emailSubject": "CSV file",
"emailMessage": "Your CSV file is attached",
"fileExtension": ".csv",
"carriageReturn": "'r'n"
};
function onOpen() {
var subMenus = [];
subMenus.push({name: "Email Named Range as CSV", functionName: "run"});
SpreadsheetApp.getActiveSpreadsheet().addMenu("CSV", subMenus);
}
function run() {
/var namedRange = Browser.inputBox("Enter named range to convert to CSV (e.g. sampleDataRange):");/
var namedRange = "FORCSVEXPORT";
var fileName = "EPCSELLOFFERS.CSV";
if (namedRange.length !== 0 && fileName.length !== 0) {
settings.dataRangeName = namedRange;
settings.csvFileName = fileName + settings.fileExtension;
var csvFile = convertNamedRangeToCsvFile_(settings.dataRangeName, settings.csvFileName);
emailCSV_(csvFile);
}
else {
Browser.msgBox("Error: Please enter a named range and a CSV file name.");
}
}
function emailCSV_(csvFile) {
MailApp.sendEmail(settings.recipients, settings.emailSubject, settings.emailMessage, {attachments: csvFile});
}
function convertNamedRangeToCsvFile_(rngName, csvFileName) {
var ws = SpreadsheetApp.getActiveSpreadsheet().getRangeByName(rngName);
try {
var data = ws.getValues();
var csvFile = undefined;
if (data.length > 1) {
var csv = "";
for (var row = 0; row < data.length; row += 1) {
for (var col = 0; col < data[row].length; col += 1) {
if (data[row][col].toString().indexOf(",") != -1) {
data[row][col] = "'"" + data[row][col] + "'"";
}
}
// Join each rows columns
// Add carriage return to end of each row
csv += data[row].join(",") + settings.carriageReturn;
}
csvFile = [{fileName: csvFileName, content: csv}];
}
return csvFile;
}
catch(err) {
Logger.log(err);
Browser.msgBox(err);
}
}
与其破解原始的convertNamedRangeToCsvFile_()
,我建议在run()
中添加一个额外的步骤,该步骤将调用一个新函数从csv文件中删除不需要的行。
/**
* Remove unwanted lines from given csvFile
*/
function minimizeCsvFile( csvFile ) {
// take apart the csv file contents, into an array of rows
var rows = csvFile[0].content.replace(/'r'n/g, "'n").split("'n");
var newRows = [];
for (var i = 0; i < rows.length; i++ ) {
if (rows[i] == "") continue; // skip blanks
if (rows[i] == ",") continue; // skip null values
// skip rows with either numeric value == 0
var vals = rows[i].split(",");
if (parseFloat(vals[0]) == 0.0 || parseFloat(vals[1]) == 0.0) continue;
// If we got here, we have a keeper - add it to newRows
newRows.push(rows[i]);
}
debugger; // pause to observe in debugger
var csv = newRows.join(settings.carriageReturn);
// Return a single element array with an object, exactly like
// the one from convertNamedRangeToCsvFile_.
return [{fileName: csvFile[0].fileName, content: csv}];
}
要使用它,将run()
中的emailCSV_()
行更改为:
var minimizedCsvFile = minimizeCsvFile(csvFile);
emailCSV_(minimizedCsvFile);
至于这个…
作为奖励…任何帮助,这将是非常感激。谢谢。
我们想要的只是让StackOverflow的新成员在收到帮助时表示感谢!看看这个答案,看看如何接受答案。(你可以通过提问、回答和接受回答来建立信誉!)
但我一直想要一辆法拉利…
相关文章:
- 如何删除多行HTML排列中的空白
- Javascript,有没有一种方法可以将数组写成没有逗号或空格的单个文本字符串
- 在Twitter上用ie9中的空白src访问iframe的contentWindow
- 不同浏览器中的空白字符正则表达式行为
- Javascript中的空白是什么
- 如何使用javascript获取嵌套对象中所有子对象的单个属性
- Facebook共享显示一个接一个的空白页面
- 如果我在javascript中输入无效的电子邮件或空白,如何显示特定的文本框边框红色
- 是否可以禁用jquery中的单个单选按钮
- 引导程序:在导航栏中,显示悬停在单个位置的基于Li Link的不同内容
- 递增一个数字而不去掉前导零
- 使用jquery选中/取消选中单个复选框
- 单个页面上有多个标记表单
- 在不破坏未定义函数的情况下,对多个视图使用单个js文件
- Regex表示10位数字,其中没有't允许所有零、所有单个no和序列号
- 在javascript中检查零参数和空白字符串
- AngularJS格式化程序-如何显示空白而不是零
- 空白或空的数字文本框,而不是零值
- 如何修改现有的电子邮件CSV脚本以跳过空白行或在任何字段中具有单个零的行
- 浏览器如何定义源HTML中的哪些字符,在呈现的HTML中折叠为单个空白?那么s正则表达式呢?