代码改变世界

读取excel,读取文本文件

2016-01-15 13:17  silence_blog  阅读(919)  评论(0编辑  收藏  举报

背景:

领导不知道在做什么项目,前天给了我们一个200行以上的表格,让我们把里面的内容,用switch case写出来。

我和同事分工,大概每人写了100多个,至少写了半小时以上,写完之后,交换检查,想想,刚刚写完100多个switch case,又要再去检查100多个,

晕了,真是头晕,果然,两人都有错误,完成这个任何用了2小时左右。

今天领导不在,昨天又给我们安排 任务,又是一个这样的表格,用swtich case写出来。

当时我们就醉了,好吧,不过我们也没说什么。今天上午上班来了之后,先把其它任务完成。接着做这个。

我一看,这次可不是200多行,足足有700,800行。意味着要写700多个case: break;

我一想,连写带检查,怎么也得小半天了,这样写下去可不个办法。

于是我跟同事商量了下,问他可不可以写个程序直接生成。他说可以呀,但是chm格式的文件没办法读啊。

于是我把chm格式的表格,复制,粘贴到了,excel中。他说可以了,这就好办了,但是我是一个菜鸟,什么都不会,他说让我写,说这个任务给我有挑战性,他可以给我提供思路,后来我想了想,按自己的方式,将excel转成了文本文件(以逗号分格),将文件读到了c#程序中。使用字符串拼接,很简单,很顺序了就写完了700多个case.

后来看了看我同事的写法,他是直接读的excel,于是我又自己试了试,写了一个直接从excel的程序,其实都很简单。

下面付上代码 :

static void Main(string[] args)
        {
            //ReadTxt();
            ReadExcel();

        }

        private static void ReadExcel()
        {
            StringBuilder sb = new StringBuilder();
            string stringCase = @"case {0}:
                                    Code = ""{1}"";
                                    Info = ""{2}"";                      
                                    break;
                                    ";
            string ConnStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=F:/tmp.xls;Extended Properties='Excel 8.0;HDR=NO;IMEX=1';"; //连接字符串

            OleDbConnection Conn = new OleDbConnection(ConnStr);
            Conn.Open();
            string sql = string.Format("select * from [{0}$]", "Sheet1");  //Sheet1为工作表的名称
            DataSet ds = new DataSet(); 
            OleDbDataAdapter da = new OleDbDataAdapter(sql, Conn);
            da.Fill(ds);   //读取数据填充到DataSet
            foreach (DataRow row in ds.Tables[0].Rows)  //使用Table循环
            {
                string caseTmp = "";
                caseTmp = String.Format(stringCase, row[1].ToString(), row[0].ToString(), row[2].ToString());
                sb.Append(caseTmp);
            }
            Console.WriteLine(sb.ToString());
            Console.ReadKey();
        }

        private static void ReadTxt()
        {
            StringBuilder sb = new StringBuilder();
            string stringCase = @"case {0}:
                                    Code = ""{1}"";
                                    Info = ""{2}"";                      
                                    break;
                                    ";

            string[] lines = File.ReadAllLines("F:\\tmp.csv", Encoding.Default);  //读取所有行

            foreach (string line in lines)  //对行进行foreach循环
            {
                string caseTmp = "";
                string[] values = line.Split(',');  //行内数据使用,分格
                caseTmp = String.Format(stringCase, values[1], values[0], values[2]);
                sb.Append(caseTmp);
            }

            File.WriteAllText("F:\\tmp.txt", sb.ToString()); //将拼接完成的字符串写入文件中
            //Console.WriteLine(sb.ToString());
            Console.ReadKey();
        }

有需要的随便拿走

当excel文件为Excel 2007 时,
使用Microsoft.Jet.OLEDB.4.0 and Extended Properties=Excel 8.0时会出现问题,
修改成12.0
Microsoft.ACE.OLEDB.12.0,Extended Properties=Excel 12.0