使用 C# 填充包含 SQL Server 中表中的列的现有 Excel 模板

本文关键字:Excel 模板 包含 SQL Server 使用 填充 | 更新日期: 2023-09-27 18:33:16

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

即Excel模板格式

测试用例通过: 测试用例失败:

日期:

姓名指定薪资测试状态

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

实际上是C#的新手,我对如何继续没有太多想法,但是是的,我必须使用Microsoft.Interop来完成。

使用 C# 填充包含 SQL Server 中表中的列的现有 Excel 模板

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

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

  1. 实体框架数据库首先到现有 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 个导出,但前提是我们谈论的是少量行和相对较少的导出,性能不佳可以忽略不计,并被易于实现所抵消。

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

//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);
有关如何

填充数据集或如何设置单元格格式的更多详细信息,请查看有关如何将数据集导出到 Excel 的更多代码示例。