将信息从表单导出到Excel
我正在这部分工作,这是我的过程,请帮助我。
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); }
所以这是代码,它将导出到excel datagridview(但没有标题文本,我需要导出与标题文本也)。 对于上面所有的文本框,我也希望他们导出到Excel,我该怎么做?
我忘了提及,这些文本框和只读,并从数据表中的另一种forms调用,而不是input。
对于包含标题文本的Datagridview数据,您需要更改datagridview的ClipboardCopyMode
dgv.ClipboardCopyMode =DataGridViewClipboardCopyMode.EnableAlwaysIncludeHeaderText;
除了从以下代码获取代码之外: 将dataGridView以所有单元格格式导出到Excel
您需要为主字段创build另一个HTML表,并将其与DataGridView的HTML表组合:
private string ConvertMasterFieldsToHTMLTable() { StringBuilder sb = new StringBuilder(); sb.AppendLine("<table border='1' cellpadding='0' cellspacing='0'>"); sb.AppendLine("<tr><td>"); sb.AppendLine("Purchaser: "); sb.AppendLine("</td><td>"); sb.AppendLine(textBox1.Text); sb.AppendLine("</td></tr>"); sb.AppendLine("<tr><td>"); sb.AppendLine("Date: "); sb.AppendLine("</td><td>"); sb.AppendLine(dateTimePicker1.Value.ToString()); sb.AppendLine("</td></tr>"); sb.AppendLine("<tr><td>"); sb.AppendLine("PR: "); sb.AppendLine("</td><td>"); sb.AppendLine(comboBox1.Text.ToString()); sb.AppendLine("</td></tr>"); sb.AppendLine("</table>"); sb.AppendLine("<br>"); return sb.ToString(); } private void button1_Click(object sender, EventArgs e) { string fieldToHTMLTable = ConvertMasterFieldsToHTMLTable(); string dgvToHTMLTable = ConvertDataGridViewToHTMLWithFormatting(dgv); //Strip the enclosing <HTML><body> tags and wrap them around both HTML Tables dgvToHTMLTable = dgvToHTMLTable.Replace("<html><body><center>", string.Empty); dgvToHTMLTable = dgvToHTMLTable.Replace("</center></body></html>", string.Empty); Clipboard.SetText("<html><body><center>"+ fieldToHTMLTable + dgvToHTMLTable + "</center></body></html>"); }
我不知道它是否正确的解决scheme,但它的工作原理。
只需添加以下function(不要忘记用相应的variablesreplacestring值)。 如果您想将数据移动到其他单元格或行,只需相应地更改制表符和换行符。
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(); } }
注意:
如果您有任何格式设置到您的网格视图单元格,它将不会复制到Excel,因为我正在读/写文本(string)forms的剪贴板。