【问题标题】:Populate existing excel template containing columns from a table in SQL Server using C# [closed]使用 C# 填充包含 SQL Server 中表中的列的现有 excel 模板 [关闭]
【发布时间】:2014-12-06 09:56:51
【问题描述】:

我的 C# 项目需要生成 Excel 报告。我有一个现有的 excel 模板,其中包含要从 SQL Server 表中填充其值的列和该 excel 模板中的某些字段(例如 TestCasePassed、TestCaseFailed 等),该模板将使用代码中的值填充。

即Excel模板格式

TestCasePassed:TestCaseFailed:

日期:

名称指定薪水测试状态

我需要此过程的 C# 代码。提前致谢。

我实际上是 C# 的新手,我不知道如何进行,但是是的,我必须使用 Microsoft.Interop 来完成。

【问题讨论】:

  • 展示你尝试过的一些努力
  • hii...我实际上是 C# 的新手,我对如何继续并不太了解,但是是的,我必须使用 Microsoft.Interop 来完成。

标签: c# sql-server excel


【解决方案1】:

必须有 100 种方法来做到这一点,而且,如果你没有更具体,这个问题可能比其他任何事情都更多地基于意见。

如果我有这个任务(并假设有相当少量的记录)和现有的数据库,我会做

  1. Entity Framework db first到已有的sql数据库
  2. 从数据库中获取条目
  3. 使用EPPlus 写入电子表格

因此,我最终可能会得到类似这样的代码:

List<Entry> FromDb()
{
    List<Entry> res;
    using (var dbContext = new MyEntities()
    {
        res = dbContext.Where(e=>MeetsMyFilterCriteria(e)).ToList()
    }
    return res;
}

Main()
{
    FileInfo fileInfo = new FileInfo("path/to/excelTemplateFile.xlsx");

    using (var excelPackage = new ExcelPackage(fileInfo))
    {
        ExcelWorksheet sheet = excelPackage.Workbook.Worksheets["MyWorksheenName"];
        BaseRange startRange = sheet.Range["A2"] //or wherever data is to go
        int offset=0;
        foreach (entry in FromDb())
        {
            startRange.Offset(offset,0).Value = entry.PropertyA;
            startRange.Offset(offset,1).Value = entry.PropertyB;
            startRange.Offset(offset,2).Value = entry.PropertyC;

            // and so on ...

            offset++;
        }

        excelPackage.SaveAs("path/to/excelOutput.xls");

    }
}

这种方法很好且易于实施,但无法很好地扩展到数十万行的 1000 次导出,但如果我们谈论的是少量行和相对较少的导出,那么糟糕的性能可以忽略不计,并且可以通过易于使用来抵消实施。

【讨论】:

  • 谢谢斯图尔特。我实际上是 C# 的新手,我不太了解如何进行,但是是的,我必须使用 Microsoft.Interop 来完成。能否请您告诉我如何使用 Microsoft.Interop 进行操作,以便像我这样的初学者受益匪浅?
  • Ime 如果您不需要,Microsoft 互操作会更难使用。我强烈建议改用 epplus 之类的东西
【解决方案2】:

您可以使用EasyXLS Excel library。从 SQL Server 表创建查询并填充数据集。加载现有的 Excel 模板并将 DataSet 插入工作表中。

//Load Excel template
ExcelDocument template = new ExcelDocument();
template.easy_LoadXLSXFile("template.xlsx");//or easyLoadXLSFile for xls file (xltx/xlt)

//Get the sheet from the Excel file
ExcelWorksheet sheet = (ExcelWorksheet)template.easy_getSheetAt(0);

//Populate the sheet with SQL table values
sheet.easy_insertDataset(dataSet, false);

有关如何填充 DataSet 或如何格式化单元格的更多详细信息,请查看有关 how to export DataSet to Excel 的更多代码示例。

【讨论】:

  • 谢谢亚历克斯。我实际上是 C# 的新手,我不太了解如何进行,但是是的,我必须使用 Microsoft.Interop 来完成。能否请您告诉我如何使用 Microsoft.Interop 进行操作,以便像我这样的初学者受益匪浅?
猜你喜欢
  • 2013-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-06
  • 2014-04-12
相关资源
最近更新 更多