【问题标题】:Read values from spreadsheet从电子表格中读取值
【发布时间】:2017-05-16 20:24:11
【问题描述】:

我正在尝试从谷歌电子表格中读取值。

    String range = "A1:20";
    ValueRange response = sheet.spreadsheets().values().get(spreadsheetId, range)
            .execute();

    List<List<Object>> values = response.getValues();
    if (values == null || values.size() == 0) {
        System.out.println("No data found.");
    } else {
        System.out.println("Name, Major");
        System.out.println(values);
        for (List row : values) {
            // Print columns A and E, which correspond to indices 0 and 4.
            System.out.printf("%s\n", row.get(0));
        }
    }

我有一个包含多行和多列的电子表格。我需要阅读工作表中的全部数据。上面的代码工作正常,可以读取第一列的 20 行,但我无法设置范围变量值以自动读取工作表中的所有行和列。

此外,我想在服务器端读取每列的数据类型,其值为 json 格式。

【问题讨论】:

  • 我将范围值用作“1:30”,它返回除 30 行之外的所有列。请大家帮我设置范围值,以便我将获得工作表中存在的所有行。

标签: google-sheets google-spreadsheet-api google-api-java-client


【解决方案1】:

如果我对您的理解正确,您想使用此处的 getDataRange() 获取整个工作表中的数据:

https://developers.google.com/apps-script/reference/spreadsheet/sheet#getDataRange()

var ss = SpreadsheetApp.getActiveSpreadsheet();
 var sheet = ss.getSheets()[0];

 // This represents ALL the data
 var range = sheet.getDataRange();

 // This get the values
 var values = range.getValues();

【讨论】:

  • 根据我的要求,我需要在服务器端调用数据/跨度>
【解决方案2】:

如果您需要从客户端调用工作表,那么我有这个我经常使用的代码。请注意,工作表需要发布,并设置为任何拥有链接的人都可以查看。您还需要 jquery。注意表单 URL 是如何输出到 json 的。列标题的前缀为“gsx$”,然后设置为小写并删除了空格。

//https://docs.google.com/spreadsheets/d/1OY18xmnT-O4AWzGDC63RvzzmNgyKHOnuvq-RX6M_6xw/edit#gid=0

var spreadsheetID = "1OY18xmnT-O4AWzGDC63RvzzmNgyKHOnuvq-RX6M_6xw";
var url = "https://spreadsheets.google.com/feeds/list/" + spreadsheetID + "/1/public/values?alt=json";
$.getJSON(url, function(incomingData) {
	data = incomingData;
    var entry = data.feed.entry;
    showData(entry)
});

function showData(entry){
  for (var items in entry){
		console.log(entry[items].gsx$fruit.$t +": "+ entry[items].gsx$number.$t )
}
}
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width">
  <title>JS Bin</title>
  <script src="https://code.jquery.com/jquery-3.1.0.js"></script>
  
</head>
<body>

</body>
</html>

【讨论】:

  • 感谢您的解决方案。但根据我的要求,我需要在服务器端调用数据
【解决方案3】:

请参阅Simple Mail Merge 教程中的完整代码,了解读取数据的好方法。尤其是从 getRowsData() 函数下来的部分。它将连续读取所有数据。

对于您的范围,上述代码的前 3 行可以满足您的需求。我在下面稍微修改了它们以获得代表所有 Sheet1 的范围:

var ss = SpreadsheetApp.openById(spreadsheetId);
var dataSheet = ss.getSheetByName('Sheet1');
var dataRange = dataSheet.getRange(2, 1, dataSheet.getMaxRows() - 1, 4);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-26
    相关资源
    最近更新 更多