Пользовательская ширина столбца Открыть Xml (Excel) - PullRequest
1 голос
/ 15 апреля 2020

Я новичок в Open Xml и пытаюсь создать файл Excel с настраиваемой шириной столбца. Я искал решение онлайн и здесь, но каждое решение выдает одну и ту же ошибку. Я пробовал это:

private byte[] GenerateExcelFromTreeData(TreeData[] treeData)
    {
        using (var ms = new MemoryStream())
        using (var spreadsheetDocument = SpreadsheetDocument.Create(ms, SpreadsheetDocumentType.Workbook))
        {
            WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
            workbookpart.Workbook = new Workbook();

            WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
            var sheetData = new SheetData();
            worksheetPart.Worksheet = new Worksheet(sheetData);

            Sheets sheets = workbookpart.Workbook.AppendChild(new Sheets());

            Sheet sheet = new Sheet()
            {
                Id = workbookpart.GetIdOfPart(worksheetPart),
                SheetId = 1,
                Name = "sheet"
            };

            Columns columns = new Columns();

            columns.Append(new Column() { Min = 1, Max = 1, Width = 120, CustomWidth = true });
            columns.Append(new Column() { Min = 2, Max = 50, Width = 50, CustomWidth = true });

            worksheetPart.Worksheet.Append(columns);

            Row headerRow = new Row();
            headerRow.Append(new Cell()
            {
                CellValue = new CellValue("Node"),
                DataType = CellValues.String
            });
            headerRow.Append(new Cell()
            {
                CellValue = new CellValue("Value"),
                DataType = CellValues.String
            });
            headerRow.Append(new Cell()
            {
                CellValue = new CellValue("Delta"),
                DataType = CellValues.String
            });
            headerRow.Append(new Cell()
            {
                CellValue = new CellValue("∆ Avegage Premium " + treeData[0].delta_AP + " %"),
                DataType = CellValues.String
            });
            headerRow.Append(new Cell()
            {
                CellValue = new CellValue("∆ New Policies " + treeData[0].delta_NP + " %"),
                DataType = CellValues.String
            });
            headerRow.Append(new Cell()
            {
                CellValue = new CellValue("∆ Average Sum Insurance " + treeData[0].delta_AS + " %"),
                DataType = CellValues.String
            });
            sheetData.Append(headerRow);

            //foreach (var data in treeData)
            for(int i = 1; i < treeData.Count(); i++)
            {
                var data = treeData[i]; 
                Row row = new Row();
                row.Append(new Cell()
                {
                    CellValue = new CellValue(data.name),
                    DataType = CellValues.String
                });
                row.Append(new Cell()
                {
                    CellValue = new CellValue(data.description.ToString()),
                    DataType = CellValues.Number
                });
                row.Append(new Cell()
                {
                    CellValue = new CellValue(data.delta.ToString()),
                    DataType = CellValues.Number
                });
                row.Append(new Cell()
                {
                    CellValue = new CellValue(data.delta_AP.ToString()),
                    DataType = CellValues.Number
                });
                row.Append(new Cell()
                {
                    CellValue = new CellValue(data.delta_NP.ToString()),
                    DataType = CellValues.Number
                });
                row.Append(new Cell()
                {
                    CellValue = new CellValue(data.delta_AS.ToString()),
                    DataType = CellValues.Number
                });
                sheetData.Append(row);
            }

            sheets.Append(sheet);
            workbookpart.Workbook.Save();
            spreadsheetDocument.Close();

            ms.Position = 0;
            return ms.ToArray();
        }
    }

, но я получаю поврежденный файл, но если вы удалите:

Columns columns = new Columns();

columns.Append(new Column() { Min = 1, Max = 1, Width = 120, CustomWidth = true }); 
columns.Append(new Column() { Min = 2, Max = 50, Width = 50, CustomWidth = true });

worksheetPart.Worksheet.Append(columns);

, он работает нормально, но с шириной по умолчанию. Я также хотел бы сделать ряд заголовка смелее. Какие-нибудь советы?

...