Excel程序使用C#VSTO

我已经创build了C#Excel Addin项目,在该项目中,我已经添加了一个用户控件到该Excel,并在用户控件中放置一个button。 对于button,我已经写了从数据库获取数据到Excel单元(sheet1)的代码。 但这里遇到的问题是,当我点击一个新的Excel表单(应用程序)的button打开,数据从数据库中填充到新的Excel表单。 但是我想将我的数据从数据库填充到现有的Excel表格中,而不是新的Excel表格。 你能帮我吗?

我应该获得相同的Excel中的数据,而不是新的Excel表单。 在这里我的代码如下: –

worksheet = workbook.Sheets["Sheet1"]; worksheet = workbook.ActiveSheet; app.Visible = true;---- **here i am getting new excel application and data is getting populated** worksheet.Name = "Export to Excel"; Excel.Range mycell = Excel.Range)worksheet.get_Range("A1:B1","A1:B1"); int CountColumn = ds.Tables[0].Columns.Count; int CountRow = ds.Tables[0].Rows.Count; int col = 0; int row = 1; string data = null; int i = 0; int j = 0; for (col = 0; col < CountColumn; col++) { worksheet.Cells[row, col + 1] = ds.Tables[0].Columns[col].ColumnName.ToString(); } } 

不知道为什么你在这里使用Excel应用程序对象,即应用程序,而不是在插件项目中,您必须使用Globals.ThisAddin.Application.ActiveSheet / Globals.ThisAddin.Application.ActiveWorkBook来获得活动工作簿/工作簿。 因为你不能在你的wpf项目中使用Globals,所以你可以在post中find它的正确方法从UDF获取excel单元格地址 ,看看是否有帮助

  var worksheet = Globals.ThisAddin.Application.ActiveSheet worksheet.Name = "Export to Excel"; Excel.Range mycell = (Excel.Range)worksheet.get_Range("A1:B1","A1:B1"); int CountColumn = ds.Tables[0].Columns.Count; int CountRow = ds.Tables[0].Rows.Count; int col = 0; int row = 1; string data = null; int i = 0; int j = 0; for (col = 0; col < CountColumn; col++) { worksheet.Cells[row, col + 1] = ds.Tables[0].Columns[col].ColumnName.ToString(); } 

根据定义,当您使用Excel加载项时,Excel已经打开,因此尝试启动新实例毫无意义。 正如Brijesh提到的那样,Excel加载项可以使用Globals.ThisAddin.Application访问当前的Excel实例,然后从那里访问整个对象模型。

顺便说一句,它看起来像你正在写入你的数据到工作表逐一迭代。 如果你有很多的数据,这是一个坏主意,你应该能够一次写入。