2016-05-22 122 views
2

OpenXML(2.5)を使用してカスタマイズしたスプレッドシートを作成しています。私が使用しているVMでは、OpenXMLスプレッドシートがうまく機能しているOpen Officeしかありません(カスタム書式など)。ただし、Microsoft Officeを搭載したコンピュータにファイルを移動すると、破損したデータが原因でファイルの各バージョンが開けませんでした。私はすべてのカスタマイズを取り出して、まだ(Open Officeで働いていた)壊れた結果を残していました。OpenXML Excelで破損しているスプレッドシート

これは、Open Officeで動作するが、Excelでは破損していると思われる、裸のスプレッドシートファイルのコードです。

public string CreateGrid() 
{ 
    var path = Path.GetTempFileName(); 
    var document = SpreadsheetDocument.Create(path, SpreadsheetDocumentType.Workbook); 
    var workbookpart = document.AddWorkbookPart(); 

    workbookpart.Workbook.Save(); 
    document.Close(); 
    return path; 
} 

エラーは「テキストコンテンツに無効な文字が見つかりました」です。 行:1 カラム:1 ファイルオフセット:0 コードでわかるように、私はまだテキストを追加していませんが、私はかなり違法な文字ではないことを確信しています。どんな助けでも大歓迎です。

+0

問題を再現するXLSXファイルをどこかにアップロードできますか?私はそれを見て、どのような問題があるのか​​を教えてくれるでしょう。 –

+0

私は元の問題と、それが単なるワークブックのときに失敗した理由を理解することができました。 Excelは、すべての要素がそこに存在することを期待しています(ブック、ワークシート、およびコンテンツ)。ワークブックしかない場合は、チェックに失敗します。私が持っていたオリジナルの問題は、各繰り返しで新しい行を作成していないということでした。基本的には、その内部に複数の行を持つ単一の行を作成していました。 Noobの間違いは、-_-の一部になる可能性があります。 – Thecor

答えて

2

私は問題を見つけ出すことができました。まず、上記のコードで、ExcelはOpenXMLを使用するときに完全にフォーマットされたファイルを必要とします。つまり、ワークブックを含むファイルでは不十分であるだけでなく、ワークブック、ワークシート、少なくとも1枚のシートが適切に開かれていなければなりません。私が持っていたもう一つの問題(Excelでデータが表示されない場所)は、行を横切っているときに毎回新しい行を作成していなかったためです。私がいた同じことをしようとする人にとって、コードは次のようになります。

foreach (var temp in tempList) 
{ 
    if (cellIdex == 12) 
    { 
     cellIdex = 0; 
     rowIdex = rowIdex + 1; 
     row = new Row { RowIndex = rowIdex }; 
     sheetData.AppendChild(row); 
    } 
    cell = CreateTextCell(ColumnLetter(cellIdex), rowIdex, tempToString(), 3); 
    row.AppendChild(cell); 
    cellIdex = cellIdex + 1; 
} 

最も重要な部分であることに注意して、「行=新しい行が{rowIndexに= rowIdex};」。シンプルに思えるかもしれませんが、頭痛の原因になります。

関連する問題