2013-11-27 1 views
3

Я попытался прочитать существующий файл excel и скопировать на другой путь, а затем попытался вставить данные в файл, который я клонировал. Но я могу «вставить данные». Я не знаю, где я ошибся. Но здесь я дал свой код.Добавление данных в существующее excel с использованием открытого xml sdk 2.5

Ошибка произошла в строке sheetData.InsertAt<Row>(row,++rowIndex);. Пожалуйста, помогите мне.

Package spreadsheetPackage = Package.Open(destinationFile, FileMode.Open, FileAccess.ReadWrite); 

       using (var document = SpreadsheetDocument.Open(spreadsheetPackage)) 
       { 
        foreach (System.Data.DataTable table in ds.Tables) 
        { 

var workbookPart = document.WorkbookPart; 
          var workbook = workbookPart.Workbook; 

          var sheet = workbookPart.Workbook.Descendants<Sheet>().FirstOrDefault(); 
          Worksheet ws = ((WorksheetPart)(workbookPart.GetPartById(sheet.Id))).Worksheet; 


          SheetData sheetData = ws.GetFirstChild<SheetData>(); 


          //Sheet sheet = sheets.FirstOrDefault(); 

          if(sheet==null) 
           throw new Exception("No sheed found in the template file. Please add the sheet"); 

          int rowIndex = 10, colIndex = 0; 
          bool flag = false; 

          var worksheetPart = (WorksheetPart)workbookPart.GetPartById(sheet.Id); 
          var sharedStringPart = workbookPart.SharedStringTablePart; 
          var values = sharedStringPart.SharedStringTable.Elements<SharedStringItem>().ToArray(); 
          var rows = worksheetPart.Worksheet.Descendants<Row>(); 

          List<String> columns = new List<string>(); 
          foreach (System.Data.DataColumn column in table.Columns) 
          { 
           columns.Add(column.ColumnName); 
          } 

          foreach (System.Data.DataRow dsrow in table.Rows) 
          { 
           Row row = new Row(); 
           foreach (String col in columns) 
           { 
            DocumentFormat.OpenXml.Spreadsheet.Cell cell = new Cell(); 
            cell.DataType = DocumentFormat.OpenXml.Spreadsheet.CellValues.String; 
            cell.CellValue = new DocumentFormat.OpenXml.Spreadsheet.CellValue(dsrow[col].ToString()); 
            row.AppendChild<Cell>(cell); 
           } 

           sheetData.InsertAt<Row>(row,++rowIndex); 
          } 

} 
+0

См http://stackoverflow.com/questions/6072456/using-openxml-to-insert -a-DataTable-в-первенствуйте – BgRva

ответ

2

Перед тем, как добавить строку, следует упомянутый индекс строки к примеру ...

row.RowIndex = (UInt32)rowIndex++; 
+0

Я сделал это '++ RowIndex;' ' row.RowIndex = (UInt32) RowIndex;' ' sheetData.InsertAt (строка, RowIndex-1);' – Dilip