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打印如下:
你的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];