Excel AddIn - Добавление строк в существующую таблицу - PullRequest
0 голосов
/ 31 октября 2018

У меня возникли некоторые проблемы при использовании API JavaScript Javascript для создания надстройки Excel.

Первый выпуск: Добавление строк в существующую таблицу с помощью библиотеки Excel Js : я создаю таблицу и добавляю несколько строк; затем пользователь может обновить содержимое таблицы новыми данными, поступающими из службы REST (чтобы результирующие строки таблицы могли изменяться: увеличиваться / уменьшаться или совпадать).

tl; dr; Мне нужно заменить строки таблицы новыми.

Это кажется довольно простым: в пространстве имен таблиц есть метод addRows ( ссылка ). Но это не сработает, как ожидалось: если таблица уже содержит строки, новые будут добавлены в конец, а не заменят существующие.

Вот код:

const currentWorksheet = context.workbook.worksheets.getItemOrNullObject(
  "Sheet1"
)
let excelTable = currentWorksheet.tables.getItemOrNullObject(tableName)
if (excelTable.isNullObject) {
  excelTable = currentWorksheet.tables.add(tableRange, true /* hasHeaders */)
  excelTable.name = tableName
  excelTable.getHeaderRowRange().values = [excelHeaders]
  excelTable.rows.add(null, excelData)
} else {
  excelTable.rows.add(0, excelData)
}

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

if (!excelTable.isNullObject) {
  for (let i = tableRows - 1; i >= 0; i--) {
    // Deletes all table rows
    excelTable.rows.items[i].delete()
  }

  excelTable.rows.add(0, excelData)
}

Но .. все работает нормально только , если под столбцами таблицы нет содержимого (нет функций, других таблиц и т. Д.).


Я попробовал другой метод: используя диапазонов . В первый раз, когда я создаю таблицу, затем я удаляю все строки, получаю диапазон новых данных и вставляю значения:

if (excelTable.isNullObject) {
  excelTable = currentWorksheet.tables.add(tableRange, true /* hasHeaders */)
  excelTable.name = tableName
  excelTable.getHeaderRowRange().values = [excelHeaders]
  excelTable.rows.add(null, excelData)
} else {
  let actualRange, newDataRange
  const tableRows = excelTable.rows.items.length
  const tableColumns = excelTable.columns.items.length
  const dataRows = excelData.length
  const dataColumns = excelData[0].length

  actualRange = excelTable.getDataBodyRange()

  for (let i = tableRows - 1; i >= 0; i--) {
    // Deletes all table rows
    excelTable.rows.items[i].delete()
  }

  newDataRange = actualRange.getAbsoluteResizedRange(dataRows, tableColumns)

  newDataRange.values = excelData
}

Но у этого решения все еще есть недостатки.

Это должно быть так сложно добавить / отредактировать / удалить строки в таблице Excel?


Второй выпуск: Используя ту же таблицу, если пользователь решит добавить несколько «дополнительных» столбцов (с формулой, основанной на значениях таблицы, например), нужно ли мне заполнять эти новые столбцы данными null?

const tableColumns = excelTable.columns.items.length
const dataRows = excelData.length
const dataColumns = excelData[0].length

if (tableColumns > dataColumns) {
  let diff = tableColumns - dataColumns

  for (let i = 0; i < diff; i++) {
    for (let j = 0; j < dataRows; j++) {
      excelData[j].push(null)
    }
  }
}

Excel API не может справиться с этим сценарием?

Пожалуйста, не могли бы вы мне помочь?

Заранее спасибо.

1 Ответ

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

Спасибо за ваше сообщение. API добавления строки таблицы просто добавляет строку в строки таблицы, а не заменяет ее. Что еще Я не могу воспроизвести проблему с удалением строк. Можете ли вы показать мне более подробную информацию?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...