C#Windows窗体导出到Excel

时间:2016-11-09 13:52:54

标签: c# excel winforms

我有一个简单的应用程序。 我的应用程序加载一个csv,改变一些数据并导出到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

3 个答案:

答案 0 :(得分:2)

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

如果您不需要,可以使用dgvMain.RowHeadersVisible = false;

停用它们

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

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

答案 1 :(得分:0)

您正在从剪贴板粘贴,这很好,但我怀疑剪贴板中的数据包含空白列。

答案 2 :(得分:0)

您可以查看以下内容是否有效:

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