2010-12-10 5 views
7

Bonjour les gars Je crée un fichier Excel avec 3 feuilles de calcul dans le code suivant.Excel ajouter des données à WorksheetPart dans le code derrière

using (SpreadsheetDocument spreadSheet = SpreadsheetDocument.Create(path + @"\UrlReport.xlsx", SpreadsheetDocumentType.Workbook)) 
      { 
       // create the workbook 
       spreadSheet.AddWorkbookPart(); 
       spreadSheet.WorkbookPart.Workbook = new DocumentFormat.OpenXml.Spreadsheet.Workbook(); 

       // CREATE FIRST SHEET 
       WorksheetPart newWorksheetPart1 = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>(); 

       newWorksheetPart1.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet(); 

       // create sheet data 
       newWorksheetPart1.Worksheet.AppendChild(new DocumentFormat.OpenXml.Spreadsheet.SheetData()); 

       // save worksheet 
       newWorksheetPart1.Worksheet.Save(); 

       // create the worksheet to workbook relation 
       spreadSheet.WorkbookPart.Workbook.AppendChild(new DocumentFormat.OpenXml.Spreadsheet.Sheets()); 
       spreadSheet.WorkbookPart.Workbook.GetFirstChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>().AppendChild(new DocumentFormat.OpenXml.Spreadsheet.Sheet() 
       { 
        Id = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart1), 
        SheetId = 1, 
        Name = "Sheet1" 
       }); 

       //CREATE SECOND SHEET 
       WorksheetPart newWorksheetPart2 = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>(); 
       newWorksheetPart2.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet(); 

       // create sheet data 
       newWorksheetPart2.Worksheet.AppendChild(new DocumentFormat.OpenXml.Spreadsheet.SheetData()); 

       // save worksheet 
       newWorksheetPart2.Worksheet.Save(); 

       // create the worksheet to workbook relation 
       spreadSheet.WorkbookPart.Workbook.GetFirstChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>().AppendChild(new DocumentFormat.OpenXml.Spreadsheet.Sheet() 
       { 
        Id = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart2), 
        SheetId = 2, 
        Name = "Sheet2" 

       }); 

       //CREATE THIRD SHEET 
       WorksheetPart newWorksheetPart3 = spreadSheet.WorkbookPart.AddNewPart<WorksheetPart>(); 
       newWorksheetPart3.Worksheet = new DocumentFormat.OpenXml.Spreadsheet.Worksheet(); 

       // create sheet data 
       newWorksheetPart3.Worksheet.AppendChild(new DocumentFormat.OpenXml.Spreadsheet.SheetData()); 

       // save worksheet 
       newWorksheetPart3.Worksheet.Save(); 

       // create the worksheet to workbook relation 
       spreadSheet.WorkbookPart.Workbook.GetFirstChild<DocumentFormat.OpenXml.Spreadsheet.Sheets>().AppendChild(new DocumentFormat.OpenXml.Spreadsheet.Sheet() 
       { 
        Id = spreadSheet.WorkbookPart.GetIdOfPart(newWorksheetPart3), 
        SheetId = 3, 
        Name = "Sheet3" 
       }); 

       spreadSheet.WorkbookPart.Workbook.Save(); 
      } 

J'ai besoin de savoir comment je peux remplir les cellules des 3 fiches de données. Je dois juste ajouter des chaînes à certaines cellules qui vont probablement être dans un tableau datatable ou multidimensionnel.

Répondre

9
private static void InsertValuesInWorksheet(WorksheetPart worksheetPart, IEnumerable<string> values) 
{ 
    var worksheet = worksheetPart.Worksheet; 
    var sheetData = worksheet.GetFirstChild<SheetData>(); 
    var row = new Row { RowIndex = 1 }; // add a row at the top of spreadsheet 
    sheetData.Append(row); 

    int i = 0; 
    foreach (var value in values) 
    { 
     var cell = new Cell 
          { 
           CellValue = new CellValue(value), 
           DataType = new EnumValue<CellValues>(CellValues.String) 
          }; 

     row.InsertAt(cell, i); 
     i++; 
    } 
} 

Cette méthode ajoute une nouvelle ligne à une feuille de calcul spécifiée et remplit les cellules de la ligne avec les valeurs d'un tableau. Dans votre exemple de code, il pourrait s'appeler comme ceci:

var values = new[] {"foo", "bar", "baz"}; 

InsertValuesInWorksheet(newWorksheetPart1, values); 
InsertValuesInWorksheet(newWorksheetPart2, values); 
InsertValuesInWorksheet(newWorksheetPart3, values); 
Questions connexes