簡體   English   中英

打開 XML:如何使用 c# 在現有 Excel 文件中追加新工作表后添加行和單元格值

[英]Open XML: How to add rows and cell value after appending new sheet in existing Excel file using c#

我使用開放 XML 在現有 Excel 文件中插入/附加了新工作表,但我無法添加行和單元格值。 以下是我的代碼:

  using (var workbook = SpreadsheetDocument.Open(excelFilePath, true))
            {
                var workbookPart = workbook.WorkbookPart;
                var wb = workbookPart.Workbook;
                int rowIndex = 0;
                // Add a blank WorksheetPart.
                WorksheetPart newWorksheetPart = workbook.WorkbookPart.AddNewPart<WorksheetPart>();
                newWorksheetPart.Worksheet = new Worksheet(new SheetData());
                Sheets sheets = workbook.WorkbookPart.Workbook.GetFirstChild<Sheets>();
                string relationshipId = workbook.WorkbookPart.GetIdOfPart(newWorksheetPart);

                // Get a unique ID for the new worksheet.
                uint sheetId = 1;
                if (sheets.Elements<Sheet>().Count() > 0)
                {
                    sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1;
                }

                // Give the new worksheet a name.
                string sheetName = "Data";

                // Append the new worksheet and associate it with the workbook.
                Sheet dataSheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName };
                sheets.Append(sheet);
                workbookPart.Workbook.Save();
                var sharedStringPart = workbookPart.SharedStringTablePart;
                var values = sharedStringPart.SharedStringTable.Elements<SharedStringItem>().ToArray();
                Row headerRow = new Row();
                Cell cell = new Cell();
                cell.DataType = CellValues.String;
                cell.CellValue = new CellValue("EmpId");
                headerRow.AppendChild<Cell>(cell);
                cell = new Cell();
                cell.DataType = CellValues.String;
                cell.CellValue = new CellValue("Name");
                headerRow.AppendChild<Cell>(cell);

                headerRow.AppendChild<Cell>(cell);
                dataSheet.InsertAt<Row>(headerRow, rowIndex++);
                workbookPart.Workbook.Save();
            }
        }

它拋出一個異常:

非復合元素沒有子元素。

當我收到此錯誤時(“非復合元素沒有子元素。”)是關於我的工作表對象的。 我得到了 Apeend 的 wearg 對象,所以你需要將 use .Append 更改為類似的東西:

Worksheet worksheet = worksheetPart.Worksheet;
SheetData sheetData = worksheet.GetFirstChild<SheetData>();
sheetData.Append(row);

一個完整的例子

            using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create(tmp, SpreadsheetDocumentType.Workbook))
            {
                // Add a WorkbookPart to the document.
                WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart();
                workbookpart.Workbook = new Workbook();

                // Add a WorksheetPart to the WorkbookPart.
                WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>();
                worksheetPart.Worksheet = new Worksheet(new SheetData());

                // Add Sheets to the Workbook.
                Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook.
                    AppendChild<Sheets>(new Sheets());

                // Append a new worksheet and associate it with the workbook.
                Sheet sheet = new Sheet()
                {
                    Id = spreadsheetDocument.WorkbookPart.
                    GetIdOfPart(worksheetPart),
                    SheetId = 1,
                    Name = fileName,

                };
                sheets.Append(sheet);


                var firstChild = sheet.FirstChild;

                //sheet.Append(row);

                Worksheet worksheet = worksheetPart.Worksheet;
                SheetData sheetData = worksheet.GetFirstChild<SheetData>();

                UInt32 rowIndex = 1;
                var row = new Row() { RowIndex = rowIndex };

                var firstNameCell = new Cell() { CellReference = "A" + rowIndex };
                firstNameCell.CellValue = new CellValue("FirstName");
                firstNameCell.DataType = CellValues.String;

                row.Append(firstNameCell);

                Cell lastNameCell = new Cell() { CellReference = "B" + rowIndex };
                lastNameCell.CellValue = new CellValue("LastName");
                lastNameCell.DataType = new EnumValue<CellValues>(CellValues.String);

                row.Append(lastNameCell);

                sheetData.Append(row);

                workbookpart.Workbook.Save();

                // Close the document.
                spreadsheetDocument.Close();

            }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM