У меня возникла проблема с пакетом NuGet DocumentFormat.OpenXml. Хотя функция CloseDocument() показывает, что данные попадают в книгу Excel, когда я пытаюсь загрузить их в Excel, она выдает ошибку о том, что лист полон ошибок и его необходимо удалить. Я просмотрел несколько руководств и других публикаций о проблемах с созданием файлов Excel, но ни одно из них не помогло решить эту проблему.
Создание файла Excel:
Excel NewExcel = new Excel(FileName);
NewExcel.CreateSheet("Test Sheet");
NewExcel.PrepareColumn(1, 80, true, 55.5);
NewExcel.CreateRow(20.2);
NewExcel.SetCell("Test 1", 1, "A");
NewExcel.SetCell(new DateTime(2010, 7, 14), 1, "B");
NewExcel.FinishSheet();
NewExcel.SaveFile();
NewExcel.CloseDocument();
Ошибка:
error133640_01.xmlErrors were detected in file 'C:\Users\Frasher Gray\Documents\NsPaintRequest-20240702.xlsx'Removed Records: Worksheet properties from /xl/workbook.xml part (Workbook)
Создание файла Excel:
public class Excel
{
public string FileName { get; set; }
private SpreadsheetDocument ExcelWorkbook;
private WorksheetPart CurrentWorksheet;
private Columns ColumnsInProgress;
private List RowsInProgress;
public Excel(string FileName = "Default File Name")
{
this.FileName = FileName;
ExcelWorkbook = SpreadsheetDocument.Create($"C://Users/Frasher Gray/Documents/{FileName}.xlsx", SpreadsheetDocumentType.Workbook);
ExcelWorkbook.AddWorkbookPart();
ExcelWorkbook.WorkbookPart.Workbook = new Workbook();
ColumnsInProgress = new Columns();
RowsInProgress = new List();
}
public void PrepareColumn(int FirstColumnAffected, int LastColumnAffected, bool UseCustomWidth = false, double CustomWidth = 0)
{
if (UseCustomWidth)
ColumnsInProgress.Append(new Column() { Min = new UInt32Value((uint)FirstColumnAffected), Max = new UInt32Value((uint)LastColumnAffected), CustomWidth = true, Width = new DoubleValue(CustomWidth) });
else
ColumnsInProgress.Append(new Column() { Min = new UInt32Value((uint)FirstColumnAffected), Max = new UInt32Value((uint)LastColumnAffected) });
}
public void CreateRow(double? CustomHeight = null)
{
SheetData SheetData = CurrentWorksheet.Worksheet.GetFirstChild() ?? CurrentWorksheet.Worksheet.AppendChild(new SheetData());
Row NewRow = new Row() { RowIndex = new UInt32Value((uint)SheetData.Count() + 1) };
if (CustomHeight != null)
NewRow.Height = CustomHeight;
RowsInProgress.Add(NewRow);
SheetData.Append(NewRow);
}
public void SetCell(T CellValue, int Row, string Column)
{
Cell NewCell = new Cell() { CellReference = $"{Column}{Row}" };
if (CellValue.GetType() == typeof(string))
{
NewCell.DataType = new EnumValue(CellValues.String);
NewCell.CellValue = new CellValue(CellValue.ToString() ?? string.Empty);
}
else if (CellValue.GetType() == typeof(DateTime))
{
NewCell.DataType = new EnumValue(CellValues.Date);
NewCell.CellValue = new CellValue(Convert.ToDateTime(CellValue));
}
else
{
NewCell.DataType = new EnumValue(CellValues.Number);
NewCell.CellValue = new CellValue(Convert.ToDouble(CellValue));
}
if (RowsInProgress[Row - 1].Elements().Count() > 0)
{
RowsInProgress[Row - 1].InsertAfter(NewCell, RowsInProgress[Row - 1].Elements().Last());
}
else
{
RowsInProgress[Row - 1].AddChild(NewCell);
}
CurrentWorksheet.Worksheet.Save();
}
public void CreateSheet(string SheetName)
{
CurrentWorksheet = ExcelWorkbook.WorkbookPart.AddNewPart();
CurrentWorksheet.Worksheet = new Worksheet(new SheetData());
Sheets Sheets = ExcelWorkbook.WorkbookPart.Workbook.GetFirstChild() ?? ExcelWorkbook.WorkbookPart.Workbook.AppendChild(new Sheets());
uint SheetId = (uint)(Sheets.Elements().Count() + 1);
Sheet Sheet = new Sheet() { Id = ExcelWorkbook.GetIdOfPart(ExcelWorkbook.WorkbookPart), SheetId = SheetId, Name = SheetName };
Sheets.Append(Sheet);
}
public void FinishSheet()
{
CurrentWorksheet.Worksheet.InsertAt(ColumnsInProgress, 0);
ColumnsInProgress = new Columns();
RowsInProgress.Clear();
CurrentWorksheet.Worksheet.Save();
}
public void SaveFile()
{
ExcelWorkbook.WorkbookPart.Workbook.Save();
}
public void CloseDocument()
{
foreach (Row R in ExcelWorkbook.WorkbookPart.WorksheetParts.FirstOrDefault().Worksheet.GetFirstChild())
{
foreach (Cell P in R.ChildElements)
{
Console.WriteLine(P.InnerText + " " + P.CellReference);
}
}
ExcelWorkbook.Dispose();
}
}
Подробнее здесь: https://stackoverflow.com/questions/787 ... et-package
OpenXml всегда создает поврежденный файл .xlsx C# (пакет .Net NuGet) ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Jpackage создает поврежденный файл .app при использовании с работающим файлом .jar.
Anonymous » » в форуме JAVA - 0 Ответы
- 51 Просмотры
-
Последнее сообщение Anonymous
-