3

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

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

此代码返回一个响应就好了。

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

for sheet in sheets:

然后按名称选择工作表

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

for row in rows:

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

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

4

3 回答 3

4

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

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

可以在此处找到有关可用过滤器的详细信息。

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

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

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

从该列表中,我确定了要从中提取数据的工作表的 sheetId。在我的示例中,我实际上需要提取列,因此我使用此代码来确定主列的 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
于 2016-03-24T00:51:08.150 回答
3

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

为了更好地理解诸如此类的事情,请务必随身携带Smartsheet REST API 参考。由于 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
于 2016-03-20T21:45:38.557 回答
2

我开始使用 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)

希望你喜欢。

问候

于 2016-10-27T14:04:51.133 回答