2010-09-03 60 views
31

我必須在Excel中遍歷大約25張用於執行操作的表單。我是用vba做的,發現它非常慢,因此想知道我是否可以使用C#這將有助於我加快這一進程。我們可以用C#寫一個宏嗎?Excel

+0

我不認爲你可以直接在宏中使用C#。 您可以創建一個用C#編寫的AddIn來處理表單。 如果它加快速度,你的過程不能得到回答,直到你描述你在做什麼。 – Khh 2010-09-03 08:33:53

+0

@gizgok:嗨,請接受我的回答 – abatishchev 2017-09-03 02:57:04

回答

-1

你在做什麼操作?首先,你不需要事先編寫你自己的VBA代碼。您可以簡單地在工作簿中記錄一個宏並將其保存在C:\ Program Files \ Microsoft Office \ Office12 \ Xlstart中。 Excel將記錄一個宏並使其在您打開的所有工作表中可用。

您還可以在上述過程中調整自動生成的VBA代碼以適合您的需要。

就個人而言,我不認爲編寫一個C#插件來完成這項工作會加快任務。 VBA是專門用於處理Office對象模型的語言。如果這樣做不夠快,那麼你需要看看你正在執行什麼操作?

我想創建一個C#加載項來操縱Excel對象模型並且維護它是太多了。這也將涉及一個很大的學習曲線。

+1

使用Excel _record宏_功能創建的宏往往**非常慢**,因爲它們發出大量不必要的_activate_和_select_命令。記錄一個短的宏以查看如何完成某些操作可能很有用,但是如果執行速度完全在意,則需要重寫記錄的宏。 – riderBill 2015-12-01 04:32:48

28

調用C#從Excel工作簿就像VBA宏 - 你不能

從C#應用程序訪問Excel工作簿 - 你可以。這就是所謂的Microsoft Visual Studio Tools for Office(VSTO

+40

說話像尤達 - 你做 – 2015-11-11 16:08:13

+0

這應該是公認的答案 – Arijoon 2016-04-19 14:09:54

+0

我會不同意。您可以通過宏調用(C#)Web服務。我認爲這同樣適用於用webapi編寫的寧靜端點... – cs0815 2017-10-28 07:28:53

7

儘管您可能能夠使用VSTO在C#中編寫與當前VBA宏相當的內容,但我對它是否會對性能產生顯着影響表示懷疑。

在這兩種情況下,您都會操縱相同的Excel COM對象,並且執行時間可能非常相似。

您的表現將主要取決於您用於操作Excel對象的技巧。作爲一個簡單的例子,您可以在單個語句中將Excel範圍中的值分配給2維數組:這比迭代代碼中的行和列並將值逐個複製到數組中要快得多。

我建議你發佈一些你覺得太慢的VBA代碼,並要求提高性能的提示。

4

您可以嘗試使用我的ESharper加載項在C#中編寫Excel自動化命令。這比創建單獨的C#應用​​程序或加載項更容易,並且您可以訪問Excel對象模型和Excel C API,並提供更多性能優化選項。

相關問題