2012-06-24 98 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