Open XML SDK – 保存模板文件(.xltx为.xlsx)

我有以下代码来打开Excel模板文件并将其保存为.xlsx文件,当我尝试打开新文件时,我得到下面的错误。 请帮忙解决这个问题。

Excel无法打开文件“sa123.xlsx”,因为文件格式或扩展名无效。 validation该文件是否已损坏,文件扩展名是否与该文件的格式匹配。

string templateName = "C:\\temp\\sa123.xltx"; byte[] docAsArray = File.ReadAllBytes(templateName); using (MemoryStream stream = new MemoryStream()) { stream.Write(docAsArray, 0, docAsArray.Length); // THIS performs doc copy File.WriteAllBytes("C:\\temp\\sa123.xlsx", stream.ToArray()); } 

为了做到这一点,你需要使用Open XML SDK 2.0 。 下面是我尝试使用的代码片段:

 byte[] byteArray = File.ReadAllBytes("C:\\temp\\sa123.xltx"); 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\\sa123.xlsx", stream.ToArray()); } 

这段代码做的是把你的模板文件打开到SpreadsheetDocument对象中。 这个对象的types是Template ,但是既然你想把它作为一个Workbook你可以调用ChangeDocumentType方法把它从一个Template改成一个Workbook 。 这将起作用,因为基础XML在.xltx和.xlsx文件之间是相同的,而这正是导致您遇到问题的types。

Excel会看到.xlsx扩展名并尝试将其作为工作表文件打开。 但事实并非如此。 这是一个模板文件。 在Excel中打开模板并将其保存为.xlsx文件时,会将其转换为工作表格式。 你在做什么和改变文件名中的扩展名一样。 在Windows资源pipe理器中尝试它,你会得到相同的结果。

我相信你应该能够通过使用Excel对象模型来完成你想要的。 我没有用过这个。