2016-11-09 5 views
1

У меня есть простое приложение. Мое приложение загружает csv, изменяет некоторые данные и экспортирует в excel.C# Windows Forms Export to 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 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 = ложь; решил проблему. Спасибо @Equalsk –

0

Вы вставки из буфера обмена, который отлично, но я предположите, что ваши данные в буфере обмена содержат пустой столбец.

0

Вы можете проверить, если выполнены следующие работы:

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