Получение ошибки при создании образца (пустой) рабочей книги с DocumentFormat.Open Xml (2.10.0) - PullRequest
0 голосов
/ 22 февраля 2020

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

Я взял код с Docs.Microsoft.com / здесь и http://www.dispatchertimer.com/tutorial/how-to-create-an-excel-file-in-net-using-openxml-part-1-basics/ (образцы все примерно одинаковые)

Когда я пытаюсь открыть книгу в Excel я получаю ошибку: мы обнаружили проблему с некоторым содержимым в 'Foo.xlsx'. Вы хотите, чтобы мы попытались восстановить столько, сколько мы можем? Если вы доверяете источнику этой книги, нажмите Да.

Я использовал. NET Core (хотя я мог бы также воспроизвести его с помощью. NET Framework) и DocumentFormat.Open Xml Версия: 2.10. 0

Что я делаю не так?

Спасибо

Jordi

using (SpreadsheetDocument document = SpreadsheetDocument.Create("D:\\Diff\\Sample2\\Foo.xlsx", SpreadsheetDocumentType.Workbook, false))
        {
            // A SpreadsheetDocument must have at least a WorkbookPart and a WorksheetPart
            WorkbookPart workbookPart = document.AddWorkbookPart();
            workbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook(); // Name ambiguity...

            WorksheetPart worksheetPart = workbookPart.AddNewPart<WorksheetPart>();
            worksheetPart.Worksheet = new Worksheet(new SheetData());

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

            Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Test" };
            sheets.Append(sheet);

            SheetData sheetData = worksheetPart.Worksheet.AppendChild(new SheetData());

            ////Row row = new Row();

            ////row.Append(
            ////    ConstructCell("Id", CellValues.String),
            ////    ConstructCell("Name", CellValues.String),
            ////    ConstructCell("Birth Date", CellValues.String),
            ////    ConstructCell("Salary", CellValues.String));

            ////// Insert the header row to the Sheet Data
            ////sheetData.AppendChild(row);

            ////uint id = 1;
            ////foreach (Spreadsheet spreadsheet in m_sheets.Values)
            ////{
            ////    Debug.Assert(spreadsheet != null);

            ////    spreadsheet.SaveToExcel(workbookPart, sheets, id++);
            ////}

            workbookPart.Workbook.Save();

            document.Close();
        }

1 Ответ

0 голосов
/ 23 февраля 2020

Я также опубликовал проблему в GitHub и получил там ответ, в котором говорилось, что это ошибка кода, а не ошибка SDK. Благодарю Скотта Хейни , так как он ответил мне на Github. Резюме ответа:

Это работает для меня, если вы удалите строку (

SheetData

уже добавлено в рабочую таблицу, когда она была передается в качестве аргумента в конструктор, поэтому эта дополнительная строка вызывает его добавление дважды):

SheetData sheetData = worksheetPart.Worksheet.AppendChild(new SheetData());

и также заменяет

workbookPart.Workbook.Save ()

с

document.Save ()

.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...