Open XML SDK - Сохраните файл шаблона (.xltx в .xlsx) - PullRequest
5 голосов
/ 30 сентября 2010

У меня есть следующий код, чтобы открыть файл шаблона Excel и сохранить его как файл .xlsx, и я получаю сообщение об ошибке ниже, когда пытаюсь открыть новый файл. Пожалуйста, помогите решить эту проблему.

Excel не может открыть файл "sa123.xlsx", поскольку формат файла или расширение недопустимо. Убедитесь, что файл не был поврежден и что расширение файла соответствует формату файла.

        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());    
        }

Ответы [ 2 ]

7 голосов
/ 01 октября 2010

Для этого вам потребуется использовать 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, и именно этот тип вызывает у вас проблему.

1 голос
/ 30 сентября 2010

Excel видит расширение .xlsx и пытается открыть его в виде файла листа.Но это не так.Это файл шаблона.Если у вас открыт шаблон в Excel и сохранен как файл .xlsx, он преобразует его в формат листа.То, что вы делаете, это то же самое, что смена расширения в имени файла.Попробуйте в Windows Explorer, и вы получите тот же результат.

Я полагаю, что вы сможете достичь желаемого с помощью объектной модели Excel .Я не использовал это все же.

...