【问题标题】:Excel C# Workbook changes automaticallyExcel C# 工作簿自动更改
【发布时间】: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


【解决方案1】:

最后一个代码 sn-p 中的this 是什么?扩展 System.Windows.Forms.Form 的东西?

this.Close(); 是做什么的?

在我看来,你的

Globals.ThisAddIn.Application.Workbooks[Globals.ThisAddIn.Application.Workbooks.Count].Activate();

可能根本不会被调用,因为 this 之前已关闭。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多