2015-06-11 35 views
1

我被要求去掉宏的Excel文件,只留下數據。我被要求通過將Excel文件轉換爲XML然後使用C#將該文件讀回到Excel來實現此目的。這對我來說似乎有點低效,我在考慮簡單地將源Excel文件加載到C#中,然後創建一個新的目標Excel文件並將源代碼片添加到目標文件中會更容易。使用C去除宏的Excel文件#

我不知道在哪裏宏住在一個Excel文件裏面,所以我不知道這是否會完成任務與否。那麼,這會工作嗎?只是簡單地將表單從一個文件複製到另一個文件去掉它的宏,還是實際存儲在工作表級別?

與往常一樣,歡迎任何和所有建議,包括備用建議,甚至「爲什麼你甚至在做這個???」。 :)

+0

我只會使用Excel Interop將文件保存爲.xlsx。複印工作表可能會丟失信息,如文件屬性。 – Joe

+0

你只需要刪除包含宏代碼的嵌入式VBA項目,[這個問題](http://stackoverflow.com/questions/2948878/how-to-delete-vb-code-from-an-excel-sheet -using-c)可能會讓你開始。 – stuartd

回答

1

最好的辦法是將工作簿保存爲XLSX,關閉它,打開它,然後保存爲您選擇的格式。

這將去除宏並且健壯。如果VBA被鎖定以供查看,它也可以工作。

關閉並重新打開工作簿是必要的,否則宏將被保留。

+0

這或多或少是我選擇的解決方案。但是,它實際上並不允許我將.xlsm保存爲.xlsx。我必須在將宏保存下來之前將其刪除,否則會給我一個錯誤。 – EDanaII

1

要做到這一點編程,可以在.NET中使用zip文件類從System.IO.Compression圖書館從C#。 (.NET框架4.5)

重命名文件,添加對「.zip」擴展名,然後打開該文件爲ZIP檔案。在結果「xl」文件夾中查找名爲「vbproject.bin」的元素,並將其刪除。刪除.zip擴展名。宏不見了。

0

如果你需要使用C#要做到這一點,我同意,這將是更容易地加載Excel文件到C#源,並創建一個新的目標文件只複製了你所需要的細胞和牀單。特別是如果你爲大量的excel文件做這個工作,我會建議創建一個小型的控制檯應用程序,當給出一個excel工作表時,它會自動生成一個新的excel工作表,只有你的數據。我發現非常有用的,易於使用此類任務

一個工具是EPPlus