无论如何,您可以在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]
}
答案 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在工作表上运行更新查询。如果您有兴趣,我可以提供示例。