【问题标题】:Generate excel sheet using openxml from database使用数据库中的openxml生成excel表
【发布时间】:2019-10-31 18:02:41
【问题描述】:

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

【问题讨论】:

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


【解决方案1】:

确保你已经安装了DocumentFormat.OpenXml包。你可以参考here

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

1.型号:

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

2.控制器:

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.结果:

【讨论】:

    【解决方案2】:

    我使用 C# 找到了这个示例。也许它可以为您指明正确的方向。

    Export DataTable to Excel with Open Xml SDK in c#

    【讨论】:

    • 我确实读过这个问题。你也可以试试这个页面。 aspsnippets.com/Articles/…
    • @Sadiqul 该链接绝对是相关的。答案的问题是它没有真正解释发生了什么。仅链接答案没有用。 问题本身也不是一个很好的问题 - 有许多重复的问题展示了如何使用 Open XML 或更高级别的库(如 EPPlus)在服务器上创建 Excel 工作表
    • "仅链接答案没有用" 这是真的;对于那个很抱歉。在这种情况下,只是我自己不是开发人员,而是想链接到一些解释,OP 可以从中构建类似的逻辑。我选择发布一些东西而不是什么都没有,但我想这并不总是有帮助。
    • 也许我的回答会对你有所帮助。虽然我强烈建议在处理 OpenXML 时使用 SAX 方法,但它要快得多,而且如果您的查询结果在内存消耗方面很大,您也可以将其最小化到几乎没有。这是我的链接:stackoverflow.com/questions/55612337/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-10
    • 1970-01-01
    相关资源
    最近更新 更多