我使用谷歌表格制作了一个简单的基于表格的化学品数据库。 工作表看起来像这样: https://docs.google.com/spreadsheets/d/e/2PACX-1vR0-AMEKNM3ZbDq67OIKWnc7E3KP8kfOsnr0Bjg2OSjpevLLjniknGXfIiiyZvbwE9bz3EfbOpO46ef/pubhtml?gid=292509613&single=true
有很多行和列。 用户可以使用 url 链接更改单元格的值 像这样的 https://docs.google.com/spreadsheets/d/13sLioJr_T6lqQ7y_pStBR8CKxReYwLUn4hao/edit#gid=292509613&range=B2
链接被转换为二维码,供需要通过手机远程更改电池值的人使用,无需手动搜索特定化学物质
当有人引入新行时,问题就开始了,然后每个单元格的位置都发生了变化,现在所有的 url(即打印的 QR 码)都选择了错误的化学品。现在所有的 url 都是错误的,我必须手动修复这个问题并将新行移动到表格的底部
理想情况下,我希望根据化学品 ID(在本例中为 cp1000)选择带有查询的单元格 像(伪代码) docs.google.com/spreadsheets/d/13sLioJr..../edit#gid=292509613&range=(选择单元格B(row_number),其中单元格A包含(cp1000))
成功结果的一个例子是根据 A 列选择 B 列中的单元格
在伪代码中:
cell = Cell()
id = query.exctract_id()
for n in range(1,max_row):
if cell(column_number = 'A', row_number = n).value == id:
select cell(column_number ='B', row_number = n)
break
有没有办法把它写在一个 URL 中?
最佳答案
感谢您的建议。 我确实最终制作了一个简单的 1 页 web 应用程序。 JS实际上非常容易学习。 我使用一种有点奇怪的方式从 doGet() 函数传递变量,将它们存储在电子表格中,因为该函数只能返回 html 输出。
function doGet(e){
var url = "https://docs.google.com/spreadsheets/d/13sLioJr_T6lRODrvGSqQ7y_pStBR8CKxReYwLUn4hao/edit#gid=0";
var [ID, chemical, totalAmount, name, targetRow, unit] = fill(e);
var ss = SpreadsheetApp.openByUrl(url).getSheetByName("Supplementary");
ss.getRange("B5").setValue(ID);
ss.getRange("B6").setValue(name);
ss.getRange("B7").setValue(targetRow);
ss.getRange("B8").setValue(Session.getActiveUser().getEmail());
Logger.log(ID);
var data = {ID:ID, chemical :chemical, totalAmount :totalAmount, unit :unit};
var html = HtmlService
.createTemplateFromFile('FrontEnd.html')
.evaluate()
.getContent();
return HtmlService
.createTemplate(html +
"<script>\n" +
"postChemicals( " +
JSON.stringify(data) +
");\n</script>")
.evaluate();
}
//
function fill(e){
// this function extracts event parameters and gets a cell from spreadsheet with query from URL
// where name equals to spreadsheet name and ID to the chemical ID generated by "Code.gs"
var url = "<post your url>";
var ID = e.parameter.ID;
var name = e.parameter.name;
var targetRow =getCell(ID,name);
var sheet = SpreadsheetApp.openByUrl(url).getSheetByName(name);
var chemical = sheet.getRange("B"+targetRow).getValue()
var totalAmount = sheet.getRange("D"+targetRow).getValue()-
sheet.getRange("C"+targetRow).getValue();
var takenCell = sheet.getRange("C"+targetRow);
var unit = sheet.getRange("E"+targetRow).getValue();
Logger.log("fill(e) called");
return [ID, chemical, totalAmount,name, targetRow, unit ]
}
function getCell(chemNo, name){
var url = "https://docs.google.com/spreadsheets/d/13sLioJr_T6lRODrvGSqQ7y_pStBR8CKxReYwLUn4hao/edit#gid=0";
// this is a function that searches for a cell
//get the first sheet of your
var sheet = SpreadsheetApp.openByUrl(url).getSheetByName(name);
var lastRow = sheet.getLastRow();
var range = sheet.getRange('A1:A' + lastRow).getValues();
for(var i = 0; i < lastRow; i++){
if(range[i] == chemNo){
return (i + 1);
}
}
关于javascript - 根据谷歌表格中的 URL 查找并选择一个单元格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58208748/