簡體   English   中英

Google Apps 腳本表 PasteDataRequest 粘貼到列而不是行?

[英]Google Apps Script Sheets PasteDataRequest paste to column instead of row?

我當前的腳本可以很好地粘貼值,但是它將它們從數據坐標粘貼到行中,我需要它來粘貼列。 我怎么做?

示例數據:汽車、貓、蝙蝠、老鼠

輸出方式:

| Car | cat | bat | rat |

它需要如何輸出:

Car |
___ 
cat |
___
bat |
___
rat |

示例代碼片段:

var gridCoordinate = Sheets.newGridCoordinate()
gridCoordinate.sheetID = sheet.getSheetID()
gridCoordinate.rowIndex = "1"
gridCoordinate.columnIndex = "1"

let pasteRequest = Sheets.newPasteDataRequest()
pasteRequest.data = inputValues
pasteRequest.type = SpreadsheetApp.CopyPasteType.PASTE_VALUES
pasteRequest.coordinate = gridCoordinate 
pasteRequest.delimiter = ","

let requests = [Sheets.newRequest()]
requests[0].pasteData = pasteRequest;

let batchUpdateRequest = Sheets.newBatchUpdateSpreadsheetRequest();
batchUpdateRequest.requests = requests

var result = Sheets.Spreadsheets.batchUpdate(batchUpdateRequest, "REDACTED")
Logger.log(result)

編輯以添加: inputValues 必須是根據 PasteDataRequests 文檔的逗號分隔字符串

您沒有指定如何創建數組,但假設它是一維數組 ["Car", "cat", "bat", "rat"] 它需要使用 testArray() [["Car "]、["貓"]、["蝙蝠"]、["老鼠"]]。

如果它是像 csv 這樣的字符串,請嘗試 testString() ,其中每一行由一個新行\n分隔,每個單元格由一個逗號分隔。

代碼.gs

function testArray() {
  try {
    let a = ["Car", "cat", "bat", "rat"];
    let b = a.map( c => [c] );
    console.log(a);
    console.log(b);
  }
  catch(err) {
    console.log(err);
  }
}

function testString() {
  try {
    let a = "Car\ncat\nbat\nrat";
    let b = Utilities.parseCsv(a);
    console.log(b);
  }
  catch(err) {
    console.log(err);
  }
}

執行日志

9:21:32 AM  Notice  Execution started
9:21:32 AM  Info    [ 'Car', 'cat', 'bat', 'rat' ]
9:21:32 AM  Info    [ [ 'Car' ], [ 'cat' ], [ 'bat' ], [ 'rat' ] ]
9:21:32 AM  Notice  Execution completed

3:12:37 PM  Notice  Execution started
3:12:38 PM  Info    [ [ 'Car' ], [ 'cat' ], [ 'bat' ], [ 'rat' ] ]
3:12:38 PM  Notice  Execution completed

There is not more than 2 rows. I gave the expected output in my original question. There is not more than 2 rows. I gave the expected output in my original question. , 假設當你的樣本值為Car, cat, bat, rat時,為了達到你的目的,下面的修改怎么樣?

修改點:

  • 當我問What is sheet of sheet.getSheetID()? ,你說var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1") 在這種情況下, sheet.getSheetID()發生錯誤,因為getSheetID應該是getSheetId 而且, gridCoordinate.sheetID發生錯誤。 因為在這種情況下, gridCoordinate.sheetID必須是gridCoordinate.sheetId
  • 為了使用您的腳本將Car, cat, bat, rat放入一列,請使用replace(/,/g, "\n")

當這些點反映到你的腳本中時,它變成如下。

修改后的腳本:

var inputValues = "Car, cat, bat, rat"; // This sample value is from your question.
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // This is from your reply.

var gridCoordinate = Sheets.newGridCoordinate();
gridCoordinate.sheetId = sheet.getSheetId(); // Modified
gridCoordinate.rowIndex = "1";
gridCoordinate.columnIndex = "1";

let pasteRequest = Sheets.newPasteDataRequest();
pasteRequest.data = inputValues.replace(/,/g, "\n"); // Modified
pasteRequest.type = SpreadsheetApp.CopyPasteType.PASTE_VALUES;
pasteRequest.coordinate = gridCoordinate;
pasteRequest.delimiter = ",";

let requests = [Sheets.newRequest()];
requests[0].pasteData = pasteRequest;

let batchUpdateRequest = Sheets.newBatchUpdateSpreadsheetRequest();
batchUpdateRequest.requests = requests;
var result = Sheets.Spreadsheets.batchUpdate(batchUpdateRequest, "REDACTED");
Logger.log(result)
  • 運行此腳本時,將Car, cat, bat, rat的值放入活動工作表的單元格“B2:B5”中。

筆記:

  • 在您的情況下,當您想使用 Sheets API 時,我認為您也可以使用以下示例。

     Sheets.Spreadsheets.Values.update({ values: Utilities.parseCsv(inputValues), majorDimension: "COLUMNS" }, "REDACTED", "Sheet1!B2", { valueInputOption: "USER_ENTERED" });

參考:

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2025 STACKOOM.COM