【发布时间】: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
我有一个包含七列的 Excel 工作表,其中两列是空的。我在 SQL Server 中有包含几列和完整数据的父表。
如何通过从 ASP.NET MVC 中的 SQL Server 表中获取数据来填充这两个空列?提前致谢!
【问题讨论】:
标签: asp.net sql-server asp.net-mvc excel model-view-controller
您是否考虑过使用诸如NPOI 或EPPlus 之类的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();
}
}
}
【讨论】: