C# 实现复制Excel内容到DataGridview中
业务要求:复制:将Excel内容复制到datagridview中
最终效果:复制Excel内容,点击datagridview中的某个单元格,顺着这个单元格自动填充自动增加行。偷懒了,没写填充在选择哪些行就填充到哪些行。
1、添加方法
1 #region
2 protected override bool ProcessCmdKey(ref System.Windows.Forms.Message msg, System.Windows.Forms.Keys keyData)
3 {
4 //回车新增行 个人笔记
5 switch (keyData)
6 {
7
8 case System.Windows.Forms.Keys.Enter:
9 {
10
11 if (this.Text.IndexOf("订单") > -1)
12 {
13 try
14 {
15 if (edcol > 0 && edrow == dsMainFilter1.Tables[0].Rows.Count - 1)
16 {
17
18 DataRow row = dsMainFilter1.Tables[0].NewRow();
19 str = SYSVARS.vars.userId + System.DateTime.Now.ToString("yyyyMMddHHmmss").ToString().Trim() + dsMainFilter1.Tables[0].Rows.Count.ToString();//以时间标识代码不同的单据号 28 dsMainFilter1.Tables[0].Rows.Add(row);
29 }
30
31 this.dataGridView3.CurrentCell = dataGridView3[3, dsMainFilter1.Tables[0].Rows.Count - 1];
32 dataGridView3.BeginEdit(true);
33 }
34 catch { }
35 }
36 }
41
42 return true;
43 }
44
45 #region excel复制粘贴功能
46 try
47 {
48 if (this.Text.IndexOf("订单")>-1)
49 {
50 if (keyData == (Keys.V | Keys.Control)) // ctrl+V
51 {
52 bool bd = dataGridView3.Focus();//避免影响到界面上其他功能使用粘贴
53 if (bd == true)
54 {
55 IDataObject idataObject = Clipboard.GetDataObject();
56 string da = Clipboard.GetText();
57 string[] s = idataObject.GetFormats();
58 copydata(da);
59 return true;//很重要,不写将会把所有值填充在最后一个单元格里面
60 }
61
62 }
63 }
64 }
65 catch { }
66 #endregion
67 return base.ProcessCmdKey(ref msg, keyData);
68 }
69 #endregion
2、处理剪切板的数据
private void copydata(string data1) {
string clipboardText = Clipboard.GetText(); //获取剪贴板中的内容
if (data1.Trim().Length < 1) { return; }
try {
int colnum = 0;
int rownum = 0;
for (int i = 0; i < clipboardText.Length; i++)
{
if (clipboardText.Substring(i, 1).Equals("\t"))
{
colnum++;
}
if (clipboardText.Substring(i, 1).Equals("\n"))
{
rownum++;
}
}
//粘贴板上的数据来源于EXCEL时,每行末尾都有\n,来源于DataGridView是,最后一行末尾没有\n
if (clipboardText.Substring(clipboardText.Length - 1, 1) == "\n")
{
rownum--;
}
colnum = colnum / (rownum + 1);
object[,] data; //定义object类型的二维数组
data = new object[rownum + 1, colnum + 1]; //根据剪贴板的行列数实例化数组
string rowStr = "";
//对数组各元素赋值
for (int i = 0; i <= rownum; i++)
{
for (int j = 0; j <= colnum; j++)
{
//一行中的其它列
if (j != colnum)
{
rowStr = clipboardText.Substring(0, clipboardText.IndexOf("\t"));
clipboardText = clipboardText.Substring(clipboardText.IndexOf("\t") + 1);
}
//一行中的最后一列
if (j == colnum && clipboardText.IndexOf("\r") != -1)
{
rowStr = clipboardText.Substring(0, clipboardText.IndexOf("\r"));
}
//最后一行的最后一列
if (j == colnum && clipboardText.IndexOf("\r") == -1)
{
rowStr = clipboardText.Substring(0);
}
data[i, j] = rowStr;
}
//截取下一行及以后的数据
clipboardText = clipboardText.Substring(clipboardText.IndexOf("\n") + 1);
}
clipboardText = Clipboard.GetText();
int start, end = -1, index, rowStart = 0, columnStart = 0;
rowStart = r;//选中单元格的行号
columnStart = Icol;//选中单元格的列号
for (int i = 0; i <=rownum; i++)
{
#region 如果datagridview中行数不够,就自动增加行
if ((i + rowStart) > dataGridView3.Rows.Count - 1)
{
//添加新行
DataRow row = dsMainFilter1.Tables[0].NewRow();
str = SYSVARS.vars.userId + System.DateTime.Now.ToString("yyyyMMddHHmmss").ToString().Trim() + dsMainFilter1.Tables[0].Rows.Count.ToString();//以时间标识代码不同的单据号
dsMainFilter1.Tables[0].Rows.Add(row);
}
#endregion
for (int j = 0; j <= colnum; j++)//将值赋值过去---如果datagridview中没有自动增加列
{
#region 需要判断单元格是不是只读的,是只读的就不用不赋值
bool iszd = this.dataGridView3.Rows[i + rowStart].Cells[j + columnStart].ReadOnly;
if (iszd == true)
{
continue;
}
#endregion
string sjz = "";
try
{
sjz = data[i, j].ToString();
}
catch { sjz = ""; }
if (sjz.Trim().Length < 1) { continue; }//直接复制this.dataGridView3.Rows[i + rowStart].Cells[j + columnStart].Value = sjz;
}
}
}
catch { }
}
C# 实现复制Excel内容到DataGridview中的更多相关文章
- C#-导入Excel 内容到 DataTable中
C#-导入Excel 内容到 DataTable中 直接传入文件路径,支持所有Excel格式. 缺点:如果数据量庞大会很占内存. public static DataTable ImportExcel ...
- 将简单Excel表格显示到DataGridView中
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- excel中的数据粘贴不全到plsql中,excel 粘贴后空白,Excel复制粘贴内容不全
http://zhidao.baidu.com/link?url=pHZQvfWJzI-lQjl4uP86q4GLcpYHu4o-fdjiYegJS0Cy5HEq5oz0YrUye3iHjmv5CJ3 ...
- Excel 内容粘贴到DataGridView, DataGridView 粘贴到 Excel
void dataGridView1_KeyDown(object sender, KeyEventArgs e) { if (e.Control && e.KeyCode == Ke ...
- excel数据复制到html表格<textarea>中
方案一 多行文本框接收到复制的excel值后,在文本框的chage事件中,将excel内容分割到二维数组中,然后填充到html的表格的input或textarea中. 数据格式: 单元格复制后的数据格 ...
- C#使用NPOI读取电子表格Excel到DataGridView中
上篇博文中已经介绍了如何写入Excel文件.这篇再介绍一下 如何从Excel中读取数据并保存到DataGridView中. 从Excel中读取数据并保存至DataGridView中,Excel文件第一 ...
- C# 将DataGridView中显示的数据导出到Excel(.xls和.xlsx格式)—NPOI
前言 https://blog.csdn.net/IT_xiao_guang_guang/article/details/104217491 本地数据库表中有46785条数据,测试正常 初次运行程 ...
- ZeroMQ接口函数之 :zmq_msg_copy - 把一个消息的内容复制到另一个消息中
ZeroMQ 官方地址 :http://api.zeromq.org/4-1:zmq_msg_copy zmq_msg_copy(3) ØMQ Manual - ØMQ/3.2.5 Name zm ...
- C#读取Excel表格数据到DataGridView中和导出DataGridView中的数据到Excel
其实想在datagridview中显示excel表格中的数据跟读取数据库中的数据没什么差别,只不过是创建数据库连接的时候连接字段稍有差别. private void btnShow_Click(obj ...
随机推荐
- 生成多个ssh密钥-(转自 破男孩)
如果你已经有了一套名为 id_rsa 的公秘钥,将要生成另外一个公钥,比如 aysee ,你也可以使用任何你喜欢的名字. 步骤如下: 1.生成一个新的自定义名称的公钥: 1 ssh-keygen -t ...
- xml 解析之 JDOM解析
JDOM 是一种使用 XML 的独特 Java 工具包,用于快速开发 XML 应用程序.JDOM 是一个开源项目,它基于树形结构,利用纯 Java 的技术对 XML 文档实现解析.生成.序列化及多种操 ...
- C语言编程 菜鸟练习100题(51-60)
[练习51]矩阵转置 0. 题目: 矩阵的转置 1. 分析: 练习使用 for 循环嵌套,多维数组的表达. 2. 程序: #include <stdio.h> int main() { i ...
- [论文阅读笔记] Community aware random walk for network embedding
[论文阅读笔记] Community aware random walk for network embedding 本文结构 解决问题 主要贡献 算法原理 参考文献 (1) 解决问题 先前许多算法都 ...
- JS实现前台表格排序功能
JS实现前台表格排序功能 虽然数据量不大的情况下,前台排序速度比较快,但一般情况下,我们的项目只使用后台排序,原因有二: 一是代码简单:二是前台JS排序对于有分页的情况无法处理. 前段时间,有个功能需 ...
- 巧用 iLocker 清理恶意程序
iLocker 作为 iGuard 网页防篡改系统的文件驱动过滤模块所衍生出来的独立应用,是一个文件防护工具,可以在文件系统驱动层检查文件操作,根据规则对文件操作进行放行或拦截,可以灵活细致地对文件访 ...
- 解决Caused by: org.apache.ibatis.exceptions.PersistenceException:
在mybatis-config核心配置文件中注册了xml以后出现了新的异常错误 Caused by: java.io.IOException: Could not find resource cn.d ...
- Django学习之完成数据库主从复制、读写分离和一主多从情况下的使用办法
1.首先配置多个数据库,在settings配置文件中配置以下内容: DATABASES = { 'default': { #默认数据库,配置多个mysql数据也是ok的,混用数据库也是ok的 'ENG ...
- 获取当前进程的pid
获取当前进程的pid import java.lang.management.ManagementFactory; import java.lang.management.RuntimeMXBean; ...
- frp实现NAS外网访问
开始 入手了NAS之后就看是漫漫的折腾内网穿透的不归路.用的最多最简单的是下面三种 QC:群晖自带的,速度在100kb左右,能不能连上有时候都是运气,极其不稳定. DDNS:最推荐的方式.上下行都取决 ...