Я использую openxml для создания отчета Excel. openxml управляет на шаблоне файлом Excel с помощью названный диапазонами.
Клиент требует общей строки в конце списка строк. Походит на разумный запрос!!
Однако таблица данных, которую я возвращаю из дб, может содержать любое количество строк. Используя шаблонные строки и '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 )
Поскольку он возвращает новую строку, вы можете использовать этот объект для редактирования значений ячеек с данными из базы данных. Я надеюсь, что это хоть немного поможет тем, кто пытается это сделать ...