2016-11-09 1 views
1

Ich habe eine einfache Anwendung. Meine Anwendung lädt eine CSV, einige Daten ändern und exportiert zu Excel.C# Windows Forms nach Excel exportieren

Application

Wenn ich auf "Exportar ..." exportiert. Der Code folgt.

private void cmdExport_Click(object sender, EventArgs e) 
    { 
     cmdExport.Enabled = false; 
     cmdSelecionar.Enabled = false; 

     //Copy DataGridView to clipboard 
     dgvMain.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText; 
     dgvMain.MultiSelect = true; 
     dgvMain.SelectAll(); 

     DataObject dataObj = dgvMain.GetClipboardContent(); 
     if (dataObj != null) 
      Clipboard.SetDataObject(dataObj); 

     //Open an excel instance and paste the copied data 
     Excel.Application xlexcel; 
     Excel.Workbook xlWorkBook; 
     Excel.Worksheet xlWorkSheet; 
     object misValue = System.Reflection.Missing.Value; 
     xlexcel = new Excel.Application(); 
     xlexcel.Visible = true; 
     xlWorkBook = xlexcel.Workbooks.Add(misValue); 
     xlWorkSheet = (Excel.Worksheet)xlWorkBook.Worksheets.get_Item(1); 
     Excel.Range CR = (Excel.Range)xlWorkSheet.Cells[1, 1]; 
     CR.Select(); 
     xlWorkSheet.PasteSpecial(CR, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, true); 

     cmdSelecionar.Enabled = true; 
    } 

Problem: Wenn ich exportieren, fügt es eine leere Spalte in der Anfang, die Spalte "A". Warum das passiert? Was ist falsch an meinem Code?

Die Excel-Druck folgt:

Excel exported

Antwort

2

Sie haben Zeilenköpfe auf Ihrem Datagridview, können Sie es in Ihrem Bild als die hellblaue Spalte mit dem > Pfeil markiert sehen kann an der Spitze.

Wenn Sie sie nicht benötigen, können Sie sie deaktivieren mit dgvMain.RowHeadersVisible = false;

Alternativ können Sie die erste Spalte nach dem Einfügen löschen:

Excel.Range range = (Excel.Range)xlWorkSheet.get_Range("A1", Missing.Value); 
range.EntireColumn.Delete(Missing.Value); 
+0

dgvMain.RowHeadersVisible = false; Problem gelöst. Danke @Equalsk –

0

Sie sind aus der Zwischenablage einfügen und das ist gut, aber ich vermuten, dass Ihre Daten in der Zwischenablage eine leere Spalte enthalten.

0

Können Sie, wenn die folgenden Werke überprüfen:

Excel.Range CR = (Excel.Range)xlWorkSheet.Cells[A1, 1]; 
Excel.Range CR = (Excel.Range)xlWorkSheet.Cells[0, 1];