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());
}
2 回答
为此,您需要使用Open XML SDK 2.0 . 下面是我尝试时为我工作的一段代码:
这段代码的作用是启用宏启用的工作簿文件并将其打开到SpreadsheetDocument对象中 . 此对象的类型是
MacroEnabledWorkbook
,但由于您希望将其作为Workbook
,因此调用ChangeDocumentType
方法将其从MacroEnabledWorkbook
更改为Workbook
. 这将起作用,因为.xlsm和.xlsx文件之间的基础XML是相同的 .使用Open XML SDK,就像在amurra的答案中一样,但除了更改doc类型外,还应删除VbaDataPart和VbaProjectPart,否则Excel将显示文件已损坏的错误 .