C# Excel工作表修改当前工作表C

C# Excel工作表修改当前工作表C,c#,winforms,excel,C#,Winforms,Excel,您是否可以在Excel中修改已打开的工作表。他们的MSDN页面提供了以下内容。每次都会添加一个新的工作簿和工作表。我有代码打开和现有工作表,我只希望它替换单元格中的值和关闭。非常感谢您的帮助 using Excel = Microsoft.Office.Interop.Excel; //Excel Reference public virtual Object ActiveSheet { get; set; } private void button15_Click(object sen

您是否可以在Excel中修改已打开的工作表。他们的MSDN页面提供了以下内容。每次都会添加一个新的工作簿和工作表。我有代码打开和现有工作表,我只希望它替换单元格中的值和关闭。非常感谢您的帮助

using Excel = Microsoft.Office.Interop.Excel; //Excel Reference

 public virtual Object ActiveSheet { get; set; }

 private void button15_Click(object sender, EventArgs e)//Generate Model and Part Numbers
    {
        Excel.Application oXL;
        Excel._Workbook oWB;
        Excel._Worksheet oSheet;

        //Start Excel and get Application object.
        oXL = new Excel.Application();
        oXL.Visible = true;

        //Get a new workbook.
        oWB = (Excel._Workbook)(oXL.Workbooks.Add(Missing.Value));
        oSheet = (Excel._Worksheet)oWB.ActiveSheet;  
        oSheet.Cells[6, 4] = "0"; //Change Value in Cell in Excel Cell Location [y-axis, x-axis]
     }
您可以迭代oXL.Workbook以访问当前打开的工作簿。。。当前活动工作簿可通过访问访问

编辑-根据评论:

在访问ActiveWorkbook之前,请使用oXL.Windows查找已打开的窗口并在该窗口上调用Activate,或者只需调用oXL.ActiveWindow.Close或oXL.ActiveWindow.ActivatePrevious即可获取已打开的窗口

编辑2-根据解决方案最后部分的意见:

使用


如果您像下面这样打开,那么您将只创建一个新实例。 oXL=新的Excel.应用程序

c将创建第二个excel进程。通过这种方式,您无法访问任何Excel应用程序,该应用程序由用户手动打开

如果要打开非应用程序打开的活动工作表,请检查此处:

其余的都一样:

oSheet = (Excel._Worksheet)oWB.ActiveSheet; 
若要访问通过c实例打开的工作表,请访问:.net framework 4

using Excel;

    Excel.Application oXl = new Excel.Application();
    Workbook oWb = oxl.workbooks.add();
    Worksheet oWs = oWs.Worksheets(1); //As default excel will open 3 worksheet and active worksheet will be first one.

编辑:我没有检查代码块是否有键入错误。

放弃互操作类并使用OLEDB在工作表上运行更新查询可能更简单。如果您感兴趣,我可以提供示例。

以下是我的想法,我希望这能帮助大家。谢谢所有帮助过我的人

 using Excel = Microsoft.Office.Interop.Excel; //Excel Reference   

  public virtual Object ActiveSheet { get; set; }   

  private void button15_Click(object sender, EventArgs e)//Generate Model and Part Numbers   
  {   
        //Gets ActiveSheet to Modify
        Excel.Application oXL;
        Excel.Workbook oWB;
        Excel.Worksheet oSheet;

        //Start Excel and get Active Workbook and Sheet to modify
        oXL = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); 
        oXL.Visible = true;
        oWB = (Excel.Workbook)oXL.ActiveWorkbook; 
        oSheet = (Excel.Worksheet)oWB.ActiveSheet;   

        //Cell Input
        oSheet.Cells[6, 4] = "0"; //Change Value in Cell in Excel Cell Location [y-axis, x-axis] 
   }   

是的,我想我不明白没有对象ActiveWorkbook至少没有一个我可以找到的查看我更新的答案和链接-有oXl.ActiveWorkbook!什么是oXL=那么它不能是新的Excel.Application,它将打开另一个Excel窗口并出错。还有什么我可以让oXL等同于tooXL的吗?这是一个新的Excel应用程序-因为Excel不会第二次启动Singleton,一切都很好…结合起来-如果这不起作用,那么你的OS/Excel安装真的很奇怪。。。你是否有机会尝试通过Windows服务或第二次桌面会话来实现这一点?我打电话给微软,他们将为此向我收取500美元的费用,所以任何人都可以得到你的赞扬!!这也会打开一个新的应用程序,但不会修改现有打开的文件。谢谢您的帮助。由于堆栈溢出,我无法发布答案。我得到了答案。感谢您的帮助,由于堆栈溢出,我无法发布答案
 using Excel = Microsoft.Office.Interop.Excel; //Excel Reference   

  public virtual Object ActiveSheet { get; set; }   

  private void button15_Click(object sender, EventArgs e)//Generate Model and Part Numbers   
  {   
        //Gets ActiveSheet to Modify
        Excel.Application oXL;
        Excel.Workbook oWB;
        Excel.Worksheet oSheet;

        //Start Excel and get Active Workbook and Sheet to modify
        oXL = (Excel.Application)Marshal.GetActiveObject("Excel.Application"); 
        oXL.Visible = true;
        oWB = (Excel.Workbook)oXL.ActiveWorkbook; 
        oSheet = (Excel.Worksheet)oWB.ActiveSheet;   

        //Cell Input
        oSheet.Cells[6, 4] = "0"; //Change Value in Cell in Excel Cell Location [y-axis, x-axis] 
   }