Как добавить запятые при создании файлов CSV с помощью скрипта Google Apps? - PullRequest
1 голос
/ 03 июня 2019

Я работаю над разработкой некоторых кодов для создания CSV-файлов с помощью скрипта Google Apps.Я знаю, как создавать файлы CSV, но у меня есть проблема, когда строковые значения имеют запятые.Если элементы массива имеют запятые, эти элементы будут разделены при создании файлов CSV.

Я работаю над этим кодом, потому что я хотел бы загружать файлы CSV на веб-сайты EC, такие как eBay, amazon и тому подобное.,Таким образом, формат фиксируется ими.Я никак не могу избежать использования запятых в элементах массива.

Я пытался поставить "" в скобки (например: ","), но это не сработало вообще.Я также пытался использовать другой разделитель, но он тоже не работал.

Мой код выглядит следующим образом:

  var folderId = DriveFolderId
  var array = [
    ["title1", "title2", "title3"],
    ["value1", "value2-1,value2-2", "value3"],
  ]
  for (var i in array) {
    array[i] = array[i].join(",");
  }
  var array = array.join("\n");
  var folder = DriveApp.getFolderById(folderId);
  var now = Utilities.formatDate(new Date(), "JST", "yyyy_MM_dd_HH_mm_ss");
  folder.createFile(now + ".csv", array, "text/csv");

Приведенные выше коды работают просто отлично, если элементы массива не имеют запятыхв этом.Если они имеют запятые, они разделяются при создании файлов CSV.В приведенном выше примере создается файл, подобный следующему:

[title1], [title2], [title3]

[value1], [value2-1], [value2-2], [value3]

Я хочу, чтобы это было что-то вроде этого:

[title1], [title2], [title3]

[value1], [value2-1, value2-2], [value3]

Когда он выполняет folder.createFile(now + ".csv", array, "text/csv"), он разрушает все мои усилия.

Кто-нибудь знает, как решить эту проблему?

1 Ответ

0 голосов
/ 04 июня 2019
  • Вы хотите создать CSV-файл, как показано ниже, используя скрипт в вашем вопросе.

enter image description here

Если мое понимание верно, как насчет этой модификации?

Модифицированный скрипт:

От:
var array = [
  ["title1", "title2", "title3"],
  ["value1", "value2-1,value2-2", "value3"],
]
for (var i in array) {
  array[i] = array[i].join(",");
}
Для того, чтобы:
var array = [
  ["title1", "title2", "title3"],
  ["value1", "value2-1,value2-2", "value3"],
];

array = array.map(function(e) {return e.map(function(f) {return ~f.indexOf(",") ? '"' + f + '"' : f})}); // Added

for (var i in array) {
  array[i] = array[i].join(",");
}
  • В этой модификации, когда значение имеет ,, "value2-1,value2-2" преобразуется в "\"value2-1,value2-2\"". Таким образом можно получить результат, подобный изображенному выше.

Справка:

Если это не тот результат, который вы хотите, я прошу прощения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...