按列名而不是列Id访问Smartsheet

2024-06-11 03:39:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我是一个使用Smartsheet的新手,我尝试访问列的值并将它们存储在列表中,并且我能够通过索引访问这些值。在我的用例中,人们可以从smartsheet中删除随机列,这可能会在读取数据时影响我的索引编号。例如,我的smartsheet如下所示:

Vin |所有者|使用|位置

123 abc测试CA

456 xyz产品发送

到目前为止,我用于访问数据的代码是:

import smartsheet
from simple_smartsheet import Smartsheet
from simple_smartsheet.models import Sheet, Column, Row, Cell, ColumnType
from pprint import pprint
import pandas as pd
import re
import sasl
import json
from fastparquet import write
# from influxdb import InfluxDBClient
import thrift_sasl
import prestodb
import s3fs
import boto3
from pyhive import hive

smartsheet = smartsheet.Smartsheet('adjgdjcdjchbdclkcn')


# Get current user
#user_profile = smartsheet.Users.get_current_user()

# Get all columns.
MySheet = smartsheet.Sheets.get_sheet(1234567891234567)

Vin = []
Owner = []
Use = []
Location = []

def Data():
 for RowIndex in range(0, len(MySheet.rows)):
           Vin.append(MySheet.rows[RowIndex].cells[2].display_value)
           Use.append(MySheet.rows[RowIndex].cells[3].display_value)
           Owner.append(MySheet.rows[RowIndex].cells[4].display_value)
           Location.append(MySheet.rows[RowIndex].cells[5].display_value)
print(Vin)
print(Use)
Print(Owner)
Print(Location)

我想要的结果是(使用列名而不是索引):

Vin=[123456]

所有者=[abc,xyz]

使用=[测试、生产]

位置=[CA,TX]

现在,我如何使用列名将值附加到列表中,而不是通过索引访问值?非常感谢您的任何帮助或指导。提前谢谢你


Tags: fromimportvalueusedisplayrowsownercells
1条回答
网友
1楼 · 发布于 2024-06-11 03:39:57

按名称引用(在代码中)列不是一个好主意。正如您指出的,如果用户删除工作表中的列,索引可能会更改,如果用户重命名工作表中的列,列名可能会更改。识别列的唯一可靠方法是通过其ID,因为一旦创建了列,其ID将永远不会更改,无论其索引、名称、数据类型或有关该列的任何其他内容是否更改,列ID将始终保持不变

如果这是一个一次性场景,即您正在处理的工作表已经存在,并且将是您需要这样处理的唯一工作表,那么我建议您发出List Columns请求(使用Postman或类似工具)来标识您感兴趣处理的列的ID,然后在代码中使用这些ID来引用列

或者,如果您需要解决方案能够随着时间的推移动态查找新工作表的列ID(而不是手动获取ID),并且您可以合理地确定您感兴趣的列名将随时间推移存在于您处理的每个新工作表中(例如,Vin、所有者、使用、位置),您可以让您的代码发出列出列请求,并处理存储您感兴趣的列名ID的响应,如果未找到您感兴趣的任何列名(在工作表中不存在),则抛出错误

相关问题 更多 >