ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 效率神器,一键搞定繁琐工作
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
让更多数据处理,一键完成 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 5278|回复: 14

请大神对该google脚本进行修改,感激不尽

[复制链接]

TA的精华主题

TA的得分主题

发表于 2020-12-14 20:30 | 显示全部楼层 |阅读模式
本帖最后由 jinxuanmr 于 2020-12-15 11:11 编辑

由于工作原因,需要用到google的线上excel,奈何实在不懂,恳求各位大神给予帮助!!

这个脚本的作用是 鼠标选择范围数据后运行脚本,输入工作表名称即可复制到目标工作表有数据行的下一行!(无论哪一列有数据都会黏贴到下一行)

希望大神能帮修改成 只扫描A到C三列,复制到ABC列有数据的下一空白行 (希望只在目标表的A到C列的范围扫描并粘贴)

还有一个小问题,每次输入工作表名称很麻烦,如果能默认一个例如C就更好了。

希望我的表达不会给您带来困惑!感谢各位浏览

谷歌文档: (任何人可编辑)https://docs.google    .com/spreadsheets/d/1O-bGMLCGlOElb6l1hL7zKkuQqbGWKcrBSqlPx8deXB0/edit?usp=sharing

  1. // ------------ GENERAL GOOGLE SHEET DOC TO TRACKING GOOGLE SHEET DOC ------------

  2. function GeneralToTracking(tName) {
  3.   /*
  4.   This code defines the Source Google Sheet Doc and the Target Google Sheet Doc. These are two
  5.   different google sheet docs. They are NOT 2 sheets in the same google sheet doc.
  6.   */

  7.   var ss = SpreadsheetApp.getActiveSpreadsheet();
  8.   var target = SpreadsheetApp.openById('1yxfpC7Yag9GAkoe5BUjjg12cUhGmGr5ryeGl87JmZqU');

  9.   /*
  10.   This code is to pick specific sheets within the Source & Target Sheet.
  11.      Source Google Sheet ="New Stuff"
  12.      Target Google Sheet ="Archive"
  13.   */

  14.   var source_sheet = ss.getActiveSheet(); // ++++ TO DO: Need to make this work on whatever sheet the user is on currently, instead of being hardcoded. ++++
  15.   var target_sheet = target.getSheetByName(tName); // ++++ TO DO: Need to present the user with a list of tabs in the Target doc. Prompt w/ Radio Buttons. ++++

  16.   /*
  17.   This code determines the from-range and the to-range to copy & says where to put it in the Target.
  18.   */

  19.   var source_range = source_sheet.getActiveRange();
  20.   var sValues = source_range.getValues();
  21.   var last_row = target_sheet.getLastRow();

  22.   //  source_range.copyTo(target_range);

  23.   if (last_row > 0) target_sheet.insertRowAfter(last_row);
  24.   var target_range = target_sheet.getRange(last_row + 1, 1, sValues.length, sValues[0].length);
  25.   target_range.setValues(sValues);

  26.   // double check and enable these when above test is pass
  27.   // var copiedsheet = source_sheet.copyTo(target);
  28.   // copiedsheet.getRange(source_range.getA1Notation()).copyTo(target_range);
  29.   // target.deleteSheet(copiedsheet);
  30. }

  31. function onOpen() {
  32.   SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
  33.     .createMenu('Custom Menu')
  34.     .addItem('Enter Target Name', 'enterTargetName')
  35.     .addToUi();
  36. }

  37. function enterTargetName() {
  38.   var ui = SpreadsheetApp.getUi(); // Same variations.

  39.   var result = ui.prompt(
  40.     'Enter Target Sheet Name',
  41.     'Please enter target sheet name:',
  42.     ui.ButtonSet.OK_CANCEL
  43.   );

  44.   // Process the user's response.
  45.   var button = result.getSelectedButton();
  46.   var text = result.getResponseText();
  47.   if (button == ui.Button.OK) {
  48.     // User clicked"OK".
  49.     GeneralToTracking(text);
  50.   }
  51. }
复制代码


TA的精华主题

TA的得分主题

发表于 2020-12-15 08:48 来自手机 | 显示全部楼层
这个是js 的,如何连接你的google sheet 调试?

TA的精华主题

TA的得分主题

发表于 2020-12-15 09:09 来自手机 | 显示全部楼层
zpy2 发表于 2020-12-15 08:48
这个是js 的,如何连接你的google sheet 调试?


可以搜一下 google app script,需要google账户。。。

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-15 11:09 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-15 11:13 | 显示全部楼层
zpy2 发表于 2020-12-15 09:09
可以搜一下 google app script,需要google账户。。。

感谢您的回复,(以下是共享文档,任何人可编辑)
https://       docs.google         .com/spreadsheets/d/1O-bGMLCGlOElb6l1hL7zKkuQqbGWKcrBSqlPx8deXB0/edit?usp=sharing

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-15 11:18 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
zpy2 发表于 2020-12-15 09:09
可以搜一下 google app script,需要google账户。。。

谷歌小号:zhengling006@gmail.com
Zhengling006

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-15 12:31 | 显示全部楼层
zpy2 发表于 2020-12-15 09:09
可以搜一下 google app script,需要google账户。。。

麻烦您了,用户名:zhengling006@谷歌邮箱后缀
米吗:Zhengling006+  用我的吧

TA的精华主题

TA的得分主题

发表于 2020-12-15 14:14 来自手机 | 显示全部楼层
jinxuanmr 发表于 2020-12-15 12:31
麻烦您了,用户名:zhengling006@谷歌邮箱后缀
米吗:Zhengling006+  用我的吧

第一个问题,他是根据整个工作表判断的,你要根据那一列?


last_row = target_sheet.getLastRow();

第二个问题

// ------------ GENERAL GOOGLE SHEET DOC TO TRACKING GOOGLE SHEET DOC ------------

function GeneralToTracking(tName) {
  /*
  This code defines the Source Google Sheet Doc and the Target Google Sheet Doc. These are two
  different google sheet docs. They are NOT 2 sheets in the same google sheet doc.
  */

  var ss = SpreadsheetApp.getActiveSpreadsheet();
/*
  var target = SpreadsheetApp.openById('1yxfpC7Yag9GAkoe5BUjjg12cUhGmGr5ryeGl87JmZqU');
*/
/*这里 同一个 工作簿 */
var target=SpreadsheetApp.getActiveSpreadsheet();
  /*
  This code is to pick specific sheets within the Source & Target Sheet.
     Source Google Sheet ="New Stuff"
     Target Google Sheet ="Archive"
  */

  var source_sheet = ss.getActiveSheet(); // ++++ TO DO: Need to make this work on whatever sheet the user is on currently, instead of being hardcoded. ++++
  var target_sheet = target.getSheetByName(tName); // ++++ TO DO: Need to present the user with a list of tabs in the Target doc. Prompt w/ Radio Buttons. ++++

  /*
  This code determines the from-range and the to-range to copy & says where to put it in the Target.
  */

  var source_range = source_sheet.getActiveRange();
  var sValues = source_range.getValues();
  var last_row = target_sheet.getLastRow();

  //  source_range.copyTo(target_range);

  if (last_row > 0) target_sheet.insertRowAfter(last_row);
  var target_range = target_sheet.getRange(last_row + 1, 1, sValues.length, sValues[0].length);
  target_range.setValues(sValues);

  // double check and enable these when above test is pass
  // var copiedsheet = source_sheet.copyTo(target);
  // copiedsheet.getRange(source_range.getA1Notation()).copyTo(target_range);
  // target.deleteSheet(copiedsheet);
}

function onOpen() {
  SpreadsheetApp.getUi() // Or DocumentApp or SlidesApp or FormApp.
    .createMenu('Custom Menu')
/*
    .addItem('Enter Target Name', 'enterTargetName')
*/
  .addItem('复制粘贴到dest表', 'zpy2')
    .addToUi();
}
function zpy2(){
var text="dest";//目标表的名称
GeneralToTracking(text);
}
function enterTargetName() {
  var ui = SpreadsheetApp.getUi(); // Same variations.

  var result = ui.prompt(
    'Enter Target Sheet Name',
    'Please enter target sheet name:',
    ui.ButtonSet.OK_CANCEL
  );

  // Process the user's response.
  var button = result.getSelectedButton();
  var text = result.getResponseText();
  if (button == ui.Button.OK) {
    // User clicked"OK".
    GeneralToTracking(text);
  }
}



我的手机为啥不能注册?

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-15 17:35 | 显示全部楼层
zpy2 发表于 2020-12-15 14:14
第一个问题,他是根据整个工作表判断的,你要根据那一列?

我看了您的截图,应该选了国旗后就不用再+86了,您可以再试试看。如果不行,上面的谷歌号码是我的小号,新建的,您如果需要可以拿去用,把资料改一下就行。

您的代码,我现在就去试试,非常感谢您的回复

TA的精华主题

TA的得分主题

 楼主| 发表于 2020-12-15 17:44 | 显示全部楼层
zpy2 发表于 2020-12-15 14:14
第一个问题,他是根据整个工作表判断的,你要根据那一列?

我是想根据 A B C三列,复制到ABC三列,我复制的数据也不会超过三列,您看怎么修改呢
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-12-4 00:53 , Processed in 0.054131 second(s), 8 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表