VS C# WinForm对于EXCEL表的操作

  1. 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,就成功了(遇到一个问题,切忌去找别人的答案,先有一个自己的答案,然后找一定没问题):

  1. 从无到有创建EXCEL表,如果已经有EXCEL表,根据文件名打开EXCEL
FileStream fs = new FileStream("D://TvMacInfo.xls", FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite);

你可以会困惑怎么没有Open()呢?如果有Open,那么对应Open就会有很多个Exception:异常处理,我是认为处理一个new过程可能出现的异常,然后就可以实现打开或创建一个Excel表,挺好的。
  1. 实例一个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);
} 
  1. 往新建或已经存在的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];
      }
}
  1. 往新建或已经存在的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();  
  1. 如果你当前的项目里需要处理软件产生的数据写入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();  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值