我使用多年的脚本出现了一个小问题。此脚本允许您将电子邮件附件中的 CSV 导入 Google Sheet。我的简历,我需要使用它从另一个合作者导入 CSV。不幸的是,第一行的数据未被检索。但如果我在 Google Sheets 中手动打开 CSV 并重新下载 CSV 文件并将其通过电子邮件发送给我自己,则可以检索到。所以我认为问题出在 CSV 而不是脚本上。如果有人知道为什么以及如何解决问题,我是一个支持者。
这是我使用的文件:文件
这是我使用的脚本:
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*---------------------------------------Nom des feuilles---------------------------------------------------------*/
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
const paper_1 = "CSV brute"
const paper_2 = "paramètre"
const paper_3 = "BDD - Historique Valeur"
const paper_ID = "CSV ID"
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*---------------------------------------RECHERCHE CSV - MAIL-----------------------------------------------------*/
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*cherche le mail avec l'object test2 (message.getSubject() == 'test2') dans le libellés test (requete = "label:test")
label:rondes-poitiers---csv// Label - HUGO
label:rapports-de-ronde-domms// Label - YAHYA*/
var requete ="{label:rapports-de-ronde-domms}";
function PROJET_pluto_test()
{
var threads = GmailApp.search(requete);
//cherche dans les 5 mails les plus récent (n<=5)
//toutes les 15 mins un nouveau mail est reçu, l'itération permet de ne louper aucun mail
var object_mail = SpreadsheetApp.getActive().getSheetByName("Feuille 123").getRange("N3").getValue()
// $$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$
for(var n=0;n<=5;n++)
{
var message = threads[n].getMessages()[0];
Logger.log(object_mail + " = " + message.getSubject())
if (message.getSubject() == object_mail)
{
//message pour prévenir (dans le google sheet)
SpreadsheetApp.getActive().toast("📱➡📁 Recherche de données provenant de la tablette.");
var attachment = message.getAttachments()[0];
attachment.setContentTypeFromExtension();
var ss = SpreadsheetApp.getActive();
//importer les données dans la feuille nommée CSV (sh = ss.getSheetByName("CSV brute2"))
var sh = ss.getSheetByName(paper_1);
//stock les données dans la variable nommée dataString
var dataString = attachment.getDataAsString();
//applique la mise en forme aux données
var csvData = CSVToArray(dataString);
//supprime les données et le format de la feuille CSV
sh.clear({ formatOnly: true, contentsOnly: true });
//place les valeurs dans le google sheet
var lastRowValue = sh.getLastRow();
for (var i = 0; i < csvData.length; i++)
{
sh.getRange(i+lastRowValue+1, 1, 1, csvData[i].length).setValues(new Array(csvData[i]));
Logger.log("🔴" +new Array(csvData[i]))
}
}
}
}
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/*--------------------------------------MISE EN FORME DONNEES-----------------------------------------------------*/
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// création d'une mise en forme des données pour les placer correctement dans le google sheet.
function CSVToArray( strData, strDelimiter ){
strDelimiter = (strDelimiter || ",");
var objPattern = new RegExp(
(
// Delimiters.
"(\\" + strDelimiter + "|\\r?\\n|\\r|^)" +
// Quoted fields.
"(?:\"([^\"]*(?:\"\"[^\"]*)*)\"|" +
// Standard fields.
"([^\"\\" + strDelimiter + "\\r\\n]*))"
),
"gi"
);
// varible stockant les données.
var arrData = [[]];
// variable stockant le paterne
var arrMatches = null;
while (arrMatches = objPattern.exec( strData )){
Logger.log(strData)
// Get the delimiter that was found.
var strMatchedDelimiter = arrMatches[ 1 ];
if (
strMatchedDelimiter.length &&
(strMatchedDelimiter != strDelimiter)
){
arrData.push( [] );
}
if (arrMatches[ 2 ]){
var strMatchedValue = arrMatches[ 2 ].replace(
new RegExp( "\"\"", "g" ),
"\""
);
} else {
var strMatchedValue = arrMatches[ 3 ];
}
arrData[ arrData.length - 1 ].push( strMatchedValue );
}
return( arrData );
}