2012-06-24 179 views
1

我使用EPPLUS庫來讀取Excel中的數據創建另一個文件。不幸的是,它不支持.XLSM擴展文件。有沒有一種很好的方法將.XLSM文件轉換爲.XLSX文件,以便用EPPLUS讀取文件?轉換XLSM到XLSX

(使用EPPLUS閱讀,因爲我所有的代碼是用吧:)已經寫好就好)

+0

看起來是不可能的(還):https://epplus.codeplex.com/discussions/282220 – SeanC

+0

澄清,不是問我是否可以使用EPPlus讀取文件。詢問是否有任何方法/ API的/其他的東西我可以用它來轉換一個XLSM文件,XLSX,這樣我可以把它用EPPlus – user1167650

回答

7

爲了做到這一點,你需要使用Open XML SDK 2.0。下面是爲我工作,當我嘗試它的代碼片段:

byte[] byteArray = File.ReadAllBytes("C:\\temp\\test.xlsm"); 
using (MemoryStream stream = new MemoryStream()) 
{ 
    stream.Write(byteArray, 0, (int)byteArray.Length); 
    using (SpreadsheetDocument spreadsheetDoc = SpreadsheetDocument.Open(stream, true)) 
    { 
     // Change from template type to workbook type 
     spreadsheetDoc.ChangeDocumentType(SpreadsheetDocumentType.Workbook); 
    } 
    File.WriteAllBytes("C:\\temp\\test.xlsx", stream.ToArray()); 
} 

這段代碼的作用是它需要您的宏工作簿啓用文件並將其打開成SpreadsheetDocument對象。該類型此對象爲MacroEnabledWorkbook,但既然你想把它當作一個Workbook調用ChangeDocumentType方法將其從MacroEnabledWorkbook更改爲Workbook。這將起作用,因爲基礎XML在.xlsm和.xlsx文件之間是相同的。

+0

對不起讀,我知道這是一個老帖子,但我似乎無法得到這個工作。我能夠得到輸出文件(xlsx),但無法在Excel中打開文件。 「該文件是一個無宏文件,但包含啓用宏的內容。」 – sora0419

+0

我們如何使用相同的東西將xls轉換爲xlsm,我得到了一個錯誤「File corruption with corruption」。 – Razack

+0

我不認爲你可以因爲XLS是舊格式的辦公習慣用 – amurra