0

注: 問題の部分的な解決策を見つけました。以下の更新セクションを参照してください。

現在、3 つの別々の列からデータを取得し、それらを別の指定された列にマージしようとしています。わかりやすくするために、下の画像を参照してください。ここでは、コード 1、コード 2、およびコード 3 がすべて結合コード列に連結されています。 望ましい結果の例。指定された列のすべてのセルの値を更新できる for ループを作成しました。以下のコードを参照してください。

for rows in row_id:
# Build new cell value
new_cell = smartsheet.models.Cell()
new_cell.column_id = column_id_final  # column id of previously created column
    # A for loop to fill in the rows with information from other rows
    for rows in row_id:
        new_cell.value = smart.Sheets.get_sheet(1174866712913796)
        new_cell.strict = False

2 番目のループの new_cell.value 部分では、文字列「値」を入力するだけで、指定された列 (column_id_final) のすべての行に「値」が入力されます。ここからの私の思考プロセスは、特定の行からすべての表示値を出力できるようにすることです。これを行うことができれば、それぞれが特定の列のすべての表示値を含む 3 つの変数を連結するだけで済みます。これの私の試みを確認するには、以下のコードを参照してください。

# For loops to extract display values from each cell in a given column
cell_id = ''
row_info = ''
# Get all of the information stored within the rows of a sheet
for row in sheet.rows:
    row_info += str(smart.Sheets.get_row(1174866712913796, row.id))
print(row_info)
# pull the display value from each component of the row_info variable
for cell in row_info.cell:
    cell_id += string(cell.display_value) #is there a display value property?
print(cell_id)

私が遭遇した問題は、指定された列のすべてのセルの値を表示する方法です。これを行う方法はありますか?

アップデート

Emi のコメントのおかげで、Pandas を調べたところ、問題の部分的な解決策が見つかりました。必要な列を 1 つの列に連結し、この列を smartsheet にアップロードして、行を別のシートに移動できるようになりました。ただし、行を移動すると、移動先シートの下部に投稿されます。これがデフォルトの位置であることはわかっていますが、行移動機能の位置属性があるかどうかはわかりません。私のプロセスをよりよく理解するには、以下のコードを参照してください。

def add_merged_column():
    sheet = smart.Sheets.get_sheet(1174866712913796)  # store sheet information in sheet variable
    col_names = [col.title for col in
                 sheet.columns]  # Define column names for data fram as being equal to the column titles in the sheet information variable
    rows = []  # define rows
    for row in sheet.rows:  # for loop to iterate through the rows of 'sheet' and create a cell list for each
        cells = []  # define cells
        for cell in row.cells:  # for each cell within every row append the updated cell value
            cells.append(cell.value)
        rows.append(cells)
    df = pd.DataFrame(rows, columns=col_names)  # create data frame using panda, define columns
    df = df.set_index('Unique ID')  # get rid of built in index, make desired merged column index
    df['Unique ID'] = df['Column 1'].map(str) + ' ' + df['Column 2'].map(str) + ' ' + df['Column 3'].map(
        str)  # concatenate the desired columns into a single column
    merged_data = df['Unique ID']  # assign a variable name to result
    merged_data.to_csv(_dir + '\excel\proc_data.csv')  # send merged_data to a csv file and specify file path
    print(merged_data)
    result = smart.Sheets.import_csv_sheet(_dir + '\Excel\proc_data.csv', header_row_index=0)  #  import newly saved csv file into smartsheet

    sheet_csv = smart.Sheets.get_sheet(result.data.id)

    ################################################################################################################

    # iterate through the rows array and build comma-delimited list of row ids
    row_ids = ''  # define row_id
    for row in sheet_csv.rows:
        row_ids += str(
            row.id) + ', '  # the += adds to the existing variable each iteration, rather than defining an entirely new variable, this is what allows it to be a list, hence the addition of the ','
        # x += y is the same as x = x.__iadd__(y)

    # remove the final (excess) comma and space from the end of the row_ids string
    row_ids = row_ids[
              :len(row_ids) - 2]  # Specifies that row_ids is not equal to row_ids from index 0 -> length of the ids - 2

    row_ids = list(map(int, row_ids.split(',')))

    response = smart.Sheets.move_rows(result.data.id, smart.models.CopyOrMoveRowDirective(
        {'row_ids': row_ids, 'to': smart.models.CopyOrMoveRowDestination({'sheet_id': 1174866712913796})}))

    return merged_data
4

1 に答える 1