Smartsheet-API: заполнение данных и формул на листе

КОНТЕКСТ

Разработчик желает заполнить существующую таблицу smartsheet с помощью API smartsheet. Данные для заполнения состоят из данных и формул.

Однако в соответствии с документацией API ( http://www.smartsheet.com/developers/api-documentation) формулы не могут быть добавлены с помощью API.

Ячейки, содержащие формулы, ссылки на другие ячейки, системные значения или значения Ганта, не могут быть вставлены или обновлены через API.

ПРОБЛЕМА

Тестирование подтверждает это. Попытка добавить простую формулу с помощью API smartsheet приводит к преобразованию формулы в непрозрачный текст. Инспекция показывает, что формула модифицируется символом одинарной кавычки, который отображает ее как непрозрачный текст вместо формулы.

ВОПРОС

Есть ли способ (кроме ручного ввода) заставить smartsheet переоценить вставленный непрозрачный текст, чтобы преобразовать непрозрачный текст обратно в формулу?

Если это невозможно (кроме как путем ручного ввода), можно ли скопировать существующий лист с формулами на месте, а затем заполнить данные без формул на листе, используя API smartsheet?

ЦЕЛЬ

Основная цель - найти способ заполнить данные формулы в приложении smartsheet без необходимости ручного ввода данных формулы.

1 ответ

Решение

Обновление: Smartsheet теперь поддерживает добавление или обновление формул через API, который можно найти в документации по добавлению строки и обновлению строки.

Основным отличием является установка formula в объекте строки вместо установки value,


Оригинальный ответ

Вы правы, формулы в настоящее время не поддерживаются через API. Хотя мы планируем добавить эту функциональность в будущем.

В настоящее время, если вы попытаетесь отправить формулу в API, она будет обработана как строка, и в начале формулы будет добавлена ​​одинарная кавычка. Тогда единственный способ преобразовать строку обратно в формулу - это вручную удалить одиночную кавычку внутри интерфейса Smartsheet.

Доступный вариант

Ваше предложение использовать шаблон определенно будет работать, если вы всегда будете использовать одни и те же формулы. Процесс будет выглядеть следующим образом:

  1. Установите шаблон с формулами, которые вы хотите использовать.
  2. Создайте новый лист из шаблона.
  3. Добавьте дополнительные данные на новый лист, который будут использовать формулы.

Примечание: строки, которые никогда не использовались, не могут быть обновлены, так как они не существуют. Таким образом, в шаблоне вы можете инициализировать строки, поместив слово в места, которые вы хотите обновить. Например, вы можете поместить слово "PLACEHOLDER" во все места, которые вы собираетесь обновить.

Ниже я добавил два примера: один с использованием curl, а другой с использованием нашего Java SDK.

Пример завитка

Создайте новый лист из шаблона. Не забудьте заменить YOUR_TOKEN а также YOUR_TEMPLATE_OR_SHEET_ID в приведенной ниже команде.

curl https://api.smartsheet.com/1.1/sheets?include=data,attachments,discussions -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" -X POST -d '{"name":"newSheetFromTemplate","fromId":"YOUR_TEMPLATE_OR_SHEET_ID"}'

Затем возьмите идентификатор листа из ответа и введите команду, чтобы получить идентификаторы строки.

curl https://api.smartsheet.com/1.1/sheet/YOUR_SHEET_ID -H "Authorization: Bearer YOUR_TOKEN"

Наконец, возьмите идентификатор строки и идентификатор столбца из ответа и введите команду для обновления соответствующих ячеек. Я обновляю две ячейки со значениями 1 и 2 с помощью команды ниже.

curl https://api.smartsheet.com/1.1/row/YOUR_ROW_ID/cells -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" -X PUT -d '[ {"columnId": YOUR_COLUMN_ID, "value": 1}]'
curl https://api.smartsheet.com/1.1/row/YOUR_ROW_ID/cells -H "Authorization: Bearer YOUR_TOKEN" -H "Content-Type: application/json" -X PUT -d '[ {"columnId": YOUR_COLUMN_ID, "value": 2}]'

Пример SDK

Этот пример требует установки нашего Java SDK. Существует также C# SDK, который работает очень похожим образом.

import java.util.EnumSet;
import java.util.List;

import com.smartsheet.api.Smartsheet;
import com.smartsheet.api.SmartsheetBuilder;
import com.smartsheet.api.models.Cell;
import com.smartsheet.api.models.Column;
import com.smartsheet.api.models.ObjectInclusion;
import com.smartsheet.api.models.Row;
import com.smartsheet.api.models.Sheet;
import com.smartsheet.api.SmartsheetException;

public class Test {

    public static void main(String[] args) throws SmartsheetException {
        // Setup a Smartsheet object
        Smartsheet smartsheet = new SmartsheetBuilder().setAccessToken("YOUR_TOKEN").build();

        // Create a copy of a sheet from the template
        Sheet newSheet = new Sheet.CreateFromTemplateOrSheetBuilder().setFromId(YOUR_TEMPLATE_OR_SHEET_ID).setName("newSheetName").build();
        newSheet = smartsheet.sheets().createSheetFromExisting(newSheet, EnumSet.allOf(ObjectInclusion.class));

        // Get the columns/rows/data for the sheet we just created
        newSheet = smartsheet.sheets().getSheet(newSheet.getId(), EnumSet.allOf(ObjectInclusion.class));

        // Grab the column and rows that will be updated in the new sheet
        Column column1 = newSheet.getColumnByIndex(0);
        Row row1 = newSheet.getRowByRowNumber(1);
        Row row2 = newSheet.getRowByRowNumber(2);

        // Setup two cells for the the specified columns
        List<Cell> newCell1 = new Cell.UpdateRowCellsBuilder().addCell(column1.getId(), 1).build();
        List<Cell> newCell2 = new Cell.UpdateRowCellsBuilder().addCell(column1.getId(), 2).build();

        // Update the cell for the specified row
        smartsheet.rows().updateCells(row1.getId(), newCell1);
        smartsheet.rows().updateCells(row2.getId(), newCell2);
    }
}
Другие вопросы по тегам