Re: [询问] google试算表 指令编辑 置底贴上方法

楼主: Oswyn (Oswyn)   2019-01-25 15:22:52
※ 引述《good8195 (Kevin)》之铭言:
: 小弟对于excel熟悉
: 网络也能找到相关vba去研究
: 但是google试算表关键字少又不知道该如何搜寻
: 目前小弟有想要做一个东西是
: 复制a1跟b1后直接在c跟d栏置底贴上
: (置底是在最后一个填写的内容下一格贴上)
: 使用录制第一次可成功第二次会覆蓋
: 所以想了解试算表该怎么做
: 我excel有自己摸索过经验
: 应该看了会懂
: 或者能提供可以学习的中文网站
Google 相关网站内中文翻译页面都有一站没一站的了(好吧、是几乎没有),应该没
什么比较完整的中文资讯,有的话我也想知道www
Google Apps Script 主要的语法、结构是基于 JavaScript 发展,但又跟 JavaScript
不完全相容。没跟上最新的 JavaScript 版本外,有些 JavaSctip 基本语法或 Object
/ Methods 也因为 Google 自身的限制因安全或效能等理由被拿掉了。
总之需要用到 Google Apps Script 的话还是可以从 JavaScript 下手,中文资讯很多
也不难找到资源。碰到不相容的时候,就碰到时再说、、、再去处理、解决。
除 JavaScript 语法外,最主要的重点还是 Google 针对 Google Apps 产品提供的物
件、类与方法等。这就只能上 Google Apps Script 网站的 REFERENCE 页面找查了。
https://developers.google.com/apps-script/reference/
由于原PO的需求很简单,只需剪贴一下就好。所以打开 Spreadsheet 的试算表中
[工具]内的[指令码编辑器]。
把下面附的程式码复制贴到[程式码.gs]中然后[储存],点[执行]内[执行函式]
选取[onOpen]函式。途中有跳出授权要求的都要许可。
回到试算表页面,[说明]的后面应该多了一个[Custom Menu]可按,点选其中的
[Copy A1 B1 & Paste]就会呼叫[myFunction]执行复制贴上的动作。
对于 Apps Script 要注意的是,资料都是处于 Google Apps 也就是服务器的云端,浏
览器画面中的都只是结果。为了效能减少服务器端的 I/O 的次数是极重要的。这与资
料及处理基本上都是在本机的 VBA 大不同。
在 Spreadsheet 减少对字段资料的读取与写入,尤其是写入的次数很重要。写入资料时
比起读取 Google server 端间需要验证(耗时)。所以分别写入10个字段,还不如一
次写入10*10的范围。
以范围读取所需的字段值,处理完后再以范围回写。
Sheet.getRange(row, column) // 单字段
Sheet.getRange(row, column, numRows) // 复数列(rows)
Sheet.getRange(row, column, numRows, numColumns) // 四边形范围
Sheet.getRange(a1Notation) // 以字串的方式使用 A1 或 R1C1 参照
Sheet.getRange() 吃四种参数形态设定作动范围,但后面接的方法就需要依前面范围
中的单、复数形态来选择。用错了就会报错(废言
.getValue() // 读取单一字段值
.getValues() // 读取复数范围的值
.setValue(value) // 写入单一字段
.setValues(array) // 范围写入
举例来说最下面例子中读取 A1 & B1 的部份
sheet.getRange(1, 1, 1, 2).getValues()
起始点为 row 1、 column 1,取 1 row、 2 columns
可替换成以 array 包装填入,getRange()中设定的范围大小必需等于填入的资料大小
// 读取 row 1, collumn 1 的 A1 字段值
var a1 = sheet.getRanges(1, 1).getValue();
// 读取 B1 字段的值
var b1 = sheet.getRange('B1').getValue();
// 将 a1, b1 包装成 Array object 直接送出
sheet.getRange(i + 1, 3, 1, 2).setValues([[a1, b1]]);
上面就是简单的操作 Google Spreadsheet 字段资料(读/写)的基础方法。其它较进
阶的处理就上 查 Apps Script reference 了吧。

function myFunction() {
var sheet =
SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
var maxRows = sheet.getMaxRows();
var range =
sheet.getRange(1 , 3 , maxRows , 2).getValues();
for (var i = 0; i < maxRows; i++) {
// 阵列从零开始计
if (range[i][0] === '' && range[i][1] === '') {
// 列(row)、栏(column)从一开始计
sheet.getRange(i + 1, 3, 1, 2).setValues(
sheet.getRange(1, 1, 1, 2).getValues());
break;
}
}
}
function onOpen(e) {
var ui = SpreadsheetApp.getUi();
ui.createMenu('Custom Menu')
.addItem('Copy A1 B1 & Paste', 'myFunction')
.addToUi();
}
作者: jikker (鲁蛇王)   2019-01-31 10:20:00
推 认真好文

Links booklink

Contact Us: admin [ a t ] ucptt.com