C#设置打开的工作簿

C#设置打开的工作簿,c#,excel,vsto,excel-addins,C#,Excel,Vsto,Excel Addins,我开始用C#创建Excel外接程序 我需要做的很简单,我需要将工作簿设置为变量,工作簿已在运行,我尝试了此操作,但没有成功 Excel.Application excel = new Excel.Application(); Excel.Workbook wb = excel.ActiveWorkbook as Excel.Workbook; wb.SaveAs("C:\\Users\\ro_sg\\Desktop\\Pasta1.xlsx");

我开始用C#创建Excel外接程序

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

        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变量找不到工作簿(返回null),我不明白为什么

如果你们中有人发现错误,请告诉我


谢谢

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

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

尝试一下:

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

如果您的实际代码在两个步骤之间没有更多步骤,那么它将始终失败。我很惊讶这行没有出错:

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张,但可编辑)。

这是有道理的,但wb仍然变得很奇怪。只是为了验证一下,当您运行此操作时,您是否在桌面上打开了一个有效的工作簿?请实际检查另一件事。由于您以前的代码触发了新的空excel应用程序实例:进入TaskManager,看看是否有任何延迟的excel进程挂在那里。如果是这样的话,把它们都杀掉,然后用我提供的代码再试一次。只是为了确保你有一个干净的记录。谢谢!任务管理器上挂着很多excel进程,当我杀死它时,它就工作了