2010-11-30 4 views
4

私はこのチュートリアルは、次のとおりです。Excelドキュメントを開き、最終的な結果はメッセージである空のワークシートを挿入するために挿入ワークシートオープンXMLと - 「...読めないコンテンツ...」

http://msdn.microsoft.com/en-us/library/cc881781.aspx

を「Excelが読めないコンテンツを見つけました...このブックの内容を回復しますか?」と伝えます。挿入したシートがすべて空白になっている場合(プログラムでコンテンツを追加した場合でも)

xlsxの名前を.zipに変更してから、ワークシートが作成され、コンテンツが追加されたことを確認します。

誰でも同様の問題がありますか?それは

+1

サンプルC#をチュートリアルの下からコピーしてくれました。コードを投稿できますか? –

答えて

7

というエラーメッセージがあなたのExcel文書を構成するXMLは、XMLスキーマに準拠し、無効であるされていないことを意味...新しく作成された部品間の関係を作成しないで何かかもしれません。 Open XML SDK 2.0 Productivity Toolを使用すると、問題の場所を確認できます。

私はまた、あなたのリンクの下からコードをコピーして、クリスは彼のコメントで言ったようにそれが動作するようになりました。あなたのコードは以下のようになりますか?

// Open the document for editing. 
using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true)) 
{ 
    // Add a blank WorksheetPart. 
    WorksheetPart newWorksheetPart = 
     spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>(); 
    newWorksheetPart.Worksheet = new Worksheet(new SheetData()); 

    Sheets sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>(); 
    string relationshipId = 
     spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart); 
    // Get a unique ID for the new worksheet. 
    uint sheetId = 1; 
    if (sheets.Elements<Sheet>().Count() > 0) 
    { 
     sheetId = 
     sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1; 
    } 

    // Give the new worksheet a name. 
    string sheetName = "Sheet" + sheetId; 

    // Append the new worksheet and associate it with the workbook. 
    Sheet sheet = new Sheet() 
    { Id = relationshipId, SheetId = sheetId, Name = sheetName }; 
    sheets.Append(sheet); 

    string docName = @"C:\Users\Public\Documents\Sheet7.xlsx"; 
    InsertWorksheet(docName); 
} 

// Given a document name, inserts a new worksheet. 
public static void InsertWorksheet(string docName) 
{ 
    // Open the document for editing. 
    using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Open(docName, true)) 
    { 
     // Add a blank WorksheetPart. 
     WorksheetPart newWorksheetPart = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>(); 
     newWorksheetPart.Worksheet = new Worksheet(new SheetData()); 

     Sheets sheets = spreadSheet.WorkbookPart.Workbook.GetFirstChild<Sheets>(); 
     string relationshipId = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart); 

     // Get a unique ID for the new worksheet. 
     uint sheetId = 1; 
     if (sheets.Elements<Sheet>().Count() > 0) 
     { 
      sheetId = sheets.Elements<Sheet>().Select(s => s.SheetId.Value).Max() + 1; 
     } 

     // Give the new worksheet a name. 
     string sheetName = "Sheet" + sheetId; 

     // Append the new worksheet and associate it with the workbook. 
     Sheet sheet = new Sheet() { Id = relationshipId, SheetId = sheetId, Name = sheetName }; 
     sheets.Append(sheet); 
    } 
} 
+1

はい、ありがとうございます。コード全体を最初から作り直しました。私の例はもう少し複雑で、forループでシートを作成しました。問題は、新しく作成されたシートに同じ変数を使用していて、不適切なリレーションシップIDのためにすべてが壊れてしまったようです。 – Gomiunik

関連する問題