我有一張作業表,我試圖從網站獲取表格內容: https://listentotaxman.com
使用以下功能:
=IMPORTHTML("https://listentotaxman.com/?year=2021&ingr=35000","table",2)
期望輸出:

但; 無論我做什么,都不是拉動表格的內容;相反,它只是獲取默認的表頭和值;不是基于輸入的薪水的實際資料,在我們的示例中為 35000。原因是網站上的表格資料是在頁面已經加載后加載的。有沒有辦法使用應用程式腳本功能完成此網路抓取?請幫忙,謝謝。
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想檢索問題中顯示的表格。
- 您想使用 Google Apps 腳本來實作這一點。
不幸的是,當我測驗您的 URL 時,似乎無法直接從 URL 中檢索該表。那么作為一種解決方法,如何從服務器檢索資料并通過決議資料來創建表?當這反映在 Google Apps 腳本中時,它變成如下。
示例腳本:
請將以下腳本復制并粘貼到腳本編輯器并保存腳本。并且,請將 的自定義公式放入=SAMPLE(35000, 2021)單元格。通過這種方式,值被檢索并放入電子表格。
function SAMPLE(grosswage, year) {
// 1. Retrieve values.
const url = "https://listentotaxman.com/ws/tax/index.js.php";
const payload = { "response": "json", "year": year, "region": "uk", "married": false, "blind": false, "exni": false, "marriageallowance": false, "partnerwage": 0, "plan": "", "age": "0", "extra": 0, "taxcode": "", "pension": "", "time": "1", "grosswage": grosswage.toString(), "ingr": "35000" };
const params = { method: "post", payload: JSON.stringify(payload), contentType: "application/json" };
const res = UrlFetchApp.fetch(url, params);
// 2. Parse values and create a table.
const obj = JSON.parse(res.getContentText());
const headers = ["gross_pay", "tax_free_allowance", "taxable_pay", "tax_paid", "tax_due", "student_loan_repayment", "national_insurance", "total_deductions", "net_pay", "employers_ni", "net_change_from_previous"];
const base = headers.flatMap(h => {
const temp = [];
const v = obj[h];
if (h == "tax_due") {
Array(3).fill("").forEach((_, i) => temp.push(v[i].amount))
} else if (h == "total_deductions") {
temp.push(obj["tax_paid"] obj["national_insurance"]);
} else if (h == "net_change_from_previous") {
temp.push(obj["net_pay"] - obj["previous"]["net_pay"]);
} else {
temp.push(v);
}
return temp;
});
// 3. Return the parsed values as 2 dimensional array.
const colHead = ["Pay Summary", "%", "Yearly", "Monthly", "Week"];
const rowHead = ["Gross Pay", "Tax free allowance", "Total taxable", " Total Tax due", "20% rate", "40% rate", "45% rate", "Student Loan", "National Insurance", "Total Deductions", "Net Wage", "Employers NI", "Net change from 2020"];
return [colHead, ...base.map((e, i, a) => [(e / grosswage) * 100, e, e / 12, e / 52].map((f, j) => i == a.length - 1 && j != 0 ? -Math.floor(f) : Math.floor(f))).map((e, i) => [rowHead[i], ...e])];
}
結果:
使用此腳本時,會得到以下結果。關于每列的數字格式,請設定它們。

筆記:
- 這是一個簡單的示例腳本。所以請根據您的實際情況修改它。
- 我只測驗過
=SAMPLE(35000, 2021)。所以當使用其他引數時,可能會出現錯誤。此示例腳本僅適用于您的這個問題。所以請注意這一點。而且,當站點無法使用時,無法檢索值。另外,請注意這一點。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/376479.html
