从数据库生成Excel表格,使用openxml。

14 浏览
0 Comments

从数据库生成Excel表格,使用openxml。

我需要使用linq从数据库中生成包含多个标签或工作表的Excel表格。如何动态生成它。我的意思是是否有办法根据数据库动态设置列标题名称。我正在使用asp.net core。需要根据数据库表动态生成列名和长度。

0
0 Comments

生成Excel表格的问题出现的原因是没有安装`DocumentFormat.OpenXml`包。解决方法是安装`DocumentFormat.OpenXml`包,并按照以下步骤进行操作。

首先,需要创建一个模型,代码如下:

public class TestModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string City { get; set; }
}

然后,在控制器中编写以下代码:

public class TestModelsController : Controller
{
    private readonly CreateexcelContext _context;
    public TestModelsController(CreateexcelContext context)
    {
        _context = context;
    }
    [Route("/excel")]
    public void WriteExcelFile()
    {
       var persons = _context.TestModel.ToList();
        DataTable table = (DataTable)JsonConvert.DeserializeObject(JsonConvert.SerializeObject(persons), (typeof(DataTable)));
        using (SpreadsheetDocument document = SpreadsheetDocument.Create("TestNewData.xlsx", SpreadsheetDocumentType.Workbook))
        {
            WorkbookPart workbookPart = document.AddWorkbookPart();
            workbookPart.Workbook = new Workbook();
            WorksheetPart worksheetPart = workbookPart.AddNewPart();
            var sheetData = new SheetData();
            worksheetPart.Worksheet = new Worksheet(sheetData);
            Sheets sheets = workbookPart.Workbook.AppendChild(new Sheets());
            Sheet sheet = new Sheet() { Id = workbookPart.GetIdOfPart(worksheetPart), SheetId = 1, Name = "Sheet1" };
            sheets.Append(sheet);
            Row headerRow = new Row();
            List columns = new List();
            foreach (System.Data.DataColumn column in table.Columns)
            {
                columns.Add(column.ColumnName);
                Cell cell = new Cell();
                cell.DataType = CellValues.String;
                cell.CellValue = new CellValue(column.ColumnName);
                headerRow.AppendChild(cell);
            }
            sheetData.AppendChild(headerRow);
            foreach (DataRow dsrow in table.Rows)
            {
                Row newRow = new Row();
                foreach (String col in columns)
                {
                    Cell cell = new Cell();
                    cell.DataType = CellValues.String;
                    cell.CellValue = new CellValue(dsrow[col].ToString());
                    newRow.AppendChild(cell);
                }
                sheetData.AppendChild(newRow);
            }
            workbookPart.Workbook.Save();
        }
    }
}

最后,运行代码,将会生成一个名为`TestNewData.xlsx`的Excel文件,包含从数据库中获取的数据。

运行结果如下图所示:

![enter image description here](https://i.stack.imgur.com/7GhRR.gif)

0
0 Comments

问题的出现原因:用户想要从数据库生成Excel表格,但不清楚如何使用OpenXml进行操作。

解决方法:通过查找相关信息,找到使用OpenXml从数据库生成Excel表格的示例代码和教程,并将其提供给用户作为参考。以下是一些相关资源:

- 一个示例代码,使用C#语言实现将DataTable导出为Excel文件的功能:[Export DataTable to Excel with Open Xml SDK in c#](https://stackoverflow.com/questions/11811143)

- 一个使用OpenXml在ASP.Net MVC中将数据导出为Excel文件的示例教程:[OpenXml MVC Example: Export to Excel using OpenXml in ASP.Net MVC](https://www.aspsnippets.com/Articles/OpenXml-MVC-Example-Export-to-Excel-using-OpenXml-in-ASPNet-MVC.aspx)

- 一个提供了使用OpenXml创建Excel表格的更高级库EPPlus的示例代码和教程:[相关问题:openxml change excel cell format date and number when exporting from datagrid](https://stackoverflow.com/questions/55612337)

以上资源希望能够帮助用户解决使用OpenXml从数据库生成Excel表格的问题。

0