ClosedXML Вставить данные из списка в существующую таблицу Excel (именованный диапазон) c # - PullRequest
0 голосов
/ 04 июня 2018

Был похожий вопрос, он, кажется, не ответил (может быть, нет ответа).Как «обновить» существующую таблицу Excel (именованный диапазон) из закрытого XML.Я знаю, как получить информацию таблицы и удалить существующие данные (см. Ниже)

    var ws = wb.Worksheet(sheetName);
    var table = ws.Table("data");
    table.Clear();

затем ??У меня есть список под названием «listdata», скажем, который точно соответствует заголовкам таблицы ...

Нужно ли мне циклически проходить по таблице по очереди, как это (что выглядит как пустая трата):

foreach (var item in listdata){table.InsertRowsBelow(1); ws.Cells(2,1).InsertData(item)}

Полагаю, возможно, было бы немного проще, если бы вы сделали что-то вроде этого:

table.InsertRowsBelow(listdata.Count()); ws.Cells(2,1).InsertData(listdata);

Или есть способ массовой загрузки в «таблицу» (аналог .AddRange (listdata)) или .Union (listdata)).В настоящее время я просто удаляю весь лист, затем воссоздаю лист и вставляю новую таблицу:

      wb.Worksheets.Delete(sheetName);
      var ws = wb.Worksheets.Add(sheetName);
      ws.Cell(1, 1).InsertTable(listdata, "data", true);

Ответы [ 2 ]

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

В https://github.com/ClosedXML/ClosedXML/pull/932 внесены некоторые дополнения в IXLTable.Вас могут заинтересовать IXLTable.ReplaceData(data) и IXLTable.AppendData(data).

0 голосов
/ 19 октября 2018

Насколько я знаю, подход, который вы обсуждаете в своем ответе, является самым простым, то есть

  • получить ссылку на таблицу
  • удалить ее данные
  • вставьте свой список.

InsertData действует как массовая вставка, она будет принимать любую коллекцию IEnumerable и выводить всю эту коллекцию в электронную таблицу Excel, начиная с выбранной ячейки.

Так, например,Вы можете сделать это, чтобы заполнить таблицу из списка (где первая строка рабочего листа является строкой заголовка таблицы):

private void PopulateTable(XLWorkbook wb, string workSheetName, string tableName, IEnumerable list)
{
    var ws = wb.Worksheet(workSheetName);
    var table = ws.Table(tableName);

    ws.Cell(2, 1).InsertData(list);
}

Cell также имеет функцию InsertTable, которая вставит DataTable вместо IEnumerable.

...