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

本文关键字:For 循环 工作簿 | 更新日期: 2023-09-27 17:57:24

所以我正在做一些 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 语句之外分配它,所以它应该通过......右?

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

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

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

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

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