繁体   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