openxml – вставка строки, перемещение других

Я использую openxml для создания отчета excel. Openxml работает с шаблоном excel с использованием именованных диапазонов.

Клиенту требуется итоговая строка в конце списка строк. Звучит как разумный запрос!

Однако таблица данных, которую я возвращаю из db, может содержать любое количество строк. Используя строки шаблона и «InsertBeforeSelf», моя итоговая строка становится переопределенной.

Мой вопрос заключается в том, используя openxml, как я могу вставлять строки в электронную таблицу, заставляя строку итоговых данных перемещаться вниз каждый раз, когда вставлена ​​строка?

С уважением …

Предполагая, что вы используете SDK 2.0, я сделал что-то похожее, используя эту функцию:

private static Row CreateRow(Row refRow, SheetData sheetData) { uint rowIndex = refRow.RowIndex.Value; uint newRowIndex; var newRow = (Row)refRow.Clone(); /*IEnumerable<Row> rows = sheetData.Descendants<Row>().Where(r => r.RowIndex.Value >= rowIndex); foreach (Row row in rows) { newRowIndex = System.Convert.ToUInt32(row.RowIndex.Value + 1); foreach (Cell cell in row.Elements<Cell>()) { string cellReference = cell.CellReference.Value; cell.CellReference = new StringValue(cellReference.Replace(row.RowIndex.Value.ToString(), newRowIndex.ToString())); } row.RowIndex = new UInt32Value(newRowIndex); }*/ sheetData.InsertBefore(newRow, refRow); return newRow; } 

Я не уверен, как вы делали это с помощью InsertBeforeSelf раньше, так что, возможно, это не очень хорошее улучшение, но это сработало для меня. Я думал, что вы можете просто использовать свою итоговую строку в качестве ссылочной строки. (Закомментированная часть предназначена для того, чтобы у вас были строки после вашей ссылочной строки, которые вы хотели сохранить. Я внес некоторые изменения, но в основном это происходит из этого потока: http://social.msdn.microsoft.com/Forums/en- US / oxmlsdk / thread / 65c9ca1c-25d4-482d-8eb3-91a3512bb0ac )

Поскольку он возвращает новую строку, вы можете использовать этот объект для редактирования значений ячеек с данными из базы данных. Надеюсь, это хоть что-то полезно для всех, кто пытается это сделать …

[Может кто-нибудь, у кого больше очков, поместите этот текст в качестве комментария для ответа M_R_H.]

Решение, которое M_R_H дало, помогло мне, но вводит новую ошибку в проблему. Если вы используете данный метод CreateRow as-is, если какая-либо из строк, перемещаемых / повторно ссылающихся, имеет формулы, CalcChain.xml (в пакете) будет разбит. Я добавил следующий код к предлагаемому решению CreateRow. Это все еще не устраняет проблему, потому что, я думаю, этот код только фиксирует ссылку на следующую строку:

 if (cell.CellFormula != null) { string cellFormula = cell.CellFormula.Text; cell.CellFormula = new CellFormula(cellFormula.Replace(row.RowIndex.Value.ToString(), newRowIndex.ToString())); } 

Каков правильный способ исправить / обновить CalcChain.xml?

PS: SheetData можно получить с вашего листа как:

 worksheet.GetFirstChild<SheetData>(); 
  • Как создать CellValue для десятичного с форматом (#, ###. ##) в OpenXML
  • Как сгенерировать образцы SpreasheetML для всех трех параметров совместимости дат из Excel 2010?
  • Как программно обновить атрибут команды встроенного SQL-соединения
  • OpenXML Spreadsheet, удаляющий строки, вызывает ошибки чтения нечитаемого содержимого
  • Как получить информацию о культуре Excel с открытым XML?
  • Настройка ширины зазора между диаграммами в EPPlus / Office Open Xml
  • Как создать файл Excel с помощью OpenXML без создания локального файла?
  • Чтение ячеек с данными формул с использованием OpenXML API
  • Является ли это ошибкой в ​​обработке Excel метаданных Office Open XML?
  • Запись в существующий файл Excel с помощью OpenXML
  • Msgstr "Указанный пакет недействителен. Основная часть отсутствует. "В закрытом XML
  • Interesting Posts

    Проблемы с производительностью в динамическом раскрывающемся списке поиска в excel

    Программирование файла Excel в C ++

    Excel 2016: найти номера, которые отсутствуют от 5000 до 6000 в одном столбце

    Продолжить макрос для еще 53 строк

    Могу ли я создавать переменные динамически на основе других переменных?

    Рабочие листы (n) .Range … возвращает ошибку времени выполнения 1004

    Таблица Excel, изменяющая все метки данных от значения до имени серии одновременно

    Excel Vlookup Изменение местоположения

    XML для Excel – обратное геокодирование

    Broken Macro – найдите последнюю строку и добавьте данные

    Получите CSV-данные из буфера обмена (вставленные из Excel), содержащие символы с акцентом

    невозможно сбросить использованный диапазон

    VBA: ссылку на лист в другой книге, которая может быть закрыта или не закрыта

    Создание пользовательского интерфейса для фильтрации и агрегирования в Excel

    Выделите имя месяца с самой высокой записью в

    Давайте будем гением компьютера.