从DataGridView粘贴到Excel
我想复制dataGridView中的单元格区域,然后将该数据粘贴到MS Excel中。 我能够复制数据并粘贴到MS Word或记事本中,但不是Excel。 有很多从Excel复制和粘贴到DataGridView但不是相反的例子。
private void frm_KeyDown(object sender, KeyEventArgs e)
{
if (e.Control && e.KeyCode == Keys.C)
{
this.dataGridView1.ClipboardCopyMode = DataGridViewClipboardCopyMode.EnableWithoutHeaderText;
if (this.dataGridView1.GetCellCount(DataGridViewElementStates.Selected) > 0)
{
try
{
DataObject d = dataGridView1.GetClipboardContent();
Clipboard.SetDataObject(d);
}
catch (System.Runtime.InteropServices.ExternalException)
{
MessageBox.Show("Could Not Copy To Clipboard");
}
}
}
}
有什么方法可以粘贴到excel中? 我一直在努力寻找解决方案。
编辑
它在用dataGridViews尝试一些其他程序后出现,在默认情况下,您可以在dataGridView中选择一组单元格后复制并粘贴到Excel或其他程序。 如果它是DGV中不支持的数据或我在属性管理器中更改的DGV属性,或者我只是需要关闭并重新打开Excel,因为出现了一些错误,我现在无法弄清楚。
我不能说这将如何与您的网格排队,但这是一个将格式化文本放在剪贴板上的示例。 这是为了粘贴到Excel而编写的:
StringBuilder sb = new StringBuilder();
for (Int32 r = Selection.r1; r <= Selection.r2; r++)
{
if (Rows[r].Visible)
{
if (!String.IsNullOrEmpty(sb.ToString()))
sb.Append(Environment.NewLine);
for (Int32 c = Selection.c1; c <= Selection.c2; c++)
{
if (!sb.ToString().EndsWith(Environment.NewLine) &&
!String.IsNullOrEmpty(sb.ToString()) &&
!sb.ToString().EndsWith("t"))
sb.Append("t");
if (String.IsNullOrEmpty(this[r, c] as String))
sb.Append(" ");
else
sb.Append(this[r, c].ToString());
}
}
}
if (sb.Length > 0)
ClipboardEx.SetTextThreadSafe(sb.ToString());
注意: Selection
是我网格对突出显示内容的引用, this
是获取单元格中数据的单元格引用。
基本上,它试图构建一个如下所示的文本块:
R1C1tR1C2tR1C3tR1C4n
R2C1tR2C2tR2C3tR2C4n
R3C1tR3C2tR3C3tR3C4n
标签( t)指示它向右移动一列,换行符( n)向下移动一行。 这是一个非常标准的格式。 如果您在那里复制粘贴到您的网格中,Excel会给您什么。
当我继续搜索时,我最终找到了答案。
如果我更改Clipboard.SetDataObject(d);
Clipboard.SetData(DataFormats.Html, d);
这使我可以将选定的单元格范围粘贴到excel中。
public class MyDataGridView : DataGridView
{
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
protected override bool ProcessDataGridViewKey(KeyEventArgs e)
{
switch (e.KeyCode)
{
case Keys.Insert:
case Keys.C:
return this.ProcessInsertKey(e.KeyData);
default:
break;
}
return base.ProcessDataGridViewKey(e);
}
[SecurityPermission(SecurityAction.LinkDemand, Flags = SecurityPermissionFlag.UnmanagedCode)]
protected new bool ProcessInsertKey(Keys keyData)
{
if ((((keyData & (Keys.Alt | Keys.Control | Keys.Shift)) == Keys.Control) ||
(((keyData & (Keys.Alt | Keys.Control | Keys.Shift)) == (Keys.Control | Keys.Shift))
&& ((keyData & Keys.KeyCode) == Keys.C)))
&& (this.ClipboardCopyMode != DataGridViewClipboardCopyMode.Disable))
{
DataObject clipboardContent = this.GetClipboardContent();
if (clipboardContent != null)
{
Clipboard.SetText(clipboardContent.GetData(DataFormats.UnicodeText).ToString());
return true;
}
}
return false;
}
}
您可以使用此自定义控件。
链接地址: http://www.djcxy.com/p/62261.html上一篇: Paste to Excel From DataGridView
下一篇: How to export dataGridView data Instantly to Excel on button click?