簡體   English   中英

使用C#VSTO的Excel程序

[英]Excel Program using C# VSTO

我創建了C#Excel Addin項目,在其中向excel中添加了一個User控件,並在User Control中放置了一個按鈕。 對於button,我編寫了用於從數據庫到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();
}

}

不知道為什么要在此處使用Excel Application對象(即應用程序),而不是在addin項目中必須使用Globals.ThisAddin.Application.ActiveSheet / Globals.ThisAddin.Application.ActiveWorkBook才能獲得活動工作表/工作簿。 如果您無法在wpf項目中訪問Globals,則可以在帖子中找到獲取它的正確方法。 從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實例,然后可以從那里訪問整個對象模型。

順便說一句,看起來您是通過逐個單元地迭代將數據寫入工作表的。 如果您有大量數據,這是一個壞主意,那么您應該能夠一次寫入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM