簡體   English   中英

CSV 從 Gmail 導入到 Google 表格的格式問題

[英]Formatting Issues with CSV import to Google Sheets from Gmail

我目前正在使用以下腳本自動從 gmail 電子郵件中導入 CSV 數據:

 function importsearchresultsCSVFromGmail2() {

var threads = GmailApp.search("Scheduled report (********** **** *******)");
var messages = threads[0].getMessages();
var message = messages[messages.length - 1];
var attachment = message.getAttachments()[0];

// Is the attachment a CSV file

attachment.setContentType('text/csv');
//attachment.setContentTypeFromExtension();

if (attachment.getContentType() === "text/csv") {

var sheet = SpreadsheetApp.getActiveSpreadsheet();
var sh0 = sheet.getSheetByName("Sheet1")
var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");


// Remember to clear the content of the sheet before importing new data
sh0.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
GmailApp.markMessageRead(message);

}
}

但是,csv 中的某些地址字段在 csv 的整個單元格中被格式化為:

地址布局 1

有些將顯示為“123 New Road, London, NE3 1RD”。 < 這些在導入中正確顯示,但是上面的格式化版本分布在多個單元格中,並且弄亂了 csv 的原始布局。

有沒有辦法確保導入的單元格(包含格式化的地址單元格)不會擴散到其他單元格?

當前 CSV 文件示例當前 Google 表格結果

提前致謝。

湯姆

這是一個變體(不像 Yuri 解決方案那么優雅)

function importCSVFromGoogleDrive() {
  var file = DriveApp.getFilesByName("CSV TEST.csv").next();
  var csvString = file.getBlob().getDataAsString().replace(/\n/g, '♥').replace(/\r♥/g, '\r\n')
  var csvData = Utilities.parseCsv(csvString);
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('mySheet');
  sheet.clear();
  sheet.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
  SpreadsheetApp.flush()
  let ranges = SpreadsheetApp.getActive()
    .createTextFinder("♥")
    .matchEntireCell(false)
    .matchCase(true)
    .matchFormulaText(false)
    .ignoreDiacritics(true)
    .findAll();
  ranges.forEach(function (range) {
    range.setValue(range.getValue().replace(/♥/g,"\n"));
  });
}

在此處輸入圖像描述

適應你的情況

  var csvData = Utilities.parseCsv(attachment.getDataAsString().replace(/\n/g, '♥').replace(/\r♥/g, '\r\n'), ",");
  sh0.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
  SpreadsheetApp.flush()
  let ranges = sh0
    .createTextFinder("♥")
    .matchEntireCell(false)
    .matchCase(true)
    .matchFormulaText(false)
    .ignoreDiacritics(true)
    .findAll();
  ranges.forEach(function (range) {
    range.setValue(range.getValue().replace(/♥/g, "\n"));
  });

如果您將 CSV 顯示為文本會更好。

我認為引號內有\r\n "如果您更改此行,您可以嘗試用空格替換它們:

var csvData = Utilities.parseCsv(attachment.getDataAsString(), ",");

對此:

var s = attachment.getDataAsString().replace(/"[^"]+?"/, x => x.replace(/[\r\n]+/g, ' '));
var csvData = Utilities.parseCsv(s, ',');

Output:

在此處輸入圖像描述

更新

這是大約相同的 function 的變體。 它做同樣的事情:替換引號內的\r\n 但它用特殊符號替換它們。 並在數據粘貼到工作表后將此符號替換回\n

function get_csv() {
  var threads = GmailApp.search("Scheduled report"); // subject
  var message = threads[0].getMessages().pop(); // get last message from first thread
  var attachment = message.getAttachments()[0]; // first attachment
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var sh = ss.getSheetByName("Sheet1");

  // get the csv string and replace \n with the symbol ¶
  var s = attachment.getDataAsString().replace(/"[^"]+?"/g, x => x.replace(/[\r\n]+/g, '¶'));
  var csvData = Utilities.parseCsv(s, ',');

  sh.getRange(1, 1, csvData.length, csvData[0].length).setValues(csvData);
  sh.getDataRange().createTextFinder('¶').replaceAllWith('\n'); // restore \n inside cells

  GmailApp.markMessageRead(message);
}

結果:

在此處輸入圖像描述

這是CSV數據(不確定復制粘貼后\r\n是否完好):

Activity date & time,Status change,Postcode,Introducer,Marketing source,Assigned user,Lead reference,Lead date,Signed Date,Offered Date,Completed Date,Title,First name,Last name,Lead type,Lead group,Site,Product,"Security Address, if different from above"
01/02/2022,Signed,NE3 1RD,Me,,Me,172312026,15/11/2021,None,None,None,Mr.,John,Smith,Band A,Type 1,Leads.com,Fixed 5,"123 New Road, LONDON, NE3 1RD"
01/02/2022,Signed,NE3 1RD,Me,,Me,172312026,15/11/2021,None,None,None,Mr.,John,Smith,Band A,Type 1,Leads.com,Fixed 5,"123 New Road
LONDON
NE3 1RD"

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM