Проблемы с экспортом данных в Excel с помощью ClosedXML и шаблона XLSXC#

Место общения программистов C#
Ответить
Anonymous
 Проблемы с экспортом данных в Excel с помощью ClosedXML и шаблона XLSX

Сообщение Anonymous »

У меня есть следующий шаблон XLSX:



Column1Lbl
Column2Lbl
...
Column30Lbl
Column31Lbl
Column32Lbl
Column33Lbl




{{item.Column1}}
{{item.Column2}}
...
{{item.Column30}}
{{item.Column31}}
{{item.Column32}}
{{item.Column33}}


{{item.Column1}}
{{item.Column2}}< /td>
...
{{item.Column30}
{{item.Column31}
{{item.Column32}}
{{item.Column33}}


{{item.Column1}}
{ {item.Column2}}
...
{{item.Column30}}
{{item.Column31}}
{{item.Column32}}
{{item.Column33}}



< /td>
...







При экспорте результаты:



Название 1
Название 2
...
Название 30
Название 31
Название 32
Название 33




Данные 1 1
Данные 2 1
...
Данные 30 1
Данные 30 1
Данные 31 1
В типе "d__97`1" не существует свойства или поля "column32"
< td style="text-align: center;">В типе "d__97`1" не существует свойства или поля "column33"


Данные 1 2
Данные 2 2
...
Данные 30 2
Данные 31 2




Данные 1 3
Данные 2 3
...
< td style="text-align: center;">Данные 30 3
Данные 31 3






...







Вот соответствующая часть моего исходного кода:

Код: Выделить всё

        var template = new XLTemplate(PropertiesFile.GetRequiredProperty(PropertiesFile.TEMPLATE_PATH));

var dataShipments = new DataTable();
dataShipments.Columns.Add("Column1", typeof(string));
dataShipments.Columns.Add("Column2", typeof(string));
...
dataShipments.Columns.Add("Column30", typeof(string));
dataShipments.Columns.Add("Column31", typeof(string));
dataShipments.Columns.Add("Column32", typeof(string));
dataShipments.Columns.Add("Column33", typeof(string));

IQueryable groupItemsByColumn2 = dataItems.GroupBy(item => item.column2);

foreach (IGrouping groupedItemByColumn2 in groupItemsByColumn2)
{
IList  items = groupedItemByColumn2.ToList();
foreach (DataItems item in items)
{
//Aquíe es donde se asignan los valores:
DataRow newRow = dataShipments.NewRow();
newRow["Column1"] = item.Column1 ?? string.Empty;
newRow["Column2"] = item.Column2 ?? string.Empty;
...
newRow["Column30"] = item.Column30 ?? string.Empty;
newRow["Column31"] = item.Column31 ?? string.Empty;
newRow["Column32"] = item.Column32 ?? string.Empty;
newRow["Column33"] = item.Column33 ?? string.Empty;
dataShipments.Rows.Add(newRow);
}
}

template.AddVariable("item",dataShipments);

//Lo siguiente parece que funciona bien debido a que se aplican todos los títulos:
template.AddVariable("Column1Lbl", "Títlo 1");
template.AddVariable("Column2Lbl", "Títlo 2");
...
template.AddVariable("Column30Lbl", "Títlo 30");
template.AddVariable("Column31Lbl", "Títlo 31");
template.AddVariable("Column32Lbl", "Títlo 32");
template.AddVariable("Column33Lbl", "Títlo 33");

template.Generate();
Интересно, что если я поменяю столбец 30 на столбец 32 путем копирования и вставки, это приведет к следующему:



Название 1
Название 2
...
Название 30
Название 31
Название 32
Название 33




Данные 1 1
Данные 2 1
...
Данные 32 1
Данные 20 1
Нет свойства или поля "column30" в типе "d__97`1"
Нет свойства или поля "column33" в типе ' d__97`1'


Данные 1 2
Данные 2 2
...
< td style="text-align: center;">Данные 32 2
Данные 20 2




Данные 1 3
Данные 2 3
...
Данные 32 3
Данные 20 3






...








Обратите внимание, что заголовки обрабатываются правильно.

Подробнее здесь: https://stackoverflow.com/questions/789 ... plate-xlsx
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»