smartsheet C # SDK запись в пустую ячейку не работает - PullRequest
0 голосов
/ 08 ноября 2018

Используя смарт-таблицу C # SDK, я написал метод setCellValue для записи значения в ячейку с учетом индекса строки, индекса столбца и значения.Метод работает нормально, когда в ячейке уже есть значение, но не работает, когда ячейка пуста.

public void setCellValue(int rowIndex, int columnIndex, String value, Boolean setCellDisplayValue = true)
{
    Cell cellOld = getCell(rowIndex, columnIndex);

    Cell cellNew = new Cell
    {
        Value = value,
        DisplayValue = value
    };

    if (true == setCellDisplayValue) {
        cellNew.DisplayValue = value;
    }

    if (null != cellOld)
    {
        cellNew.ColumnId = cellOld.ColumnId;
    }

    var listOfNewCells = new List<Cell>();

    listOfNewCells.Add(cellNew);

    Row rowNew = new Row
    {
        Cells = listOfNewCells
    };

    Row rowOld = sheetAPITest.GetRowByRowNumber(rowIndex);

    if (null != rowOld)
    {
        rowNew.Id = rowOld.Id;
    }

    var listOfNewRows = new List<Row>();

    listOfNewRows.Add(rowNew);

    smartsheetClient.SheetResources.RowResources.UpdateRows(sheetIdAPITest, listOfNewRows);
}

Я также написал вспомогательный метод getCell.

public Cell getCell(int rowIndex, int columnIndex)
{
    Row row = sheetAPITest.GetRowByRowNumber(rowIndex);

    if (null == row)
    {
        return null;
    }

    Column column = sheetAPITest.GetColumnByIndex(columnIndex);

    if (null == column)
    {
        return null;
    }

    return row.Cells.First(c => c.ColumnId == column.Id);
}

Кажется, проблема в том, что sheetAPITest.GetRowByRowNumber (rowIndex) возвращает ноль, если в строке нет значения.Мне нужна строка, потому что мне нужен идентификатор строки, чтобы создать новую строку с содержимым.

Чего мне не хватает?Любые идеи, как я могу решить проблему?Может быть, есть лучший подход?Заранее спасибо.

1 Ответ

0 голосов
/ 08 ноября 2018

Вы можете использовать метод Добавить строки , чтобы добавить новую строку и заполнить одну или несколько ячеек в строке.

Обратите внимание, что по умолчанию метод Add Rows добавляет новые строки в конец листа, но вы можете изменить это поведение по умолчанию, указав , указав расположение строки для каждого ряда.

Следующий пример кода добавляет 2 новые строки в верхнюю часть указанного листа и заполняет 2 ячейки в каждой из этих строк:

// Specify cell values for first row
Cell[] cellsA = new Cell[] {
  new Cell
  {
    ColumnId = 7960873114331012,
    Value = true
  },
  new Cell
  {
    ColumnId = 642523719853956,
    Value = "New status"
  }
};

// Specify contents of first row
Row rowA = new Row
{
  ToTop = true,
  Cells = cellsA
};

// Specify cell values of second row
Cell[] cellsB = new Cell[] {
  new Cell
  {
    ColumnId = 7960873114331012,
    Value = true
  },
  new Cell
  {
    ColumnId = 642523719853956,
    Value = "New status"
  }
};

// Specify contents of second row
Row rowB = new Row
{
  ToTop = true,
  Cells = cellsB
};

// Add rows to sheet
IList<Row> newRows = smartsheet.SheetResources.RowResources.AddRows(
  2331373580117892,               // long sheetId
  new Row[] { rowA, rowB }        // IEnumerable<Row> rowsToAdd
);
...