VSTO 系列(05)- 使用模板导入数据

在本系列的第二篇,实现了从数据库导入数据。对导入数据的工作表,如果有格式要求,可以通过代码来设置,但更方便的方式是使用数据模板。本篇介绍如何使用 Excel 模板来导入数据。

假设我们要从数据库中导入 employees 表的数据,提前准备好 Excel 模板,将模板文件放在 bin/debug/templates 文件夹下。

在 ExcelUtils.cs 文件中,添加一个静态方法 CopyWorkSheetTempate ,用于从模板文件中拷贝模板工作表:

public static void CopyWorksheetTemplate(String templateWorkbookFile, String sourceSheetName, Worksheet targetSheet) {
    Application excelApp = ThisAddIn.ExcelApp;

    excelApp.ScreenUpdating = false;
    Workbook templateWorkbook = excelApp.Workbooks.Open(templateWorkbookFile);

    if (templateWorkbook == null) {
        throw new Exception("Template file does not exist.");
    }

    Worksheet templateSheet = templateWorkbook.Worksheets[sourceSheetName];
    if (templateSheet == null) {
        throw new Exception("Template worksheet does not exist.");
    }

    templateSheet.Copy(targetSheet); 
    templateWorkbook.Close();

    excelApp.ScreenUpdating = true;
}

在 Ribbon 功能区中,创建一个按钮,Label 属性设置为"查看Employee表数据",在 button_click 事件中编写如下代码:

private void btnImportEmployees_Click(object sender, RibbonControlEventArgs e) {
    Worksheet targetSheet = ThisAddIn.ExcelApp.ActiveSheet;

    // copy worksheet from template file
    string baseDir = AppDomain.CurrentDomain.BaseDirectory;
    string templateFile = $@"{baseDir}templates\emp_master_template.xlsx";

    if (File.Exists(templateFile)) {
        ExcelUtils.CopyWorksheetTemplate(templateFile, "emp_master", targetSheet);
        targetSheet = ThisAddIn.ExcelApp.Worksheets[1]; // 拷贝后,新的工作表位于最开始位置
    }
    else { // if template file does not exist, add a new worksheet
        targetSheet = ThisAddIn.ExcelApp.Worksheets.Add();
    }

    // copy data
    System.Data.DataTable values = EmployeeService.ListAll();
    ExcelUtils.CopyFromDataTable(values, targetSheet);
}

源代码

05-Importing Data from Template · - 码云

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值