更新:Smartsheet 现在支持通过 API 添加或更新公式,该 API 可以在文档中找到,用于添加行和更新行。
主要区别是formula
在行对象中设置而不是设置value
.
原始答案
您是对的,API 目前不支持公式。虽然,我们确实计划在未来添加此功能。
目前,如果您尝试将公式发送到 API,它将作为字符串处理,并且单引号将添加到公式的开头。然后,将字符串转换回公式的唯一方法是在 Smartsheet UI 中手动删除单引号。
可用选项
如果您始终使用相同的公式,您使用模板的建议肯定会奏效。该过程将如下所示:
- 使用您要使用的公式设置模板。
- 从模板创建一个新工作表。
- 将额外数据添加到公式将使用的新工作表中。
注意:从未使用过的行无法更新,因为它们不存在。因此,在模板中,您可以通过在要更新的位置放置一个单词来初始化行。例如,您可以将“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"}'
然后从响应中获取工作表 ID 并发出命令以获取行 ID。
curl https://api.smartsheet.com/1.1/sheet/YOUR_SHEET_ID -H "Authorization: Bearer YOUR_TOKEN"
最后,从响应中获取行 ID 和列 ID,并发出命令以更新相应的单元格。我正在使用以下命令更新值 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}]'
开发工具包示例
这个例子需要安装我们的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);
}
}