我有一个包含七列的Excel工作表,其中两列是空的。我在SQL Server中有父表,有几列和完整的数据。
如何通过从ASP.NET MVC中的SQL Server表获取数据来填充这两个空列?提前谢谢!
答案 0 :(得分:2)
您是否考虑过使用C#库(例如NPOI或EPPlus)来修改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();
}
}
}