當前位置:成語大全網 - 書法字典 - 如何用C#制作Excel插件

如何用C#制作Excel插件

AddIn翻譯成中文是插件,有時也稱為插件。我的理解是,根據程序開發者提供的接口,允許程序加載自定義代碼片段來完成某項功能。

這個需求源於壹個朋友的請求,他向我陳述了這個需求的原因。

我朋友工廠的質量部門每天需要測試大量的產品零件,並將測試數據制作成報告,這是QC測量員的日常工作。由於近期公司訂單和生產任務增加,測量員每天需要檢測大量產品零件,產生大量測量數據。QC調查員還需要將這些數據整理成指定格式的報告,並提交給團隊負責人進行審查。訂單的增加將導致QC調查員的工作量增加。他問我有沒有什麽方法可以減輕QC調查員的工作量,提高工作效率。

從他的描述中可以看出,有兩項任務是重復的:測量零件和制作報告。對於測量零件,我沒有辦法提高效率,除非規定只測試部分零件,而不是全部。在工廠規定必須進行所有測試的情況下,很難優化第壹道工序。對於第二個過程,將測量數據制作成報告。看來這壹步可以用來提高效率。因為指定了需要制作的報告的格式,所以只需要將測量結果數據導入到指定格式的報告中,就可以順利完成第二步。

該報告為EXCEL格式,每行和每列的布局都已確定。只需將指定的數據放在相應的列位置即可。畫

項目列是零件的名稱,平均值列是相應零件的測量數據。

測量機導出的零件數據格式支持常用的CSV、XML和TXT格式,導出的數據在EXCEL中是這樣的。

我選擇將測量數據導出為csv格式,這樣便於查看和分析。如果選擇XML格式,大多數數據員工無法理解它,並且不方便查看它。對於這種平面結構(相對於層次結構)的數據,導出為CSV是首選。

下壹步是分析如何快速將測量數據制作成報告。

大多數EXCEL用戶都熟悉公式,並且制作報表相當專業和快速。我先嘗試直接用公式求解。

這個要求用公式來描述,即在指定區域中查找值,然後將指定值返回到相應的數據列中。

EXCEL的VLOOKUP功能可以實現我的目標。以下解釋:公式VLOOKUP(C1,A:B,2,)的意思是從A列到B列查找c 1的數據,並顯示B列的相應數據。

但是有壹個問題,報告和測量數據分別放在兩個文件中,測量數據不允許放在報告所在的文件中。用戶需要先將測量數據添加到報表文件中,然後使用上述公式查找匹配值,完成後再刪除測量數據所在的工作表。如果要制作許多這樣的報表,用戶必須重復添加和刪除工作表。雖然可以解決問題,但有點不完善,用戶操作起來不方便。這個方案可以解決問題,但並不完美。

試著用VBA的方法,網上有很多關於VBA的信息。VBA相當於程序的方式。我的想法是先讀取測量數據文件,將其放在類似字典的結構中,然後循環讀取報表中需要數據的部分,取出其對應的測量數據並將其分配給對應的單元格。我沒有研究過VBA,也不知道如何開始。我在網上用關鍵詞“如何閱讀VBA的壹份文件”搜索了很長時間,但我找不到相關內容。這個方案不會通過編程實現,所以我不得不放棄。

考慮使用VSTO。默認情況下,VS 2005/2008將安裝此組件,這相當於VBA的托管版本。而且VSTO支持C#語言,可以用最熟悉的技術解決這個問題。在C#中,讀取文件相當容易,StreamReader可以解決讀取文件的問題。

打開VS2008並創建壹個新的Excel 2003工作簿項目。

向導將創建具有以下主體代碼的類。

公共分部類ThisAddIn

{

private void ThisAddIn_Startup(對象發送方,系統。EventArgs e){ }

private void ThisAddIn_Shutdown(對象發送方,系統。EventArgs e){ }

}

如果妳不明白,妳可以猜壹猜。根據名稱,您可以猜測啟動和關閉是在插件加載和關閉時執行的事件。

在ThisAddIn_Startup中,加載接口。

您可以添加菜單或工具按鈕。添加菜單的效果如下

具體代碼編寫如下

private void ThisAddIn_Startup(對象發送方,系統。e)事件

{

#區域VSTO生成的代碼

這個。應用程序=(Excel。應用程序)微軟。office . tools . excel . excel locale 1033 proxy。換行(類型為(Excel。應用),這個。申請);

#結束區域

這個。AddMenu();

}

辦公室。commandbarcontrolmenutop;

辦公室。CommandBarControl menuCreateMail = null;

私有void AddMenu()

{

辦公室。CommandBar bar = this。application . command bars . activemenubar;

梅努托普。Caption =“胡藝工具公司“;

辦公室。CommandBarPopup commandBarPopupTmp = menu top。像辦公室壹樣控制。CommandBarPopup

菜單創建郵件。Caption =“導入數據“;

辦公室。CommandBarButton button menu = menu create mail as Office。CommandBarButton

按鈕菜單。Click+= new Microsoft . office . core . _ CommandBarButtonEvents _ Click eventhandler(button menu _ Click);

}

這裏有壹個竅門。如果在AddMenu方法中定義了menuTop或menuCreateMail,將導致在EXCEL打開後多次單擊按鈕事件,並且該事件只會執行壹次。除非您重新啟動EXCEL。

點擊菜單“導入數據”的事件代碼如下

void button menu _ Click(Microsoft。office . core . commandbarbutton Ctrl,ref bool CancelDefault)

{

//分析CSV文件並設置指定報告列的值。

}

代碼更長。第壹個是彈出對話框,您可以在其中選擇包含要導入、分析和導入值的測量數據的文件。

導入值的代碼涉及操作EXCEL。代碼如下所示

Excel。工作表sheet =(Excel。工作表)應用程序。ActiveWorkbook . ActiveSheet

int rowIndex = 10;int maxIndex = 300

for(rowIndex = 10;rowIndex & ltmaxIndexrowIndex++)

{

Excel。Range source = sheet . get _ Range(“A“+rowIndex,“A“+rowIndex);

Excel。Range target = sheet . get _ Range(“F“+rowIndex,“F“+rowIndex);

if(字符串。IsNullOrEmpty(來源。Value2.ToString())

繼續;

其他

{

string hashkey = source。value 2 . ToString();

如果(表。包含(hashkey))

目標。Value2 =表【hashkey】。ToString();

}

}

表的類型是Hashtable,它以零件名稱作為鍵名,以零件的測量數據作為值。

讀取文件的代碼也有點棘手。我的機器是XP SP2英文版,EXCEL是2003英文標準版。如果您使用COM Interop API讀取數據文件並將數據文件作為EXCEL文件讀取,通常會出現亂碼。如果您將數據文件作為文本文件讀取,則沒有問題。我壹直沒能找到這個問題的原因。

讓我們談談如何部署這個插件。以下步驟是必需的,您必須是管理員才能執行以下步驟。

1安裝。目標計算機上的。Net Framework 2.0。

2安裝Office 2007 PIAs

3安裝VSTO運行時2.0:

請確保EXCEL 2003已安裝了SP2補丁,否則請安裝SP2補丁。

5編譯並安裝項目,並執行它以完成插件的安裝。

6轉到安裝插件的目錄,執行命令行工具,設置程序集的權限(程序集名稱為QCExcelAddIn)。

caspol-machine–addfulltrust QCExcelAddIn.dll

完成這些步驟後,打開EXCEL,您應該能夠看到插件的菜單。如果您仍然看不到菜單,請查看EXCEL是否禁用了該插件。在DisalbeItems中激活插件。

至此,這個問題已經圓滿解決。使用壹段時間後,測量員要求修改測量數據的文件格式。

分析這種格式的代碼相對簡單,只需要通過正則公式直接對字符串進行分解。但是上面版本的格式也需要判斷是奇數行還是偶數行。奇數行顯示器件名稱,偶數行讀取測量數據。

關於這個插件的註冊信息,在註冊表中有相應的鍵值對。

插件所在的註冊表項的路徑是

也許這種方法也不是最佳方法。歡迎提供您的想法供您參考。