【问题标题】:C# set opened workbookC#设置打开的工作簿
【发布时间】:2017-09-15 21:34:51
【问题描述】:

我开始使用 C# 创建 Excel-Add-IN。

我需要做的很简单,我需要将一个工作簿设置为一个变量,工作簿已经在运行,我尝试过但没有成功

        Excel.Application excel = new Excel.Application();
        Excel.Workbook wb = excel.ActiveWorkbook as Excel.Workbook;
        wb.SaveAs("C:\\Users\\ro_sg\\Desktop\\Pasta1.xlsx");
        Excel.Worksheet ws = wb.Worksheets["Plan1"]; 
        Excel.Range range = ws.Range["A1"];
        range.Value = "Success";

        wb.Save();

wb 变量找不到工作簿(为空),我不明白为什么。

如果你们中的任何人发现错误,请告诉我。

谢谢!

【问题讨论】:

    标签: c# excel vsto excel-addins


    【解决方案1】:

    我相信您的问题是,从您设置工作簿变量开始,它可能无法在上游找到活动的 Excel 应用程序。您的代码似乎正在尝试创建一个新的 excel 应用程序(没有工作簿),而不是获取打开的现有应用程序。

    试试这个:

            Excel.Application excel = (Excel.Application)Marshal.GetActiveObject("Excel.Application");
            Excel.Workbook wb = (Excel.Workbook)excel.ActiveWorkbook;
            wb.SaveAs("D:\\WeeeDueceDuece.xlsx");
    

    【讨论】:

    • 有道理,但 wb 仍然为空
    • 奇怪。只是为了验证,当您运行此程序时:您的桌面上是否打开了有效的工作簿?
    • 实际上再检查一件事。由于您之前的代码正在启动新的空应用程序实例 excel:进入任务管理器,看看您是否有任何挥之不去的 excel 进程挂在那里。如果是这样,将它们全部杀死,然后使用我提供的代码重试。只是为了确保你有一张白纸。
    • 谢谢!任务管理器上挂了很多excel进程,当我杀了它就可以了
    【解决方案2】:

    我不知道您是否需要获取特定的工作表,但如果您尝试以下操作:
    Excel.Worksheet ws = wb.Worksheets[1];
    它将获得您工作簿的第一张工作表

    【讨论】:

      【解决方案3】:

      如果您的实际代码没有更多中间步骤,它总是会失败。我很惊讶这条线没有出错:

      Excel.Workbook wb = excel.ActiveWorkbook as Excel.Workbook;
      

      这是因为 Excel 的新实例不一定会创建新的工作簿。您可以通过以下几行来检查:

      Excel.Application application = new Excel.Application();
      Excel.Workbooks workbooks = application.Workbooks;
      Console.WriteLine(workbooks.Count); // "0"
      

      然而,新工作簿应该创建默认数量的工作表(通常为 3 个,但可编辑)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-09-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-16
        相关资源
        最近更新 更多