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

因此,我正在做一些For循环,这些循环遍历从模板导入的不同variables更改,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]; } 

在块内声明templateBookvariables,因此它的范围被限制在该块内。 要让这个variables在这些块之外持续存在,你需要像这样在外面声明它:

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