[英]Modify each row in imported data with a script in Google sheet
我有一段代碼用於將數據導入到多張工作表中,並且運行良好。 但我也在嘗試修改特定列中的所有數據,以將其轉換為 HTML 按鈕。 目標是將www.mylink.com變成 Button
這是我用來導入數據的代碼(獲取數據,對其進行過濾並將其放入工作表中的文件夾中)
function myfunction() {
var keywords = ["valuetoremove1", "valuetoremove2"]; // filter the column "C".
// Retrieve CSV data.
var csvUrl = "https://myurl";
var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
var csvData = Utilities.parseCsv(csvContent, ";");
// Retrieve Spreadsheet and put the CSV data.
var root = DriveApp.getFoldersByName("Folder1");
while (root.hasNext()) {
var folder = root.next();
var files = folder.getFiles();
while (files.hasNext()) {
var spreadsheet = SpreadsheetApp.open(files.next());
var name = spreadsheet.getName().toUpperCase();
var values = csvData.reduce((ar, r) => {
if (!keywords.some(e => r[2].toUpperCase().includes(e.toUpperCase())) && r.join("").toUpperCase().includes(name)) {
ar.push(r);
}
return ar;
}, []);
if (values.length == 0) continue;
var sheet = spreadsheet.getSheets()[0];
sheet.clearContents().getRange(2, 1, values.length, values[0].length).setValues(values);
我嘗試了一個代碼來更改單個頁面中的鏈接單元格,它可以工作,但沒有與我的第一個代碼結合使用,它崩潰了,因為數據太多。 這是我嘗試過的:
// Modify column E
var dataRange = spreadsheet.getDataRange().getValues();
var colData = [];
for (var i = 1; i < dataRange.length; i++) {
colData.push(dataRange[i][0]);
}
for (var i = 0; i < colData.length; i++) {
// Get column E
var comments_cell = spreadsheet.getDataRange().getCell(i + 2, 5).getValue();
// Append
spreadsheet.getDataRange().getCell(i + 2, 5).setValue('<a href="' + comments_cell + '" target="_blank"><button type="button">Button</button></a>');
}
這是我完整的修改后的腳本:
function myfunction() {
var keywords = ["removedata1", "removedata2"]; // filter the column "C".
var csvUrl = "https://myurl";
var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
var csvData = Utilities.parseCsv(csvContent, ";");
var root = DriveApp.getFoldersByName("Myfolder");
while (root.hasNext()) {
var folder = root.next();
var files = folder.getFiles();
while (files.hasNext()) {
var spreadsheet = SpreadsheetApp.open(files.next());
var name = spreadsheet.getName().toUpperCase();
var values = csvData.reduce((ar, r) => {
if (!keywords.some(e => r[2].toUpperCase().includes(e.toUpperCase())) && r.join("").toUpperCase().includes(name)) {
ar.push(r);
}
return ar;
}, []);
if (values.length == 0) continue;
var sheet = spreadsheet.getSheets()[0];
var v = [["Column1", "Column2", "Column3", "Column", "Column5"], ...values.map(r => {
r[4] = `<a href="${r[4]}" target="_blank"><button type="button">Voir l'offre</button></a>`;
return r;
})];
sheet.clearContents().getRange(1, 1, v.length, v[0].length).setValues(v);
}
}
}
在您的腳本中, getValue()
和setValue()
在循環中使用。 在這種情況下,處理成本會變高。 在您的腳本中,如何進行以下修改?
// Modify column E
var dataRange = spreadsheet.getDataRange().getValues();
var colData = [];
for (var i = 1; i < dataRange.length; i++) {
colData.push(dataRange[i][0]);
}
for (var i = 0; i < colData.length; i++) {
// Get column E
var comments_cell = spreadsheet.getDataRange().getCell(i + 2, 5).getValue();
// Append
spreadsheet.getDataRange().getCell(i + 2, 5).setValue('<a href="' + comments_cell + '" target="_blank"><button type="button">Button</button></a>');
}
// var spreadsheet = SpreadsheetApp.getActiveSheet(); // In order to use this in your script, please remove this line.
var [, ...dataRange] = spreadsheet.getDataRange().getValues();
var values = dataRange.map(r => [`<a href="${r[4]}" target="_blank"><button type="button">Button</button></a>`]);
spreadsheet.getRange(2, 5, values.length).setValues(values);
我認為當我看到您添加的腳本時,需要修改以降低流程成本。 那么,下面的修改呢?
function myfunction() {
var keywords = ["valuetoremove1", "valuetoremove2"]; // filter the column "C".
var csvUrl = "https://myurl";
var csvContent = UrlFetchApp.fetch(csvUrl).getContentText();
var csvData = Utilities.parseCsv(csvContent, ";");
var root = DriveApp.getFoldersByName("Myfoldername");
while (root.hasNext()) {
var folder = root.next();
var files = folder.getFiles();
while (files.hasNext()) {
var spreadsheet = SpreadsheetApp.open(files.next());
var name = spreadsheet.getName().toUpperCase();
var values = csvData.reduce((ar, r) => {
if (!keywords.some(e => r[2].toUpperCase().includes(e.toUpperCase())) && r.join("").toUpperCase().includes(name)) {
ar.push(r);
}
return ar;
}, []);
if (values.length == 0) continue;
var sheet = spreadsheet.getSheets()[0];
var v = [["Column1", "Column2", "Column3", "Column", "Column5"], ...values.map(([...r]) => {
r[4] = `<a href="${r[4]}" target="_blank"><button type="button">Voir l'offre</button></a>`;
return r;
})];
// Or, if the above modification was not useful, please test the following script instead of it.
// var v = [["Column1", "Column2", "Column3", "Column", "Column5"], ...values.map(r => {
// const temp = r.slice();
// temp[4] = `<a href="${temp[4]}" target="_blank"><button type="button">Voir l'offre</button></a>`;
// return temp;
// })];
sheet.clearContents().getRange(1, 1, v.length, v[0].length).setValues(v);
}
}
}
It means that one time the data is imported correctly but the E column is not being turned into a button and if I run the script again the E column is being turned into a button.
,當我測試這個腳本時,列“E”的值具有<a href="###" target="_blank"><button type="button">Voir l'offre</button></a>
。
It means that one time the data is imported correctly but the E column is not being turned into a button and if I run the script again the E column is being turned into a button.
再次,我認為您可能想通過將 HTML 創建到單元格來放置一個按鈕。 如果我的理解是正確的,那是無法實現的,因為目前的規范。 所以,在這個修改中,我把超鏈接放到了“E”列?<a href="###" target="_blank"><button type="button">Voir l'offre</button></a>
之類的值放入“E”列,請修改r[4] = `=HYPERLINK("${r[4]}","Voir l'offre")`;
到r[4] = `<a href="${r[4]}" target="_blank"><button type="button">Voir l'offre</button></a>`;
.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.