首页 > 解决方案 > 我们如何将数据写入excel模板并在OpenXML中维护模板格式?

问题描述

我能够使用 openxml 读取 excel 模板,并且能够将数据附加到工作表中。但无法维护现有的 Excel 模板格式,无法识别列标题

请找到下面使用的代码

if (ds.Tables.Count > 0 && ds.Tables[0] != null || ds.Tables[0].Columns.Count > 0)
                {
                    System.Data.DataTable table = ds.Tables[0];

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

                        Sheet sheet = spreadsheetDocument.WorkbookPart.Workbook.Sheets.GetFirstChild<Sheet>();
                        Worksheet worksheet = (spreadsheetDocument.WorkbookPart.GetPartById(sheet.Id.Value) as WorksheetPart).Worksheet;

                        SheetData sheetData = worksheet.GetFirstChild<SheetData>();
                        List<String> columns = new List<string>();
                        IEnumerable<Row> rows = worksheet.GetFirstChild<SheetData>().Descendants<Row>();

                        foreach (DataColumn column in table.Columns)
                        {
                            columns.Add(column.ColumnName);
                            Cell cell = new Cell();
                            cell.DataType = CellValues.String;
                            cell.CellValue = new CellValue(column.ColumnName);
                        }
                        

                        foreach (DataRow row in table.Rows)
                        {
                            Row newRow = new Row();
                            columns.ForEach(col =>
                            {
                                Cell cell = new Cell();
                                //If value is DBNull, do not set value to cell  
                                if (row[col] != System.DBNull.Value)
                                {
                                    cell.DataType = CellValues.String;
                                    cell.CellValue = new CellValue(row[col].ToString());
                                }
                                newRow.AppendChild(cell);
                            });
                            sheetData.AppendChild(newRow);
                        }
                        spreadsheetDocument.WorkbookPart.Workbook.Save();
                        spreadsheetDocument.Close();
                    }

请找到实际的excel屏幕截图

请找到预期的excel屏幕截图

标签: openxml

解决方案


请澄清您的具体问题,并提供您正在使用的实际代码片段和示例模板,以便我们更好地了解您的问题并在该问题上为您提供帮助。

有较早的帖子“<a href="https://stackoverflow.com/questions/19658267/openxml-sdk-2-5-excel-template">OpenXML SDK 2.5 Excel 模板”在模板中查找名称为 DataField 的标签,并替换为数据。这可能是您正在寻找的。


推荐阅读