5

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

2 に答える 2

8

これを行うには、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 ファイルの間で同じであり、問​​題を引き起こしたのはそのタイプだけだったので、これは機能します。

于 2010-10-01T02:45:03.553 に答える
1

Excelは.xlsx拡張子を認識し、ワークシートファイルとして開こうとします。しかし、そうではありません。テンプレートファイルです。テンプレートをExcelで開いて、それを.xlsxファイルとして保存すると、ワークシート形式に変換されます。あなたがしていることは、ファイル名の拡張子を変更することと同じです。Windowsエクスプローラーで試してみると、同じ結果が得られます。

Excelオブジェクトモデルを使用することで、あなたが望むことを達成できるはずだと思います。私はこれを使ったことがありません。

于 2010-09-30T18:09:21.060 に答える