【问题标题】:Insert data into columns of Excel sheet from SQL Server table从 SQL Server 表中将数据插入 Excel 工作表的列
【发布时间】:2017-02-21 06:20:28
【问题描述】:

我有一个包含七列的 Excel 工作表,其中两列是空的。我在 SQL Server 中有包含几列和完整数据的父表。

如何通过从 ASP.NET MVC 中的 SQL Server 表中获取数据来填充这两个空列?提前致谢!

【问题讨论】:

    标签: asp.net sql-server asp.net-mvc excel model-view-controller


    【解决方案1】:

    您是否考虑过使用诸如NPOIEPPlus 之类的C# 库来修改您的Excel 工作表?

    您是否熟悉 Entity Framework 以及如何使用 NuGet 将其安装到您的项目中?您需要使用 EF 和 LINQ 来检索 SQL 表中的数据。这完全取决于您的应用程序的流程以及您想要触发更新 excel 工作表的内容,但您可能希望在控制器内部有一个操作方法来响应用户交互,然后访问数据库数据并将其写入工作表。或者您只是想一次性将数据从 SQL Server 提取和加载到 Excel?这将是一个网络应用程序还是只是一个基本的控制台应用程序?

    编辑(EPPlus 示例):

    这是我刚刚整理的一个简单示例,展示了如何使用 EPPlus 修改 Excel 工作表:

        var file = new FileInfo("C:\\Projects\\ConsoleApplication1\\test.xlsx");
        if (file.Exists)
        {
            using (ExcelPackage ep = new ExcelPackage(file))
            {
                var workSheet = ep.Workbook.Worksheets[1];
                workSheet.Cells[2, 4].Value = "test";
                ep.Save();
            }
        }
    

    在此示例中,我使用 System.IO 中的 FileInfo 打开 Excel 文件,然后假设该文件存在,创建一个新的 ExcelPackage 对象并将 FileInfo 对象作为参数传入。然后我访问第一个工作表并访问第 2 行第 4 列中的单元格并将值设置为“测试”。最后,我保存更改。如您所见,它使用起来非常简单。如果您需要进一步说明或扩展示例,请告诉我。

    请记住包括 System.IO 和 OfficeOpenXml(在您从 NuGet 安装 EPPlus 包之后):

    using OfficeOpenXml;
    using System.IO;
    

    编辑(实体框架指南):

    假设您没有使用 .NET Core,因为您已经有一个现有的数据库,我建议您使用 Entity Framework 6 中更简单的 Database First 方法从 SQL Server 数据库中查询和检索数据。按照here 列出的说明在您的 Web 应用程序中设置您的实体数据模型。一旦您创建了 EDMX 文件并创建了带有您的操作方法的控制器,您就可以编写一个 LINQ 查询来获取数据。我不知道您的数据库架构的详细信息,或者您需要多少数据来填充一列,或者用户是否要在查询中提供输入,因此提供特定的数据有点困难示例,但我可以向您展示一个通用示例,然后希望可以从那里运行它。这是一个快速而肮脏的示例,它将查询数据库与将数据写入 Excel 工作表相结合。在此示例中,我在 Cars 表中查询所有蓝色汽车,然后将结果集中每辆汽车的品牌和型号写入 Excel 电子表格(从第一行开始)。我在遍历结果集时增加行数,这假设 Make 在第一列,而 Model 在工作表的第二列。

        var file = new FileInfo("C:\\Projects\\ConsoleApplication1\\test.xlsx");
        if (file.Exists)
        {
            using (CarEntities dc = new CarEntities())
            {
                var carList = from c in dc.Cars
                              where c.Color == "Blue"
                              select c;
    
                var rowCount = 1;
    
                using (ExcelPackage ep = new ExcelPackage(file))
                {
                    foreach (var car in carList)
                    {
                        var workSheet = ep.Workbook.Worksheets[1];
                        workSheet.Cells[rowCount, 1].Value = car.Make;
                        workSheet.Cells[rowCount, 2].Value = car.Model;
    
                        rowCount++;
                    }
    
                    ep.Save();
                }
            }
        }
    

    【讨论】:

    • 1.它将成为一个网络应用程序 2.我必须创建一个操作方法,然后需要从本地获取 excel 文件,然后使用 SQL 服务器中的数据对其进行更新.
    • @Sribin 我刚刚更新了我上面的答案,包括一个如何使用 EPPlus 修改您的 Excel 电子表格的具体示例。我希望这有帮助。如果您需要帮助设置实体框架和查询数据库以获取数据,请告诉我。
    • 能否请您解释一下,而不是“测试”,我如何从 SQL 服务器提供值,并注意我需要填写一整列。
    • 能否请您解释一下,而不是“测试”,我如何从 SQL 服务器提供值,并注意我需要填写一整列。
    • @Sribin 在上面为您添加了额外的指导,向您展示如何使用实体框架查询数据库,然后将数据写入电子表格。希望这会有所帮助。
    猜你喜欢
    • 2012-11-23
    • 2012-09-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-13
    • 1970-01-01
    相关资源
    最近更新 更多