2016-11-09 83 views
1

我有一個簡單的應用程序。 我的應用程序加載一個csv,修改一些數據並導出到excel。C#Windows窗體導出到Excel

Application

當我點擊 「Exportar ......」 它的出口。 代碼如下。

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; 
    } 

問題: 當我出口,它在開始時增加了一個空白列中, 「A」 柱。 這是爲什麼發生? 我的代碼有什麼問題?

了Excel打印如下:

Excel exported

回答

2

你有你的DataGridView行標題,你可以看到它在你的形象爲淡藍色,頂部的>箭頭突出顯示的列。

如果你不需要他們,你可以用dgvMain.RowHeadersVisible = false;

禁用它們或者你可以刪除粘貼後的第一列:

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

dgvMain.RowHeadersVisible = FALSE;解決了這個問題。 謝謝@Equalsk –

0

您是從哪個是好的剪貼板粘貼,但我懷疑剪貼板中的數據包含空白列。

0

可以檢查以下幾項工作:

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