【问题标题】:How to generating Excel File with multi sheet by using SQL Server 2012?如何使用 SQL Server 2012 生成多张 Excel 文件?
【发布时间】:2020-09-25 08:16:06
【问题描述】:

我需要在 SQL Server 2012 中创建一个存储过程或查询以从 C# 代码中获取数据表,并根据所述数据表中存在的数据创建一个包含多个工作表的 Excel 文件。

以下面的数据为例,我有一个函数GetDate返回数据表。

使用两张表格创建文件 ABC.xlsx - 第一张表格名称来源和第二张表格名称类型,并根据数据加载与每张表格相关的数据。

因此结果将是一个新文件Abc.xlsx,其中包含两张表SourceTypes,每张表都有一行数据。

public static DataTable GetData() 
{
    DataTable dataTable = new DataTable();
    dataTable.Columns.Add("PartId", typeof(int));
    dataTable.Columns.Add("Company", typeof(string));
    dataTable.Columns.Add("Files", typeof(string));
    dataTable.Columns.Add("Tab", typeof(string));

    dataTable.Rows.Add(1222,"micro","Abc","source");
    dataTable.Rows.Add(1321, "silicon", "Abc", "Types");

    return dataTable;
}

SQL Server 2012 能否创建包含多个工作表的 Excel 文件?

我可以在 C# 中做到这一点,但在 SQL 中我不能;那么我怎样才能以任何方式从 SQL Server 2012 实现呢?

【问题讨论】:

  • SQL Server 绝对不是用于创建 Excel 工作表的系统!如果您的 C# 代码中已有数据 - 使用 C# 中的许多 Excel 库中的任何一个在此处创建 Excel 文件!容易多了....

标签: tsql stored-procedures ssis sql-server-2012 c#-5.0


【解决方案1】:

SQL 存储过程对此不是必需的。您可以直接从 C# 迭代数据行创建 .xlsx 文件。比如:

var xlApp = new Microsoft.Office.Interop.Excel.Application();
var workbook = xlApp.Workbooks.Add();
var data = GetData();
foreach (DataRow row in data.Rows)
{
     var worksheet = xlApp.Worksheets.Add();
     worksheet.Name = row["Tab"].ToString();
}

xlWorkbook.SaveAs("path.xlsx");

一些更详细的关于 Microsoft.Office.Interop here的文档

就个人而言,我会使用 NuGet 包来创建 .xlsx 文件,因为使用 Microsoft.Office.Interop 您需要在运行代码的机器上实际安装 Office 中的 Excel(也许不会安装在您的部署服务器上安装它可能会花费更多的钱)。

我个人对此的偏好是this NuGet 包。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 2012-11-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多