如何在同一电子表格内的另一个工作表的单个单元格中保存谷歌电子表格的特定工作表的CSV值?



可以使用脚本将一个工作表的内容导出为逗号分隔的值,并将这些逗号分隔的值保存为同一电子表格中不同工作表的单元格中的文本吗?

相反,是否可以使用脚本读取保存在一个工作表上的单个单元格中的逗号分隔值的内容,并在另一个工作表上加载/查看它们的格式?

上下文:我有一张表(表a),其中有各行分隔的各种事务。我想用第二张表(表B)作为模板,记录有关这些交易的定性问题。在一个按钮或菜单项的点击,我想保存的内容,"日志条目"的单个单元格内表a此外,我想一个表B,或第三个表(C)能够选择任何给定的行表a和加载日志条目在一个适当的格式的方式。如果编辑和查看可以在同一页上完成就太好了(B),但不是绝对必要的

编辑

这是我正在使用的数据的示例表。完整代码的解决方案已张贴如下。

你可以看到在'Journal'表中,按钮被创建为:

(1)加载日志模板-根据"模板"表

重置第11行以下的信息(2)加载日志条目——这将从所选交易的单个单元格加载逗号分隔值(csv)

(3)保存日记账条目-这将以下日记账区域的一个子集中的值保存为"Select trade"所选择的交易的单个单元格

很想听听你的想法!

我认为如果这是小内容,则不需要此操作的脚本。当您谈到导出工作表内容到单个单元格时,我认为您可以使用textjoin公式将表放入单元格并用逗号分隔。

=textjoin(",";false;B1:C7)-将B1:C7的内容放入您的细胞。

要展开它,可以使用SPLIT公式
=split(B11;",")

从内容B11中生成一行值

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

使它成为一个列。

如果范围更大,您仍然可以折叠和展开它们而不使用单个脚本。但首先我必须看一些数据结构。

这是我设法放在一起的解决方案。下面是原始问题中"Edit"下面描述的每个过程的代码:

(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) Load Journal Template:

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) Save Journal

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 + "rn";
});
// 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());
};  
};
};

很想听听你的想法!

相关内容

最新更新