C#Windows窗体导出到Excel

我有一个简单的应用程序。 我的应用程序加载一个csv,修改一些数据并导出到excel。

应用

当我点击“导出…”出口。 代码如下。

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导出

你的DataGridView上有行标题,你可以在图像中看到它,用浅蓝色突出显示的列,顶部的>箭头。

如果你不需要它们,你可以用dgvMain.RowHeadersVisible = false;来禁用它们dgvMain.RowHeadersVisible = false;

或者,您可以在粘贴后删除第一列:

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

你是从剪贴板上粘贴的,但是我怀疑剪贴板中的数据包含一个空白的列。

你可以检查以下的工作:

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