VS C# WinForm对于EXCEL表的操作
来源:互联网 发布:杜兰特2016西决数据 编辑:程序博客网 时间:2024/06/07 17:37
- VS C# WinForm,如果实现对于EXCEL表的操作:
① 从无到有创建EXCEL表
② 如果已经有EXCEL表,根据文件名打开EXCEL
③ 往空白的已经存在的EXCEL表中写入数据
④ 往空白的新建的EXCEL表中写入数据
⑤ 对Open的EXCEL新建工作簿
⑥ 对Open的EXCEL插入列
⑦ 对Open的EXCEL插入行
因为做项目的时候很多软件都需要具备把数据不仅备份到数据库中,也写如EXCEL中,可以随时打开浏览。
我当时为了实现这些操作,第一次是用网上的方法:
string mystring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=”+filepathname +”,User ID=admin;Password=;Extended properties='Excel 8.0;IMEX=1;HDR=NO;'"; OleDbConnection cnnxls = new OleDbConnection(mystring);cnnxls.Open();OleDbDataAdapter myDa = new OleDbDataAdapter("Select * from [Sheet1$]", cnnxls);
当时我遇到的问题是cnnxls.Open()报错:遇到外部的表不是预期的表(这个BUG我用了一天,不是EXCEL版本问题,不是差jet引用,不是string字符串里写错了,最后我想调试系统函数Open函数,但是问题还在,我果断放弃该方法)
我就静下来想了一种方法(搞了一天,有多烦躁你懂的),本来随便一个文本文件是很简单的,对不对?一分钟给你,你绝对能打开一个已经存在的.txt文件,那EXCEL跟.txt只是文件类型不同,我为什么不先把数据存在一个东西(DataTable)里,然后最后打开或关闭文件的时候,也用打开.txt的方式,只是把打开类型换成EXCEL,就成功了(遇到一个问题,切忌去找别人的答案,先有一个自己的答案,然后找一定没问题):
- 从无到有创建EXCEL表,如果已经有EXCEL表,根据文件名打开EXCEL
FileStream fs = new FileStream("D://TvMacInfo.xls", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);你可以会困惑怎么没有Open()呢?如果有Open,那么对应Open就会有很多个Exception:异常处理,我是认为处理一个new过程可能出现的异常,然后就可以实现打开或创建一个Excel表,挺好的。
- 实例一个DataTable,然后插入列或行数据:
DataTable dt; dt = new DataTable();//创建表dt.Columns.Add("Number",typeof(Int32));dt.Columns.Add("Time", typeof(DateTime));dt.Columns.Add("Serials Number of TV", typeof(String));//添加列dt.Columns.Add("LAN MAC of TV", typeof(String));dt.Columns.Add("WIFI 2G MAC of TV", typeof(String));dt.Rows.Add(new object[] { Number,Time, serial, lanmac,wifi2 }); //添加行只有把DataTable里的写入的列的数据和行的数据写入表视图DataView之后,才能写入打开的文件中DataView dv = dt.DefaultView; //获取表视图dv.ToTable(); //转为表for (int k = 0; k < dt.Columns.Count; k++){ // 添加列名称 sb.Append(dt.Columns[k].ColumnName.ToString() + "\t");}sb.Append(Environment.NewLine);// 添加行数据 for (int i = 0; i < dt.Rows.Count; i++){ DataRow row = dt.Rows[i]; for (int j = 0; j < dt.Columns.Count; j++) { // 根据列数追加行数据 sb.Append(row[j].ToString() + "\t"); } sb.Append(Environment.NewLine);}
- 往新建或已经存在的EXCEL表中读取数据
string str = null;string Number = "";string Time = "";string serial = "";string lanmac = "";string wifi2 = "";int i = 0;FileStream fs = new FileStream("D://TvMacInfo.xls", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);StreamReader reader = new StreamReader(fs, System.Text.Encoding.UTF8);while ((str = reader.ReadLine()) != null){ i++; if (i == 1) { continue; } else { string[] strs = str.Split('\t'); Number = strs[0]; Time = strs[1]; serial = strs[2]; lanmac = strs[3]; wifi2 = strs[4]; }}
- 往新建或已经存在的EXCEL表中写入数据
DataTable dt;//添加列dt.Columns.Add("Number",typeof(Int32));dt.Columns.Add("Time", typeof(DateTime));dt.Columns.Add("Serials Number of TV", typeof(String));dt.Columns.Add("LAN MAC of TV", typeof(String));dt.Columns.Add("WIFI 2G MAC of TV", typeof(String));//添加行dt.Rows.Add(new object[] { Number,Time, serial, lanmac,wifi2 }); dt.Rows.Add(new object[] { Number,Time, serial, lanmac,wifi2 }); DataView dv = dt.DefaultView; //获取表视图dv.ToTable(); //转为表StreamWriter sw = new StreamWriter("D://TvMacInfo.xls", false, Encoding.GetEncoding("gb2312"));StringBuilder sb = new StringBuilder();for (int k = 0; k < dt.Columns.Count; k++){ // 添加列名称 sb.Append(dt.Columns[k].ColumnName.ToString() + "\t");}sb.Append(Environment.NewLine);// 添加行数据 for (int i = 0; i < dt.Rows.Count; i++){ DataRow row = dt.Rows[i]; for (int j = 0; j < dt.Columns.Count; j++) { // 根据列数追加行数据 sb.Append(row[j].ToString() + "\t"); } sb.Append(Environment.NewLine);}sw.Write(sb.ToString());sw.Flush();sw.Close();sw.Dispose();
- 如果你当前的项目里需要处理软件产生的数据写入Excel表中:
//整个操作过程中新建一张DataTable表,把该表的列设置好,因为如果你是把数据往新建的Excel表中写数据,肯定要自己写入列名和行数据;如果你是往一个已经有列名而且已经有数据的Excel表中写入数据,你可以先打开存在的Excel表,把里面的数据读出来存储在DataTable里,这样在你程序中,你就可以通过一张DataTable表对你的所有数据进行任何数据处理操作都可以 DataTable dt; dt = new DataTable();//创建表//因为可能是需要新建Excel表,所以自己写入列名 dt.Columns.Add("Number",typeof(Int32)); dt.Columns.Add("Time", typeof(DateTime)); dt.Columns.Add("Serials Number of TV", typeof(String));//添加列 dt.Columns.Add("LAN MAC of TV", typeof(String)); dt.Columns.Add("WIFI 2G MAC of TV", typeof(String)); string str = null; string Number = ""; string Time = ""; string serial = ""; string lanmac = ""; string wifi2 = ""; int i = 0; //因为可能存在Excel表了,打开已经存在的Excel表,读取里面的数据 FileStream fs = new FileStream("D://TvMacInfo.xls", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite); StreamReader reader = new StreamReader(fs, System.Text.Encoding.UTF8); while ((str = reader.ReadLine()) != null) { i++; if (i == 1) { continue; } else { string[] strs = str.Split('\t'); Number = strs[0]; Time = strs[1]; serial = strs[2]; lanmac = strs[3]; wifi2 = strs[4]; //把已经存储在Excel里的数据读出写入DataTable中,因为对于数据,多半会有需要排序,刷新,修改等操作,放在DataTable里很好操作 dt.Rows.Add(new object[] { Number,Time, serial, lanmac,wifi2 }); //添加行 } }//在你的项目软件里产生数据的时候,把产生的数据(dt.Rows.Count+1).ToString()是序号,DateTime.Now产生该数据的当天日期,uScanCode条形码,sRecieveLanMac本地Mac地址,sRecieveWifi2Mac Wifi的Mac地址)放入DataTable中 dt.Rows.Add(new object[] { (dt.Rows.Count+1).ToString(),DateTime.Now,uScanCode, sRecieveLanMac, sRecieveWifi2Mac }); //添加行//为了在获得数据,处理数据后,把数据写入Excel表中,需要把DataTable里的数据写入表视图里 DataView dv = dt.DefaultView; //获取表视图 dv.ToTable(); //打开之前创建或存在打开的Excel表 StreamWriter sw = new StreamWriter("D://TvMacInfo.xls", false, Encoding.GetEncoding("gb2312")); StringBuilder sb = new StringBuilder(); for (int k = 0; k < dt.Columns.Count; k++) { // 添加列名称 sb.Append(dt.Columns[k].ColumnName.ToString() + "\t"); } sb.Append(Environment.NewLine); // 添加行数据 for (int i = 0; i < dt.Rows.Count; i++) { DataRow row = dt.Rows[i]; for (int j = 0; j < dt.Columns.Count; j++) { // 根据列数追加行数据 sb.Append(row[j].ToString() + "\t"); } sb.Append(Environment.NewLine); } //把所有数据写入Excel表中 sw.Write(sb.ToString()); sw.Flush(); sw.Close(); sw.Dispose();
阅读全文
0 0
- VS C# WinForm对于EXCEL表的操作
- C# winform 开发之Excel操作
- C#合并excel单元格,操作合并后的单元格 (winform导出excel)
- winform导出Excel报表之C#操作EXCEL 1
- C#对于RAR的操作
- c#对于文件的操作
- C#对于List的操作
- Python 3.4版本对于Excel表的操作
- C# WPF vs WinForm
- 有关c#对于excel的操作,以后再增加,放点资料先
- delphi对于excel的一般操作
- delphi对于excel的一般操作
- delphi对于excel的一般操作
- winForm中C#实现Excel的导出
- c# winform 中导入Excel 的问题 !
- C# winform 设置Excel表格的属性
- c# winform操作excel,选择最合适的组件来读取XLS
- winform操作excel表格的简单应用
- 如何解决“504 Gateway Time-out”错误
- JavaScript编程精解第九章:正则表达式
- 虚拟机下CentOS安装JDK
- Linux中常用操作命令
- 大话设计模式之代理模式
- VS C# WinForm对于EXCEL表的操作
- 嵌入式编程常考的无符号数和有符号数的运算问题
- 2015-2016 Northwestern European Regional Contest I.Identifying Map Tiles(超级技巧+脑洞)
- 菜鸟手记(一)
- GCC编译c语言文件
- 462. Minimum Moves to Equal Array Elements II
- Android 手机卫士(5)从Apache Tomcat服务器获取数据并解析
- 每个架构师都应该研究下康威定律
- 数组