【问题标题】:Some simple examples of Smartsheet API using the Python SDK使用 Python SDK 的 Smartsheet API 的一些简单示例
【发布时间】:2016-07-05 08:33:13
【问题描述】:

我是 Smartsheet Python SDK 的新手。使用 Smartsheets API 文档中的示例代码作为起点:

action = smartsheet.Sheets.list_sheets(include_all=True)
sheets = action.data

这段代码可以很好地返回响应。

我现在正在寻找一些简单的示例来遍历工作表,即:

for sheet in sheets:

然后按名称选择工作表

然后遍历所选工作表中的行并选择一行。

for row in rows:

然后从选定工作表的选定行中检索单元格值。

我只需要一些简单的示例即可开始。我进行了广泛搜索,但找不到任何简单的示例来说明如何执行此操作 谢谢!

【问题讨论】:

    标签: python smartsheet-api


    【解决方案1】:

    下面是一个非常简单的例子。其中大部分是标准的python,但对此有点不直观的事情可能是从smartsheet.Sheets.list_sheets 返回的列表中的工作表对象不包括行和单元格。由于这可能包含大量数据,它会返回有关工作表的信息,您可以通过调用 smartsheet.Sheets.get_sheet 来检索工作表的完整数据。

    为了更好地理解诸如此类的事情,请务必将Smartsheet REST API reference 放在手边。由于 SDK 实际上只是在后台调用此 API,因此您通常也可以通过查看该文档找到更多信息。

    action = smartsheet.Sheets.list_sheets(include_all=True)
    sheets = action.data
    for sheetInfo in sheets:
        if sheetInfo.name=='WIP':
            sheet = smartsheet.Sheets.get_sheet(sheetInfo.id)
            for row in sheet.rows:
                if row.row_number==2:
                    for c in range(0, len(sheet.columns)):
                        print row.cells[c].value
    

    【讨论】:

    • 谢谢,这就是我想要开始的!
    【解决方案2】:

    正如 Scott 所说,工作表可能会返回大量数据,因此请确保您明智地使用过滤器。这是我编写的一些代码示例,用于提取两行但每行只有一列:

    action = smartsheet.Sheets.get_sheet(SHEET_ID, column_ids=COL_ID, row_numbers="2,4")
    

    有关可用过滤器的详细信息,请访问here

    更新:添加了更多代码以遵循网站礼仪并提供完整的答案。

    我在学习 API 时做的第一件事是显示我的所有工作表及其对应的工作表 ID 的列表。

    action = MySS.Sheets.list_sheets(include_all=True)
    for single_sheet in action.data:
        print single_sheet.id, single_sheet.name
    

    从该列表中,我确定了要从中提取数据的工作表的 sheetId。在我的示例中,我实际上需要拉出 primary 列,因此我使用此代码来确定主列的 Id(并将非主列 Id 保存在列表中,因为当时我想我可能需要它们):

    PrimaryCol = 0
    NonPrimaryCol = []
    MyColumns = MySS.Sheets.get_columns(SHEET_ID)
    for MyCol in MyColumns.data:
        if MyCol.primary:
            print "Found primary column", MyCol.id
            PrimaryCol = MyCol.id
        else:
            NonPrimaryCol.append(MyCol.id)
    

    最后,请记住,检索整个工作表可能会返回 很多 数据,我使用过滤器仅返回主列中的数据:

    MySheet = MySS.Sheets.get_sheet(SHEET_ID, column_ids=PrimaryCol)
    for MyRow in MySheet.rows:
        for MyCell in MyRow.cells:
            print MyRow.id, MyCell.value
    

    【讨论】:

      【解决方案3】:

      我开始使用 SmartSheets 使用 Python API。由于我们使用 smartsheets 来支持我们的一些 RIO2016 奥运会运营,为了许可证合规性限制,我们不时不得不删除最旧的 Smartsheets。这是一个错误:登录,从 30000 中选择每个智能,检查每个字段等等。因此,感谢 smartsheet API 2.0,我们可以轻松了解到目前为止我们使用了多少张工作表,获取所有“修改”日期,按该列从最新到最近的日期排序,然后写入 CSV 磁盘。我不确定这是否是最好的方法,但它按我的预期工作。我使用 Idle-python2.7,Debian 8.5。你在这里:

          # -*- coding: utf-8 -*-
          #!/usr/bin/python
      
          '''
          create instance of Sheet Object.
          Then populate List of Sheet Object with name and modified
          A token is necessary to access Smartsheets
          We create and return a list of all objects with fields aforesaid.
          '''
      
          # The Library
      
          import smartsheet, csv
      
          '''
          Token long var. This token can be obtained in 
          Account->Settings->Apps...->API
          from a valid SmartSheet Account.
          '''
          xMytoken=xxxxxxxxxxxxxxxxxxxxxx 
      
          # Smartsheet Token
          xSheet = smartsheet.Smartsheet(xMyToken)
      
          # Class object
          xResult = xSheet.Sheets.list_sheets(include_all=True)
      
          # The list 
          xList = []
      
          '''
          for each sheet element, we choose two, namely name and date of modification. As most of our vocabulary has special characters, we use utf-8 after the name of each spreadsheet.So for each sheet read from Object sheets
          '''
          for sheet1 in xResult.data.    
              xList.append((sheet1._name.encode('utf-8'),sheet1._modified_at))
      
          # sort the list created by 'Modifiedat' attribute
          xNlist = sorted(xList,key=lambda x: x[1])
      
          # print list
          for key, value in xNlist:
              print key,value
      
          # Finally write to disk    
      
          with open("listofsmartsh.csv", "wb") as f:
              writer = csv.writer(f)
              writer.writerows(xNList)
      

      希望你喜欢。

      问候

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-02-17
        • 2016-05-20
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多