Форматирование ячеек SmartSheet для валюты - PullRequest
0 голосов
/ 24 апреля 2020
Rails 6
SmartsheetGem

У меня есть приложение, которое производит SmartSheet, с некоторыми данными о продажах. Работает нормально, но ячейки с валютой неправильно отформатированы. Например, приведенный ниже код создает строку в таблице SmartSheets, но числа не имеют знака валюты ($) и разделителя тысяч.

columns = sheet_obj[:result][:columns]
location_col_id = columns[0][:id]
location_phone_col_id = columns[1][:id]
quarterly_sales_col_id = columns[2][:id]
yearly_sales_col_id = columns[3][:id]
cells = []
cells << {column_id: location_col_id, value: row[:location]}
cells << {column_id: location_phone_col_id, row[:phone]}
cells << {column_id: quarterly_sales_col_id, value: row[:q_sales]}
cells << {column_id: yearly_sales_col_id, value: row[:y_sales]}

body = {
    to_bottom: true,
    cells: cells,
    locked: false
}

Я попытался изменить структуру тела на следующее:

body = {
    to_bottom: true,
    cells: cells,
    locked: false,
    currency: [
        {code: "USD", symbol: "$"}
    ],
    decimalCount: [0],
    thousandsSeparator: ["on"]
}

Но я получаю сообщение об ошибке:

Unable to parse request. The following error occurred: Unknown attribute "currency" found at line 1, column 770

Есть идеи, как это сделать?

1 Ответ

1 голос
/ 25 апреля 2020

Судя по документации API Smartsheet, вы можете указать формат ячейки, установив свойство cell.format для ячейки. В соответствии с разделом форматирования документации API, вы должны установить значение cell.format равным следующему строковому значению для достижения описанного форматирования (валюта USD, без десятичных знаков и с разделителем тысяч) on):

",,,,,,,,,,,13,0,1,2,,"

Я не знаком с Ruby SDK, но я подозреваю, что для реализации этого подхода вы просто добавите свойство format к каждому валютная ячейка, которую вы заполняете. Например:

cells << {column_id: quarterly_sales_col_id, value: row[:q_sales], format: ",,,,,,,,,,,13,0,1,2,,"}

ОБНОВЛЕНИЕ

Я проверял это немного (через Почтальона) и похоже, что может быть ошибка, связанная с возможностью устанавливать формат ячейки через API и отражать его через пользовательский интерфейс Smartsheet.

Сначала я отправляю запрос ADD ROW, чтобы добавить строку на свой лист, устанавливая формат ячейки. значение для указания валюты в долларах США с 0 десятичными разрядами и разделителем тысяч:

POST https://api.smartsheet.com/2.0/sheets/5831916227192708/rows 
[
    {
        "cells": [
            {"columnId": 5759649950525316,"value": "1234", "format": ",,,,,,,,,,,13,0,1,2,,"}
        ]
    }
]

Когда запрос будет выполнен успешно, я обновлю sh свой лист через интерфейс Smartsheet - но вместо просмотра ячейки значение отформатировано как мой запрос, указанный ($1,234), я вижу это:

cell in Smartsheet

Поэтому я затем отправляю запрос GET SHEET, чтобы убедиться, что format свойство этой ячейки установлено правильно:

GET https://api.smartsheet.com/2.0/sheets/5831916227192708?include=format

В ответе интересующий меня объект ячейки выглядит следующим образом:

{
    "columnId": 5759649950525316,
    "value": "1234",
    "displayValue": "1234",
    "format": ",,,,,,,,,,,13,0,1,2,,"
}

Интересно, что свойство format установлено правильно (указывается валюта USD, с 0 десятичными знаками, d с разделителем тысяч) - НО свойство displayValue установлено на 1234, что, по-видимому, определяет, как значение ячейки отображается в самом пользовательском интерфейсе Smartsheet.

Я не могу найти способ через API, чтобы значение ячейки, отображаемое в пользовательском интерфейсе Smartsheet, точно отражало формат валюты, указанный для этой ячейки. Однако если при просмотре этого листа в пользовательском интерфейсе Smartsheet я изменяю значение в этой ячейке (например, на 5678) и затем нажимаю клавишу ВВОД, значение ячейки ДОЛЖНО точно отражать формат, который присутствует для этой ячейки:

another Smartsheet cell

Мне кажется, что ошибка, связанная с тем, что форматирование значений ячеек, заданных через API, точно не отображается в пользовательском интерфейсе Smartsheet (до тех пор, пока / когда Вы обновляете значения ячеек через пользовательский интерфейс). Мне было бы интересно узнать, сможете ли вы найти способ заставить эту работу работать через API (в противном случае, возможно, кто-то из Smartsheet может здесь позвонить, чтобы объяснить это поведение).

...