电子表格中Object.keys(1Darray)返回行及API数据行列转置求助
解决你的两个电子表格数据输出问题
嘿,这两个问题我刚好经常碰到,给你一步步拆解解决办法!
问题1:如何在电子表格中从Object.keys(1D object)返回行形式的数据?
首先要明确:Object.keys()是用来提取对象的键的方法(你说的1D array应该是指一维对象?如果是真的数组,Object.keys()拿到的是索引值,可能不是你要的结果)。要把这些键输出成一行,核心思路是把原本默认的单列数组转成单行,或者直接构造单行的二维数组写入表格。
以Google Sheets + Apps Script为例
如果用脚本处理数据:
function getKeysAsRow() { // 模拟从API或本地拿到的一维对象 const targetObj = {"BTCUSDT": 45000, "ETHUSDT": 2300, "BNBUSDT": 300}; // 提取对象的键 const keysArray = Object.keys(targetObj); // 关键:把一维数组包装成二维数组,变成一行数据 const rowData = [keysArray]; // 写入到表格的A1开始的位置,1行,列数等于键的数量 const sheet = SpreadsheetApp.getActiveSheet(); sheet.getRange(1, 1, 1, keysArray.length).setValues(rowData); }
如果想用公式实现(不需要脚本):
先创建一个自定义函数:
function OBJECTKEYS(obj) { return Object.keys(obj); }
然后在单元格里输入=TRANSPOSE(OBJECTKEYS(A1))(假设A1单元格是你的目标对象),TRANSPOSE会把默认的列输出转成行。
以Excel + VBA为例
Sub GetKeysAsRow() Dim targetObj As Object Set targetObj = CreateObject("Scripting.Dictionary") targetObj("BTCUSDT") = 45000 targetObj("ETHUSDT") = 2300 targetObj("BNBUSDT") = 300 ' 提取键并转成单行数组 Dim keysArray As Variant keysArray = targetObj.Keys ' 写入到Sheet1的A1开始的行 Sheet1.Range("A1").Resize(1, UBound(keysArray) + 1).Value = keysArray End Sub
问题2:将交易所API返回的symbols从列输出改为行
从你的描述来看,现有代码应该是循环逐个写入单元格,每次增加行号,所以变成了列。要改成行,只需要一次性写入整行数据,不用循环。
以Google Sheets + Apps Script为例
假设你的现有代码是这样的(列输出):
// 原来的列输出代码 function fetchSymbolsAsColumn() { const apiUrl = "https://api.example.com/exchange/symbols"; const response = UrlFetchApp.fetch(apiUrl); const data = JSON.parse(response.getContentText()); const symbols = data.symbols; // 假设symbols是数组:["BTCUSDT", "ETHUSDT", ...] const sheet = SpreadsheetApp.getActiveSheet(); // 循环逐行写入,导致列输出 for (let i = 0; i < symbols.length; i++) { sheet.getRange(i + 1, 1).setValue(symbols[i]); } }
修改后改成行输出:
// 修改后的行输出代码 function fetchSymbolsAsRow() { const apiUrl = "https://api.example.com/exchange/symbols"; const response = UrlFetchApp.fetch(apiUrl); const data = JSON.parse(response.getContentText()); const symbols = data.symbols; const sheet = SpreadsheetApp.getActiveSheet(); // 关键:把symbols数组包装成二维数组,变成一行 const rowData = [symbols]; // 一次性写入整行,1行,列数等于symbols的长度 sheet.getRange(1, 1, 1, symbols.length).setValues(rowData); }
关键说明
电子表格的setValues(Google Sheets)或Range.Value(Excel)都接受二维数组:
- 列输出的二维数组是
[[symbol1], [symbol2], [symbol3]](多行单列) - 行输出的二维数组是
[[symbol1, symbol2, symbol3]](单行多列)
所以只要把你的symbols数组放进一个外层数组里,就能直接输出成行了。
内容的提问来源于stack exchange,提问作者TUFAN POYRAZ
相关产品推荐
相关产品推荐

