1

我创建了 C# Excel Addin 项目,在该项目中,我向该 excel 添加了一个 User 控件,并在 User Control 中放置了一个按钮。对于按钮,我为将数据从数据库获取到 Excel 单元格(sheet1)而编写的代码。但是这里遇到的问题是,当我单击按钮时,会打开一个新的 Excel 工作表(应用程序),并将数据从数据库填充到新的 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();
}

}
4

2 回答 2

1

不知道为什么你在这里使用 Excel 应用程序对象,即应用程序,而不是在插件项目中,你必须使用 Globals.ThisAddin.Application.ActiveSheet/ Globals.ThisAddin.Application.ActiveWorkBook 来获取活动工作表/工作簿。如果您在 wpf 项目中无权访问 Globals,则可以在 post Get the excel cell address from a UDF中找到正确的获取方法,看看这是否有帮助

  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(); 
        } 
于 2012-04-28T06:08:20.287 回答
0

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

顺便说一句,您似乎正在通过逐个单元格地迭代将数据写入工作表。如果您有大量数据,这是一个坏主意,您应该能够一次编写它。

于 2012-04-28T16:34:24.977 回答