将信息从表单导出到Excel

时间:2017-05-12 03:28:38

标签: c# excel winforms datagridview

我正在努力完成这一部分,到目前为止这是我的过程,请帮助我。

 private void copyAlltoClipboard()
    {
        G2.SelectAll();

        DataObject dataObj = G2.GetClipboardContent();
        if (dataObj != null)
            Clipboard.SetDataObject(dataObj);
    }

    private void btn_export_Click(object sender, EventArgs e)
    {
        copyAlltoClipboard();
        Microsoft.Office.Interop.Excel.Application xlexcel;
        Microsoft.Office.Interop.Excel.Workbook xlWorkBook;
        Microsoft.Office.Interop.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); 
    }

所以这是代码,它会将datagridview导出到excel(但是没有Header文本,我还需要使用头文本导出)。 对于上面的所有文本框,我也希望它们导出到Excel,我该怎么做?

我忘了提及,这些文本框和readonly是从数据表中的另一种形式调用,而不是用于输入。 enter image description here

3 个答案:

答案 0 :(得分:1)

对于带有标题文字的Datagridview数据,您需要更改datagridview的ClipboardCopyMode

[230, '+', 10, '/', 2, '+', 34]
[67, '+', 10, '*', 2]
[67, '*', 10, '/', 230, '*', 60, '+', 34]
[67, '/', 230, '+', 60, '*', 2, '+', 34]
[67, '/', 230, '+', 2, '*', 60, '+', 34]
[34, '-', 67, '*', 2, '+', 230, '-', 10]
[34, '-', 67, '*', 2, '-', 10, '+', 230]
[34, '-', 2, '*', 67, '/', 10, '-', 60]
[34, '/', 230, '+', 67, '+', 10, '*', 2]
[34, '/', 230, '+', 10, '+', 67, '*', 2]
[34, '/', 60, '+', 67, '+', 10, '*', 2]
[34, '/', 60, '+', 10, '+', 67, '*', 2]
[34, '/', 2, '+', 67, '+', 60, '+', 10]
[34, '/', 2, '+', 67, '+', 10, '+', 60]
[34, '/', 2, '+', 60, '+', 67, '+', 10]
[34, '/', 2, '+', 60, '+', 10, '+', 67]
[34, '/', 2, '+', 10, '+', 67, '+', 60]
[34, '/', 2, '+', 10, '+', 60, '+', 67]
[60, '*', 2, '+', 34]
[60, '/', 230, '+', 67, '+', 10, '*', 2]
[60, '/', 230, '+', 10, '+', 67, '*', 2]
[60, '/', 34, '+', 230, '-', 67, '-', 10]
[60, '/', 34, '+', 230, '-', 10, '-', 67]
[60, '/', 34, '-', 67, '+', 230, '-', 10]
[60, '/', 34, '-', 67, '-', 10, '+', 230]
[60, '/', 34, '-', 10, '+', 230, '-', 67]
[60, '/', 34, '-', 10, '-', 67, '+', 230]
[60, '/', 34, '*', 67, '+', 10, '*', 2]
[60, '/', 34, '*', 10, '+', 67, '*', 2]
[2, '*', 60, '+', 34]
[10, '+', 230, '/', 2, '+', 34]
[10, '+', 67, '*', 2]
[10, '*', 67, '/', 230, '*', 60, '+', 34]
[10, '/', 230, '+', 60, '*', 2, '+', 34]
[10, '/', 230, '+', 2, '*', 60, '+', 34]
[10, '/', 67, '+', 60, '*', 2, '+', 34]
[10, '/', 67, '+', 2, '*', 60, '+', 34]

答案 1 :(得分:1)

除了您从中获取代码的原始内容:Export the dataGridView to Excel with all the cells format

您需要为主字段创建另一个HTML表,并将其与DataGridView的HTML表结合使用:

filter

enter image description here

答案 2 :(得分:0)

我不知道它是否适当的解决方案但是它有效。

只需添加以下功能(不要忘记用相应的变量替换字符串值)。如果要将数据移动到其他单元格或行,只需相应地更改制表符和换行符。

private void PrefixOtherDataToClipboard()
{
    StringBuilder str = new StringBuilder();

    //Replace appended strings with your corresponding variables
    str.Append("Purchaser\t" + "P1"); str.AppendLine("\tReject Reason\t" + "bla bla bla..");
    str.AppendLine("Date\t" + DateTime.Now);
    str.AppendLine("PR#\t" + "23432");
    str.AppendLine("Total Values\t" + "4234");
    str.AppendLine("Status\t" + "Waiting");


    str.AppendLine(Clipboard.GetText());

    Clipboard.SetText(str.ToString());            
}

现在,在将网格数据复制到剪贴板后,在copyAlltoClipboard()中调用此函数

private void copyAlltoClipboard()
{
    G2.SelectAll();

    DataObject dataObj = G2.GetClipboardContent();
    if (dataObj != null)
    {
        Clipboard.SetDataObject(dataObj);
        PrefixOtherDataToClipboard();
    }
}

注意:

  

如果您为网格视图单元格设置了任何格式,则在我以文本(String)的形式从/向剪贴板读取和写入时,它不会被复制到Excel中。