簡體   English   中英

如何將 Google 電子表格的特定表格和 CSV 值保存在同一電子表格中另一表格的單個單元格中?

[英]How to save a specific sheet of Google Spreadsheet a CSV values in a single cell of another sheet within the same Spreadsheet?

是否可以使用腳本將一張工作表的內容導出為逗號分隔值,並將這些逗號分隔值保存為同一電子表格中不同工作表單元格中的文本?

相反,是否可以使用腳本讀取保存在一張紙上的單個單元格中的逗號分隔值的內容,並在另一張紙上加載/查看它們的格式?

上下文:我有一張表(表 A),其中包含按行分隔的各種交易。 我想使用第二張表(表 B)作為模板來記錄有關這些交易的定性問題。 單擊按鈕或菜單項,我想將該“日志條目”的內容保存到工作表 A 中的單個單元格中。此外,我希望工作表 B 或第三個工作表 (C)能夠 select 表 A 的任何給定行並以正確格式的方式加載日記帳分錄。 如果可以在同一張紙上進行編輯和查看(B),那就太好了,但不是絕對必要的

編輯

這是我正在使用的數據的示例表 下面發布了帶有完整代碼的解決方案。

您可以在“日志”表中看到,創建按鈕用於:

(1) 加載日記帳模板 - 這會根據“模板”表重置第 11 行下方的信息

(2) 加載日志條目 - 這會從所選交易的單個單元格加載逗號分隔值 (csv)

(3) 保存日志條目 - 這會將以下日志區域子集中的值保存為“選擇交易”選擇的交易的單個單元格

很想聽聽你的想法!

如果這是小內容,我認為您不需要此操作的腳本。 當您談到將工作表內容導出到單個單元格時,我想您可以使用 textjoin 公式將表格放入單元格並用逗號分隔。

=textjoin(",";false;B1:C7) - 將 B1:C7 的內容放入您的單元格中。

要展開它,您可以使用 SPLIT 公式

=split(B11;",")

從 B11 的內容生成一行值

 = transpose(split(B11;","))

使它成為一個列。

如果范圍更大,您仍然可以在不使用單個腳本的情況下折疊和展開它們。 但首先我會看到一些數據結構。

這是我設法放在一起的解決方案。 以下是原始問題中“編輯”下描述的每個過程的代碼:

(0) 一般聲明

const ss = SpreadsheetApp.openById('###');
let log = ss.getSheetByName("Log");
let journal = ss.getSheetByName("Journal");
let logData = log.getDataRange().getValues();
let ticker = journal.getRange("A7").getValue();
let pnL = journal.getRange("H7").getValue();
let num = journal.getRange("B7").getValue();
let templates = ss.getSheetByName("Templates");

(1) 加載日志模板:

function loadTemplates() {
  // Clear current journal content and formatting
  journal.getRange("12:100").clearContent();
  journal.getRange("12:100").clearFormat();
  journal.getRange("12:100").setDataValidation(null);

  // Load Templates
  // ABCD
  if(journal.getRange("A3").getValue() == "ABCD"){
    templates.getRange("2:61").copyTo(journal.getRange("12:71"));
  // OTHER
  } else if (ss.getSheetByName("Journal").getRange("A3").getValue() == "ORB"){
    templates.getRange("63:122").copyTo(journal.getRange("12:71"));
  };
};

(2) 加載日志

function loadJournal() {
  for(let i = 0; i < logData.length; i++){
    if(logData[i][5].toString().includes(ticker) && logData[i][22] === num){
      journal.getRange("D13:G80").setValues(Utilities.parseCsv(logData[i][23]));
    };
  };
};

(3) 保存日志

function saveJournal() {
  // Declaring the range that will make up the Array
  let journalData = journal.getRange("D13:G80").getValues();
  let output = [];
  journalData.forEach(function(dataArray) {
      let data = dataArray.join(",");
      output += data + "\r\n";
  });
  // Finding correct trade to edit  
  for(let i = 0; i < logData.length; i++){
    if(logData[i][5].toString().includes(ticker) && logData[i][22] === num){
      log.getRange(i+1,24).setValue(output);
      //Resize workaround using Google Sheets API bc setWrap and setRowHeight do not work 
      const requests = {updateDimensionProperties: {
        properties: {pixelSize: 21},
        range: {sheetId: log.getSheetId(), startIndex: i+1, endIndex: i+1, dimension: "ROWS"},
        fields: "pixelSize"
      }};
      Sheets.Spreadsheets.batchUpdate({requests: requests}, ss.getId());
    };  
  };
};

很想聽聽你的想法!

暫無
暫無

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

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