将 HTML table(用户输入)传输到 google 工作表
Transfer a HTML table (user input) to google sheets
我想使用 google 的应用程序脚本将一些用户输入数据从 html 页面传输到我的 google sheet。我可以对单个值执行此操作,但无法找到对 table 执行此操作的好方法。 table 将由用户动态创建(固定列数和动态行数)。
Bellow 是显示单个值示例的代码,缺少整个 table 的解决方案。
一个想法是迭代 table 并使用 table 数据创建一个数组数组并将其解析到后端脚本,然后将其写入 sheet 但是也许有更聪明的方法。
HTML 前端:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<!-- Get the user name -->
<label>Name:</label><input type="text" id="username">
<!-- Get the table data -->
<table class="table table-bordered" id="tbl_posts">
<thead>
<tr>
<th>#</th>
<th>column 1</th>
<th>column 2</th>
<th>column 3</th>
<th>column 4</th>
</tr>
</thead>
<tbody id="tbl_posts_body">
<tr id="rec-1">
<td><span class="sn">1</span>.</td>
<td>11</td>
<td>12</td>
<td>13</td>
<td>14</td>
</tr>
</tbody>
<tbody id="tbl_posts_body">
<tr id="rec-2">
<td><span class="sn">1</span>.</td>
<td>21</td>
<td>22</td>
<td>23</td>
<td>24</td>
</tr>
</tbody>
</table>
<button id="sendbutton"> Send </button>
<script>
document.getElementById("sendbutton").addEventListener("click",parse_to_backend);
function parse_to_backend(){
// transfer the username
var name = document.getElementById("username").value;
google.script.run.TransferUsername(name);
// transfer the table data
// HERE I NEED SOME CODE
};
</script>
</body>
</html>
JS 后端:
function doGet() {
return HtmlService.createHtmlOutputFromFile("FrontEndScript");
}
function TransferUsername(name){
var URL = "https://docs.google.com/spreadsheets/...";
var Spreadsheet = SpreadsheetApp.openByUrl(URL);
var Worksheet = Spreadsheet.getSheetByName("Data");
Worksheet.appendRow([name,]);
}
function TransferTabledata(tabeldata){
var URL = "https://docs.google.com/spreadsheets/...";
var Spreadsheet = SpreadsheetApp.openByUrl(URL);
var Worksheet = Spreadsheet.getSheetByName("Data");
// Here i need some code
}
您可以使用表格 API 直接解析和粘贴 HTML。
FrontEnd.html 片段:
let table = document.getElementById('tbl_posts').outerHTML;
google.script.run.pasteHtml(table);
Code.gs 片段:
function pasteHtml(table) {
var ss = SpreadsheetApp.getActive();
var req = {
requests: [
{
pasteData: {
html: true,
data: table,
coordinate: {
sheetId: ss.getSheets()[1].getSheetId(), //second sheet!A1
rowIndex: 0,
columnIndex: 0,
},
},
},
],
};
Sheets.Spreadsheets.batchUpdate(req, ss.getId());
}
阅读:
我想使用 google 的应用程序脚本将一些用户输入数据从 html 页面传输到我的 google sheet。我可以对单个值执行此操作,但无法找到对 table 执行此操作的好方法。 table 将由用户动态创建(固定列数和动态行数)。
Bellow 是显示单个值示例的代码,缺少整个 table 的解决方案。
一个想法是迭代 table 并使用 table 数据创建一个数组数组并将其解析到后端脚本,然后将其写入 sheet 但是也许有更聪明的方法。
HTML 前端:
<!DOCTYPE html>
<html>
<head>
<base target="_top">
</head>
<body>
<!-- Get the user name -->
<label>Name:</label><input type="text" id="username">
<!-- Get the table data -->
<table class="table table-bordered" id="tbl_posts">
<thead>
<tr>
<th>#</th>
<th>column 1</th>
<th>column 2</th>
<th>column 3</th>
<th>column 4</th>
</tr>
</thead>
<tbody id="tbl_posts_body">
<tr id="rec-1">
<td><span class="sn">1</span>.</td>
<td>11</td>
<td>12</td>
<td>13</td>
<td>14</td>
</tr>
</tbody>
<tbody id="tbl_posts_body">
<tr id="rec-2">
<td><span class="sn">1</span>.</td>
<td>21</td>
<td>22</td>
<td>23</td>
<td>24</td>
</tr>
</tbody>
</table>
<button id="sendbutton"> Send </button>
<script>
document.getElementById("sendbutton").addEventListener("click",parse_to_backend);
function parse_to_backend(){
// transfer the username
var name = document.getElementById("username").value;
google.script.run.TransferUsername(name);
// transfer the table data
// HERE I NEED SOME CODE
};
</script>
</body>
</html>
JS 后端:
function doGet() {
return HtmlService.createHtmlOutputFromFile("FrontEndScript");
}
function TransferUsername(name){
var URL = "https://docs.google.com/spreadsheets/...";
var Spreadsheet = SpreadsheetApp.openByUrl(URL);
var Worksheet = Spreadsheet.getSheetByName("Data");
Worksheet.appendRow([name,]);
}
function TransferTabledata(tabeldata){
var URL = "https://docs.google.com/spreadsheets/...";
var Spreadsheet = SpreadsheetApp.openByUrl(URL);
var Worksheet = Spreadsheet.getSheetByName("Data");
// Here i need some code
}
您可以使用表格 API 直接解析和粘贴 HTML。
FrontEnd.html 片段:
let table = document.getElementById('tbl_posts').outerHTML;
google.script.run.pasteHtml(table);
Code.gs 片段:
function pasteHtml(table) {
var ss = SpreadsheetApp.getActive();
var req = {
requests: [
{
pasteData: {
html: true,
data: table,
coordinate: {
sheetId: ss.getSheets()[1].getSheetId(), //second sheet!A1
rowIndex: 0,
columnIndex: 0,
},
},
},
],
};
Sheets.Spreadsheets.batchUpdate(req, ss.getId());
}