【发布时间】:2014-05-11 11:01:17
【问题描述】:
我编写了一个 Excel 插件 (Office 2013),我在其中制作了来自 ODBC 连接的数据报告。
我检查当前工作簿是否包含空表格。如果没有,我添加一个新的工作簿并将所有数据放入其中。但是在完成报告后,它会自动切换到第一个工作簿......我只使用 ActiveWorkbook.Activate......有没有人知道为什么会这样以及我必须做些什么来改变它?我的报告创建与 Backgroundworker ... on worker_hasFinished() 我还尝试使用 Application.Workbooks[Application.Workbook.Count].Activate(); 激活最后一个工作簿;
有什么想法吗?
更新:代码
单张完成后,我调用这个方法:
Excel.Workbook workbook = Globals.ThisAddIn.Application.ActiveWorkbook;
Excel.Worksheet targetSheet = getSheet(SheetName);
Excel.Worksheet firstSheet = (Excel.Worksheet)workbook.Worksheets[1];
targetSheet.Activate();
targetSheet.Range["A1"].Select();
firstSheet.Activate();
firstSheet.Range["A1"].Select();
SheetName 是当前工作表的名称 ... getSheet-Method 是一个 getSheetByName-Method
public static Excel.Worksheet getSheet(string SheetName)
{
Excel.Workbook workbook = Globals.ThisAddIn.Application.ActiveWorkbook;
Excel.Worksheet returnSheet;
foreach (Sheet sheet in workbook.Sheets)
{
if (sheet.Name.Equals(SheetName))
{
return sheet;
}
}
returnSheet = Globals.ThisAddIn.Application.Worksheets.Add(Type.Missing, Type.Missing, Type.Missing, Excel.XlSheetType.xlWorksheet);
returnSheet.Name = SheetName;
returnSheet.Move(After: workbook.Sheets[workbook.Sheets.Count]);
return returnSheet;
}
至少还有worker_hasFinished():
Globals.ThisAddIn.Application.ScreenUpdating = true;
this.ReportProgressBar.Style = ProgressBarStyle.Continuous;
this.ReportProgressBar.Value = 100;
this.Close();
Globals.ThisAddIn.Application.Workbooks[Globals.ThisAddIn.Application.Workbooks.Count].Activate();
SystemSounds.Beep.Play();
【问题讨论】:
-
添加更多代码,没有它我们无能为力
-
为了确保我理解问题:您激活
target然后first,并期望target处于活动状态?如果是这样,我认为您可能只是将工作表与工作簿混淆了,但我可能会误解。 -
对,我激活了目标,然后是工作簿中的第一张工作表,但我希望当前工作簿正在被激活......但是在 has_Finished 之后,它会激活第一个工作簿......
标签: c# excel office-interop