从SQL Server表中将数据插入Excel工作表的列中

时间:2016-10-12 12:34:09

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

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

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

1 个答案:

答案 0 :(得分:2)

您是否考虑过使用C#库(例如NPOIEPPlus)来修改Excel表格?

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

编辑(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列中的单元格,并将值设置为“test”。最后,我保存了更改。如您所见,使用起来非常简单。如果您需要进一步说明或扩展示例,请与我们联系。

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

using OfficeOpenXml;
using System.IO;

编辑(实体框架指南):

假设您没有使用.NET Core,因为您已经拥有现有数据库,我建议您使用Entity Framework 6中更简单的Database First方法从SQL Server数据库中查询和检索数据。按照列出的here说明在您的网络应用中设置您的实体数据模型。一旦您创建了EDMX文件并让控制器创建了您的操作方法,您就可以编写LINQ查询来获取数据了。我不知道您的数据库架构的细节或填充列需要多少数据,或者用户是否将提供输入作为查询的一部分,因此它使得提供特定的某些内容变得有点困难例如,但我可以向您展示一个通用示例,然后希望可以从那里运行它。这是一个快速而肮脏的示例,它结合了查询数据库和将数据写入Excel工作表。在这个例子中,我正在查询Cars表中的所有Blue汽车,然后在结果集中将每辆汽车的Make和Model写入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();
            }
        }
    }