c# - 将工作簿名称传递到 For 循环 C#

标签 c# excel if-statement

所以我正在做一些 For 循环,迭代从模板导入的不同变量更改、运行 SQL 脚本、转储数据、循环到下一个 SQL 脚本等,并且使用同一模板文件多次完成此操作(在查询转储结束时保存为新文件。以此为背景:

我需要能够在循环中第一次打开模板,然后在每个查询转储中保持打开状态,直到完成。我不想继续重新打开该文件,因为它太大且麻烦,到目前为止我已经这样做了:

public void ExportToExcel(DataSet dataSet, string templatePath)
    {
        Excel.Application excelApp = new Excel.Application();
        excelApp.Visible = true;
        FileInfo excelFileInfo = new FileInfo(templatePath);
        Boolean fileOpenTest = IsFileLocked(excelFileInfo);

        if (!fileOpenTest)
        {
            Excel.Workbook templateBook = excelApp.Workbooks.Open(templatePath);
        }
        else
        {
            Excel.Workbook templateBook = excelApp.Workbooks[templatePath];
        }

        for (int i = 0; i < lstQueryDumpSheet.Items.Count; i++)
        {     
            string tabName = lstQueryDumpSheet.Items[i].ToString();
            Excel.Worksheet templateSheet = templateBook.Sheets[tabName];

            // Copy DataTable
            foreach (System.Data.DataTable dt in dataSet.Tables)
            { ... rest of loops...

我的问题是代码行“Excel.Worksheet templateSheet = templateBook.Sheets[tabName];”告诉我“templateBook”未分配,但我在 IF 语句之外分配它,所以它应该通过......对吗?

最佳答案

这是一个范围问题。您的代码:

if (!fileOpenTest)
{
    Excel.Workbook templateBook = excelApp.Workbooks.Open(templatePath);
}
else
{
    Excel.Workbook templateBook = excelApp.Workbooks[templatePath];
}

在 block 内声明 templateBook 变量,因此其范围仅限于该 block 内。要让变量在这些 block 之外持续存在,您需要像这样在外部声明它:

Excel.Workbook templateBook;
if (!fileOpenTest)
{
    templateBook = excelApp.Workbooks.Open(templatePath);
}
else
{
    templateBook = excelApp.Workbooks[templatePath];
}

关于c# - 将工作簿名称传递到 For 循环 C#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30941643/

相关文章:

c# - 打开文本文件,遍历内容并检查

c# - 如何使用c#将文本显示为隐藏

c# - Checkbox 的 OnAction 不做任何事情

excel - UCase在VBE中没有被识别,需要什么引用?

java - 为什么这不起作用? java

Python Pandas 计算日期之间的平均天数

c# - 使用 <li> onclick 调用 C# 代码隐藏方法

c# - 我该如何修复 csharp-mode.el?

VBA ADO Recordset .Copyfromrecordset 长时间运行

javascript - 满足条件但未调用函数(基本 JavaScript)