2017-06-15 22 views
0

Open XMLを使用してファイルを作成しようとしていますが、ヘッダーの最初の行を追加しようとするとファイルが壊れていて、開くことができません。ここで間違っていますか?オープンXMLを使用してExcelファイルを作成する

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create("C:\\testpdfs\\mytest.xlsx", SpreadsheetDocumentType.Workbook)) 
      { 
       // Add a WorkbookPart to the document. 
       WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); 
       workbookpart.Workbook = new Workbook(); 

       // Add a WorksheetPart to the WorkbookPart. 
       WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>(); 
       worksheetPart.Worksheet = new Worksheet(new SheetData()); 

       // Add Sheets to the Workbook. 
       Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook. 
        AppendChild<Sheets>(new Sheets()); 

       // Append a new worksheet and associate it with the workbook. 
       Sheet sheet = new Sheet() 
       { 
        Id = spreadsheetDocument.WorkbookPart. 
        GetIdOfPart(worksheetPart), 
        SheetId = 1, 
        Name = ViewBag.Title 
       }; 

       Row row = new Row() { RowIndex = 1 }; 
       Cell header1 = new Cell() { CellReference = "A1", CellValue = new CellValue("Interval Period Timestamp") }; 
       row.Append(header1); 
       Cell header2 = new Cell() { CellReference = "A2", CellValue = new CellValue("Settlement Interval") }; 
       row.Append(header2); 
       Cell header3 = new Cell() { CellReference = "A3", CellValue = new CellValue("Aggregated Consumption Factor") }; 
       row.Append(header3); 
       Cell header4 = new Cell() { CellReference = "A4", CellValue = new CellValue("Loss Adjusted Aggregated Consumption") }; 
       row.Append(header4); 


       sheet.Append(row); 

       sheets.Append(sheet); 


       //sheet.Append(row); 


       workbookpart.Workbook.Save(); 

       // Close the document. 
       spreadsheetDocument.Close(); 
       return View(); 

      } 

答えて

2

ここにはいくつか問題があります。

まず、をSheetに追加しますが、SheetDataに追加する必要があります。これを行う最も簡単な方法は、我々はそれを後で使用できるようにSheetDataオブジェクトへの参照を維持することです:データ型がない場合

SheetData sheetData = new SheetData(); 
worksheetPart.Worksheet = new Worksheet(sheetData); 
... 
sheetData.Append(row); 

は第二に、あなたは明示的にデフォルトので、各セルにデータ型を与える必要があります指定された番号:

Cell header1 = new Cell() { CellReference = "A1", CellValue = new CellValue("Interval Period Timestamp"), DataType = CellValues.String }; 

最後に、あなたのセル参照は正しくありません。すべてを1行に追加しますが、行1〜4(A1〜A4)の参照を追加します。私の推測では、セルA1〜D1の値が実際には、CellReferenceの値を更新する必要があると思っています。実際にA1-A4に値が必要な場合は、各セルを新しい行に追加する必要があります。

リスト完全なコードは、(あなたはセルA1-D1をしたいと仮定)は、次のとおりです。

using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Create("C:\\testpdfs\\mytest.xlsx", SpreadsheetDocumentType.Workbook)) 
{ 
    // Add a WorkbookPart to the document. 
    WorkbookPart workbookpart = spreadsheetDocument.AddWorkbookPart(); 
    workbookpart.Workbook = new Workbook(); 

    // Add a WorksheetPart to the WorkbookPart. 
    WorksheetPart worksheetPart = workbookpart.AddNewPart<WorksheetPart>(); 
    SheetData sheetData = new SheetData(); 
    worksheetPart.Worksheet = new Worksheet(sheetData); 

    // Add Sheets to the Workbook. 
    Sheets sheets = spreadsheetDocument.WorkbookPart.Workbook. 
     AppendChild<Sheets>(new Sheets()); 

    // Append a new worksheet and associate it with the workbook. 
    Sheet sheet = new Sheet() 
    { 
     Id = spreadsheetDocument.WorkbookPart. 
     GetIdOfPart(worksheetPart), 
     SheetId = 1, 
     Name = ViewBag.Title 
    }; 

    Row row = new Row() { RowIndex = 1 }; 
    Cell header1 = new Cell() { CellReference = "A1", CellValue = new CellValue("Interval Period Timestamp"), DataType = CellValues.String }; 
    row.Append(header1); 
    Cell header2 = new Cell() { CellReference = "B1", CellValue = new CellValue("Settlement Interval"), DataType = CellValues.String }; 
    row.Append(header2); 
    Cell header3 = new Cell() { CellReference = "C1", CellValue = new CellValue("Aggregated Consumption Factor"), DataType = CellValues.String }; 
    row.Append(header3); 
    Cell header4 = new Cell() { CellReference = "D1", CellValue = new CellValue("Loss Adjusted Aggregated Consumption"), DataType = CellValues.String }; 
    row.Append(header4); 

    sheetData.Append(row); 

    sheets.Append(sheet); 

    workbookpart.Workbook.Save(); 

    // Close the document. 
    spreadsheetDocument.Close(); 
    return View(); 

} 
関連する問題