2009-02-10 79 views
0

我們目前有一個包含大量VBA代碼的Excel電子表格。 VBA代碼負責:遷移到VSTO/Excel Interop選項

  • 操縱,轉換和格式化工作表數據。
  • 調用C#和C++ COM公開的功能。在將表單數據編組到C#/ C++方法中,獲取結果並使用結果更新工作表。

根據需要以及其他實用程序代碼。

我們現在想要添加一個新工作表到我們的Excel工作簿,我們不想要任何VBA。我們想要使用C#。正如我所看到的,我僅限於以下選項:

  • 將整個項目移植到VSTO,將VBA手動重新編碼爲VSTO項目中的C#。
  • 用C#編寫新工作表的功能,並通過COM公開它。 C#代碼將使用Excel PIA來更新工作表。該表需要一層非常薄的VBA來將數據編組到C#方法。

我不認爲ManagedXLL會幫助我,因爲我的代碼要求與處理表單數據一樣多,因爲它們是關於使用結果更新表單的。

請評論/要求任何更多的細節。

謝謝。

回答

1

你忘了:

  • 端口整個項目VSTO,移植現有的代碼VB.Net(其中一些將剛纔複製/粘貼),並在C#編寫新的代碼。
  • 將新工作表放在一個單獨的工作簿中,並作爲數據源調用舊工作簿。
0

看,如果你想聽我的意見......在發展方面,可能需要更長的時間,但... 您是否使用VB.Net或C#採取這種做法..

  1. 做一個像轉換一樣。對於不重要的VBA數量,這將有助於您理解邏輯和數據解析的有時令人費解的方法。

  2. 通過單元迭代更改單元格的所有實例,並循環讀取一次一次寫入單頁類型的方法。這將涉及重新編寫代碼的各個部分。在方法開始時讀取所有道具和值,並在最後寫出所有想要回退的道具和值。

  3. 確保所有的數據和邏輯處理都是在.net中使用.net數據類型完成的,不要直接在循環內使用範圍對象或工作表對象屬性,它只是昂貴的方法。

  4. 終於確保如果你使用多個線程你在主線程上做了所有的「Excel東西」。

  5. 閱讀SO以獲取正確處理COM對象的大量技巧。謹防錯誤的處理模式。