2016-08-04 18 views
0

Guten NachmittagNach unten verschieben Zellen, weil die Daten überschrieben wurden in Excel schreiben

Ich habe eine Excel-Datei das ist, was es aussieht.

enter image description here

und ich habe ein VB.Net Programm, das wie folgt aussieht.

enter image description here

nun nach dem Print Transmittal Form die Daten von Datagridview klicken, wird der Excel-Format übertragen in die ich erstellt, aber Theres etwas falsch, und hier ist der Ausgang.

enter image description here

Die Daten überschreiben diesen Teil.

enter image description here

Wie ich das verhindern kann? Anstatt die Zellen zu überschreiben, bewegt sich der überschriebene Teil nach unten, basierend auf der Anzahl der Daten in der Datagrid-Ansicht.

Hier ist mein Code.

If DataGridView1.Rows.Count = 0 Then 
      MsgBox("Nothing to Export") 
     Else 
      Dim ExcelApp As Object, ExcelBook As Object 
      Dim ExcelSheet As Object 
      Dim rowIndex As Integer = 1 
      Dim total As Double = 0 

      ExcelApp = CreateObject("Excel.Application") 
      ExcelBook = ExcelApp.Workbooks.Open("c:\SR Transmittal.xlsx") 
      ExcelSheet = ExcelBook.WorkSheets("Transmittal Form") 
      rowIndex += 11 
      With ExcelSheet 
       For i As Integer = 0 To DataGridView1.Rows.Count - 1 
        Dim columnIndex As Integer = 0 
        Do Until columnIndex 
         ExcelSheet.Cells(i + 12, columnIndex + 2).Value = DataGridView1.Item("ItemCode", i).Value.ToString 
         ExcelSheet.Cells(i + 12, columnIndex + 3).Value = DataGridView1.Item("Description", i).Value.ToString 
         ExcelSheet.Cells(i + 12, columnIndex + 4).Value = DataGridView1.Item("RequestedQty", i).Value.ToString 
         ExcelSheet.Cells(i + 12, columnIndex + 5).Value = DataGridView1.Item("UOM", i).Value.ToString 
         ExcelSheet.Cells(i + 12, columnIndex + 6).Value = DataGridView1.Item("UnitPrice", i).Value.ToString 
         ExcelSheet.Cells(i + 12, columnIndex + 7).Value = DataGridView1.Item("Total", i).Value.ToString 
         ExcelSheet.Cells(i + 12, columnIndex + 8).Value = DataGridView1.Item("Remarks", i).Value.ToString 
         .cells(i + 12, columnIndex + 4).NumberFormat = "#,##0.00" 
         .cells(i + 12, columnIndex + 6).NumberFormat = "#,##0.00" 
         .cells(i + 12, columnIndex + 7).NumberFormat = "#,##0.00" 
         columnIndex += rowIndex 
         .Columns("A:Z").EntireColumn.AutoFit() 
         .Columns("A:Z").EntireColumn.Font.Size = 9 
        Loop 

       Next 

      End With 
      ExcelApp.Visible = True 
      ExcelSheet = Nothing 
      ExcelBook = Nothing 
      ExcelApp = Nothing 
     End If 

TYSM Hilfe

Antwort

0

arbeitete Kürzlich auf etwas ähnliches, ich erreichte es durch eine neue Zeile vor Einsetzen mit Daten poplulating. Für Sie wäre es etwa so aussehen:

For i As Integer = 0 To DataGridView1.Rows.Count - 1 
    oSheet.Range(oSheet.Cells(i + 12, 2), oSheet.Cells(i + 12, 8)).Insert(Shift:=Excel.XlDirection.xlDown) 
    '... add row data 

Auch FWIW, ist die Verwendung von columnIndex und seine Do Until völlig überflüssig? Die Schleife wird immer nur einmal ausgeführt (bevor 12 (rowIndex) hinzugefügt wurde?

+0

Darauf hingewiesen TY –

+0

@NyxAssasin Gern geschehen! Funktioniert der vorgeschlagene Code? Wenn ja, würde ich die Antwort zu schätzen wissen als richtig markiert – idodev

+0

Sorry, ich habe es vergessen Ich hoffe, wir sehen uns wieder, als ich ein Problem in Excel hatte, denn das ist eines meiner Probleme heute TYSM –