Для этого вам потребуется использовать 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
объект. Тип этого объекта Template
, но так как вы хотите, чтобы он был Workbook
, вы вызываете метод ChangeDocumentType
, чтобы изменить его с Template
на Workbook
. Это будет работать, поскольку базовый XML-файл одинаков для файлов .xltx и .xlsx, и именно этот тип вызывает у вас проблему.