這不會重復,因為結果進入一個字串,而不是一個 HTML 檔案。
下面的代碼幾乎讓我到了那里,但它不斷重復第一列的資料,而它應該只出現在結果中一次:
資料:
| 城市 | 單元 | 物品 | 數量 |
|---|---|---|---|
| 俄勒岡州 | 諾曼 | 專案A | 10 |
| 俄勒岡州 | 亞歷克斯 | B項 | 50 |
| 西雅圖 | 莫妮卡 | 專案A | 10 |
結果顯示俄勒岡州兩次以及俄勒岡州的其余部分相關資料,而它應該出現一次及其下方的相關資料,然后回圈繼續到下一個城市。我不確定這是否應該在回圈期間處理,或者是否應該在結果本身中進行處理。這將是要粘貼到單元格中的 html 字串。
這是代碼,就像現在一樣:
function dataToHTML() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const allSheets = ss.getSheets();
for (let s in allSheets){
let sheet = allSheets[s]
if (sheet.getName() == "State1"){
let html = '';
let location = sheet.getRange(1,1).getValue();
let state = sheet.getRange(1,2).getValue();
let locationHTML = '<h1>' location ' Businesses' '</h1>' '\n';
html = locationHTML
let dataValues = sheet.getRange(4, 1, sheet.getLastRow(), 6).getValues();
for (let a = 0; a < dataValues.length; a ){
if (dataValues[a][0] != ''){
let city = '<h2>' dataValues[a][0] '</h2>' "\n";
let unit = '<h3><a href="' dataValues[a][2] '" target="_blank">' dataValues[a][1] '</a></h3>' "\n";
let item= '<a href="tel: ' dataValues[a][5] '</a>' '\n';
let qty= dataValues[a][3] ', ' state ' ' dataValues[a][4] "\n";
html = city unit item qty
}
}
ss.getSheetByName('Sheet5').getRange(1,1).setValue(html);
}
}
}
預期輸出:
"<h1>Georgia Businesses</h1>
<h2>Oregon</h2>
<h3><a href=""Item A"" target=""_blank"">Norman</a></h3>
<a href=""tel: </a>
10, GA
<h3><a href=""Item B"" target=""_blank"">Alex</a></h3>
<a href=""tel: </a>
50, GA
<h2>Seattle</h2>
<h3><a href=""Item A"" target=""_blank"">Monica</a></h3>
<a href=""tel: </a>
10, GA "
俄勒岡州應該展示一次。
像往常一樣,感謝您的幫助。
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想將問題中的樣本資料轉換為問題中“預期輸出:”的值。
當我看到您的示例資料和腳本時,我注意到以下幾點。
- 似乎
location和state是單元格“A1”和“B1”。在您的示例資料中,單元格“A1”和“B1”分別是“城市”和“單位”。但是在您的預期結果中,GeorgiaandGA分別用作location和state。 - 在您的示例資料中,有 4 列 (A - D)。但是在您的腳本中,似乎使用列“F”像
dataValues[a][5].
在這個答案中,我想通過假設您的示例資料具有“A”到“F”列并且單元格“A1”和“B1”的值是實際作業表的標題值來提出一個修改后的腳本。
當你的腳本為了實作目標而修改后,下面的修改如何?
修改后的腳本:
function dataToHTML() {
const ss = SpreadsheetApp.getActiveSpreadsheet();
const sheet = ss.getSheetByName("State1");
if (!sheet) return;
const [[location, state], ...values] = sheet.getDataRange().getValues();
const obj = values.reduce((m, [a, ...b]) => m.set(a, m.has(a) ? [...m.get(a), b] : [b]), new Map());
let html = `<h1>${location} Businesses</h1>\n`;
obj.forEach((v, k) => {
html = `<h2>${k}</h2>\n`;
v.forEach(e => {
html = `<h3><a href="${e[1]}" target="_blank">${e[0]}</a></h3>\n`;
html = `<a href="tel:${e[4]}">${e[4]}</a>\n`;
html = `${e[2]}, ${state} ${e[3]}\n`;
});
});
ss.getSheetByName('Sheet5').getRange(1, 1).setValue(html);
}
- 在你的腳本中,
- 當您只想使用作業表“State1”時,您可以使用 直接檢索它
getSheetByName。 getValue()在回圈中使用。在這種情況下,工藝成本會變高。- 關于
let item= '<a href="tel: ' dataValues[a][5] '</a>' '\n';,的值tel:沒有用雙引號括起來。
- 當您只想使用作業表“State1”時,您可以使用 直接檢索它
- 在這次修改中,
- 從作業表“State1”中檢索值。
- 創建一個用于放入 HTML 的物件。
- 創建 HTML 資料。
筆記:
- 我認為您問題中提供的示例資料可能不符合您的預期結果。所以我通過假設你的示例資料提出了上述修改的腳本。那么,當上面的腳本不是您期望的結果時,您能否提供您期望的示例輸入和輸出資料?通過這個,我想修改腳本。
參考:
- getSheetByName(名稱)
- 地圖
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/389327.html
標籤:javascript html 谷歌应用程序脚本 谷歌表格
上一篇:谷歌表格中的空單元格從寬到長
