У меня есть часть кода, которая генерирует документ Excel с использованием OpenXML. Проблема заключается в установке пользовательской ширины столбца. Часто этот вопрос обсуждается , но, к сожалению, ничто не помогло мне.OpenXML sdk 2.5 Проблема с новой колонкой Excel
Так вот код создания файла:
SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(stream
, SpreadsheetDocumentType.Workbook);
WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
workbookpart.Workbook = new Workbook();
WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
worksheetPart.Worksheet = new Worksheet(new SheetData());
Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.
AppendChild<Sheets>(new Sheets());
Sheet sheet = new Sheet()
{
Id = spreadsheetDocument.WorkbookPart.
GetIdOfPart(worksheetPart),
SheetId = 1,
Name = _sheetName
};
sheets.Append(sheet);
document = spreadsheetDocument;
wbPart = workbookpart
После создания я пытаюсь установить пользовательские колонки ширину первого столбца
Worksheet ws = ((WorksheetPart)(wbPart.GetPartById(sheet.Id))).Worksheet;
Columns columns = new Columns();
Column column = new Column() { Min = (UInt32Value)5U, Max = (UInt32Value)5U,
Width = 16D, CustomWidth = true };
columns.Append(column);
ws.Append(columns);
ws.Save();
код работает без каких-либо исключений, но результат файла сломаны Вот структура БКП результат листа XML
<?xml version="1.0" encoding="UTF-8"?>
-<x:worksheet xmlns:x="http://schemas.openxmlformats.org/spreadsheetml/2006/main">
-<x:sheetData>
-<x:row r="7">
-<x:c r="A7" t="s" s="6">
<x:v>11</x:v>
</x:c>
-<x:c r="B7" t="s" s="6">
<x:v>12</x:v>
</x:c>
-<x:c r="C7" t="s" s="6">
<x:v>13</x:v>
</x:c>
</x:row>
</x:sheetData>
-<x:cols>
<x:col customWidth="1" width="16" max="5" min="5"/>
</x:cols>
</x:worksheet>
Итак, вопрос в том, что я делаю неправильно?
UPD. Проблема решена, благодаря petelids. Я просто добавил:
SheetData sheetData = ws.GetFirstChild<SheetData>();
ws.InsertBefore(columns,sheetData);
И тогда, только указать диапазон здесь Min = (UInt32Value) 5U, Макс = (UInt32Value) 5U
Большое спасибо @petelids! –