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

时间:2011-09-19 16:40:13

标签: c# winforms excel

无论如何,您可以在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]
     }

4 个答案:

答案 0 :(得分:3)

您可以遍历oXL.Workbooks以访问当前打开的工作簿...当前有效的工作簿可通过oXl.ActiveWorkbook获取。

编辑 - 根据评论:

使用oXL.Windows查找已打开的窗口,然后在访问Activate之前致电ActiveWorkbook,或者只需致电oXL.ActiveWindow.Close()oXL.ActiveWindow.ActivatePrevious()即可获取已打开窗口......

编辑2 - 根据评论的最后部分:

使用

oXL = (Excel.Application)System.Runtime.InteropServices.Marshal.GetActiveObject("Excel.Application");

答案 1 :(得分:2)

以下是我提出的建议,希望这能帮助大家。感谢所有帮助过的人

 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] 
   }   

答案 2 :(得分:0)

如果你打开如下,那么你将只创建一个新实例。  oXL = new Excel.Application();

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

如果您要打开活动工作表,而不是由您的应用程序打开,请在此处查看: Get instance of Excel application with C# by Handle

所有其余的都是一样的:

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.

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

答案 3 :(得分:0)

可能更容易放弃Interop Classes并使用OLEDB在工作表上运行更新查询。如果您有兴趣,我可以提供示例。