c# - 使用来自数据库的 openxml 生成 excel 表

标签 c# sql-server asp.net-core

我需要使用数据库中的 linq 生成包含多个选项卡或工作表的 Excel 工作表。如何动态地做到这一点。我的意思是有什么方法可以从数据库中动态设置列标题名称。我正在使用 asp.net 核心。 需要从数据库表中动态生成列名和长度。

最佳答案

请确认您已经安装了DocumentFormat.OpenXml包。您可以引用here .

这是一个简单的演示,如下所示:

1.型号:

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

2. Controller :

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<WorksheetPart>();
            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<String> columns = new List<string>();
            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();
        }
    }
}

3.结果: enter image description here

关于c# - 使用来自数据库的 openxml 生成 excel 表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58649004/

相关文章:

c# - 更改 SqlConnection 字符串并在运行时调用 SqlConnectionStringBuilder

c# - 使用 Migrator.NET 从客户端进行 DB2 REORG TABLE

c# - 如果以docker image身份运行,则找不到证书,而以IISExpress身份运行时,证书会返回

c# - Regex 只获取 3.X 的字符串

python - 有没有办法使用 pyodbc 向 sql server 2005 插入一个请求 scope_identity()

javascript - 在 Sequelize-cli migrate for MSSQL 上将加密设置为 true

c# - ASP.NET Core Entity Framework Core 找不到 IndexAttribute

c# - 找不到 HttpPostAttribute。 -Asp.net核心

c# - EF Core开发过程中如何处理数据库变化?

c# - ASP :repeater events - how to postback