Автозаполнение столбца с использованием DocumentFormat.OpenXml C # - PullRequest
0 голосов
/ 22 сентября 2019

Я хочу автоматически установить столбец с помощью XmlWriter.Ниже вы можете найти мой код для экспорта в Excel.Я создаю документ Excel с одним или несколькими листами и конечным набором столбцов (в данном случае только с двумя).

 using (var myDoc = SpreadsheetDocument.Open(filePath, true))
            {
                WorkbookPart workbookPart = myDoc.WorkbookPart;

                Sheet sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault(s => s.Name == listSheetName[i]);
                var worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id);

                var orgSheetId = workbookPart.GetIdOfPart(worksheetPart);

                WorksheetPart replacementPart = workbookPart.AddNewPart<WorksheetPart>();
                var replacementPartId = workbookPart.GetIdOfPart(replacementPart);

                var xmlReader = OpenXmlReader.Create(worksheetPart);
                var xmlWriter = OpenXmlWriter.Create(replacementPart);

                var cell = new Cell();

                while (xmlReader.Read())
                {
                    if (xmlReader.ElementType == typeof(SheetData))
                    {
                        if (xmlReader.IsEndElement)
                        {
                            continue;
                        }

                        xmlWriter.WriteStartElement(new SheetData());

                        xmlWriter.WriteStartElement(new Row());

                        cell.DataType = CellValues.String;
                        cell.CellValue = new CellValue("COLUMN 1");
                        xmlWriter.WriteElement(cell);

                        cell.DataType = CellValues.String;
                        cell.CellValue = new CellValue("COLUMN 2");
                        xmlWriter.WriteElement(cell);                           

                        xmlWriter.WriteEndElement();

                        foreach (string elem in  listSheetName[i]))
                        {
                            xmlWriter.WriteStartElement(new Row());

                            cell.DataType = CellValues.String;
                            cell.CellValue = new CellValue(elem.Id);
                            xmlWriter.WriteElement(cell);

                            cell.DataType = CellValues.String;
                            cell.CellValue = new CellValue(elem.Name);
                            xmlWriter.WriteElement(cell);


                            xmlWriter.WriteEndElement();
                        }
                    }
                    else
                    {
                        if (xmlReader.IsStartElement)
                        {
                            xmlWriter.WriteStartElement(xmlReader);
                        }
                        else if (xmlReader.IsEndElement)
                        {
                            xmlWriter.WriteEndElement();
                        }
                    }
                }

                xmlReader.Close();
                xmlWriter.Close();

                Sheet sheet1 = workbookPart.Workbook.Descendants<Sheet>().First(s => s.Id.Value.Equals(orgSheetId));
                sheet1.Id.Value = replacementPartId;

                workbookPart.DeletePart(worksheetPart);
            }

Мне нужен эквивалент для:

 Excel.Range cell_in1 = workSheet.Cells[row, "A"];
                                Excel.Range cell_in2 = workSheet.Cells[row, "B"];
                                Excel.Range range_11 = workSheet.get_Range(cell_in1, cell_in2);
                                range_1.Columns.AutoFit();

Есть ли функции для этого или мне нужно рассчитать ширину?Спасибо

...