gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 21:57:05 25 4
gpt4 key购买 nike

所以我正在做一些 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com