Существует ли скрипт для выбора строки для запуска макроса на основе сопоставления значений ячеек из 2 листов? - PullRequest
0 голосов
/ 09 февраля 2019

Мне нужна помощь в получении моего макроса для переноса данных в определенную строку на другом листе на основе значения в первом столбце этого листа.

У меня в Google Workbook настроены два разных листа.Один лист очень большой и сложный, поэтому в него трудно вводить информацию (Лист 2).Я настроил второй лист, чтобы показать только ту информацию, которую необходимо ввести, чтобы ее было легко заполнить (Лист 1).Я записал макрос для перемещения данных с начального листа на конечный лист (в основном, просто копирование / вставка) одним нажатием кнопки.

Мне нужна помощь для копирования данных в правильную строку на этом листе.

В листе быстрого ввода (Лист 1) есть место для ввода даты добавления информации.Эта дата будет соответствовать дате в более крупном файле (лист 2).Это строка, в которую необходимо переместить данные (выполняется через макрос).Существует ли сценарий, который будет сопоставлять дату на листе 1 со строкой, соответствующей этой дате на листе 2, чтобы указать макросу, в какую строку запускать копирование / вставку данных?

Лист 1: Лист 1

Лист 2: Лист 2

Дайте мне знать, если у вас есть какие-либо вопросы или еслиМне нужно отправить фотографии по-другому.

Большое спасибо за помощь!

1 Ответ

0 голосов
/ 09 февраля 2019

Копирование из любого диапазона в любой другой диапазон в той же электронной таблице.

Вот пользовательский диалог для выбора диапазонов и диапазонов и выполнения копирования диапазона с диапазоном.

Существует множество способовсделай это.У меня есть простой шаблонный html, который я использую для довольно быстрого извлечения подобного рода вещей.Это заняло у меня продолжительность ButterFly Effect 2, которую я слушал на заднем плане.Но я не печатаю так быстро, как раньше.

Я начал с макроса, и это макрос-скрипт:

function CopyRangeFromSheetToSheet() {
  var spreadsheet = SpreadsheetApp.getActive();
  spreadsheet.getCurrentCell().offset(-2, 0, 1, 7).activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('InvData'), true);
  spreadsheet.getCurrentCell().offset(3, 5).activate();
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('form response'), true);
  spreadsheet.setActiveSheet(spreadsheet.getSheetByName('InvData'), true);
  spreadsheet.getCurrentCell().offset(-2, -5, 1, 7).activate();
  spreadsheet.getRange('\'form response\'!A9:G9').copyTo(spreadsheet.getActiveRange(), SpreadsheetApp.CopyPasteType.PASTE_NORMAL, false);
}

Но я считаю, что вы хотели указать из идиапазонам, поэтому я решил использовать настраиваемый немодальный диалог, который позволяет выбирать диапазоны и диапазоны, выбирая лист и диапазон и нажимая кнопку для начальных и двух значений, и когда у вас есть оба диапазона, вы нажимаете кнопку копирования и Wallaон копирует и удаляет диалог.Требуется несколько файлов, и они все ниже:

example1.html:

<!DOCTYPE html>
<html>
  <head>
    <base target="_top">
    <?!= include('res1') ?>
    <?!= include('css1') ?>
  </head>
  <body>
   <div id="control">
     <br />FROM: <input type="text" id="fromTxt" placeholder="Select From Range" /><input type="button" value="Select From" onClick="selectFrom();" />
     <br />TO: <input type="text" id="toTxt" placeholder="Select To Range" /><input type="button" value="Select To" onClick="selectTo();" />
     <br /><input type="button" value="Copy" onClick="runCopy();" />
   </div>

   <?!= include('script1') ?>
  </body>
</html>

res1.html:

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="//code.jquery.com/ui/1.12.1/themes/base/jquery-ui.css">
<script src="https://code.jquery.com/ui/1.12.1/jquery-ui.js"></script>

script1.html:

<script>
  $(function(){

  });
  function selectFrom() {
    google.script.run
    .withSuccessHandler(function(rgstr){
      $('#fromTxt').val(rgstr);
    })
    .selectFrom();
  }
  function selectTo() {
    google.script.run
    .withSuccessHandler(function(rgstr){
      $('#toTxt').val(rgstr);
    })
    .selectTo();
  }
  function runCopy() {
    var from=$('#fromTxt').val();
    var to=$('#toTxt').val();
    var cObj={from:from,to:to};
    google.script.run
    .withSuccessHandler(function(s){
      google.script.host.close();
    })
    .performCopy(cObj);
  }
  console.log('My Code');
</script>

css1.html:

<style>
body {background-color:#ffffff;}
input{padding:2px;margin:2px;}
</style>

exampl1.gs

function selectFrom() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getActiveRange();
  var rgstr=Utilities.formatString('\'%s\'!%s',sh.getName(),rg.getA1Notation());
  return rgstr;
}

function selectTo() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getActiveSheet();
  var rg=sh.getActiveRange();
  var rgstr=Utilities.formatString('\'%s\'!%s',sh.getName(),rg.getA1Notation());
  return rgstr;
}

function performCopy(cObj) {
  var ss=SpreadsheetApp.getActive();
  var frg=ss.getRange(cObj.from);
  var trg=ss.getRange(cObj.to);
  frg.copyTo(trg);
  return 'done';
}
function showExample1Dialog(){
  var userInterface=HtmlService.createTemplateFromFile('example1').evaluate();
  SpreadsheetApp.getUi().showModelessDialog(userInterface, "Example1");
}

function include(filename){
  return HtmlService.createHtmlOutputFromFile(filename).getContent();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...