现在的位置: 首页 > 综合 > 正文

关于Excel操作编写的一个软件设计构思案例[连载] –如何打开Excel文件,获取需要列的数据显示到表格内做修改

2013年04月19日 ⁄ 综合 ⁄ 共 2402字 ⁄ 字号 评论关闭

如何打开Excel文件,获取需要列的数据显示到表格内做修改?

DataSet 读取表格数据 = new DataSet(); Thread 读取, 更新; int 计数 = 0, 定位 = 0, 原条件设定数 = 0, 副条件设定数 = 0;
string[] 创建1 = new string[] { "[号码]", "[省]", "[市]", "[区、县]", "[镇、乡]", "[街、路、村]", "[☆]", "[自然村]", "[村民组]", "[门牌号]", "[户名]", "[导入原字符]" };

上面设置公共变量,在多个方法内使用。

如下方法:调用选择要打开的文件文件,获取文件路径和名称,传递给读取数据列方法处理;同时创建一个容纳数据空表,并创建空表列所需数量,如果读取数据返回结果不为空,创建空表所需行数绑定给控件,这样控件就有了指定列标题和行数以容纳数据;读取返回的数据表,指定需要读取的列,把数据直接赋值给控件指定单元格。

        private void 数据导入()
        {
            读取表格数据.Clear(); 地址分类树.Nodes.Clear(); 地址分类树.Nodes.Add("?"); 计数 = 0;
            OpenFileDialog 打开文件 = new OpenFileDialog();
            打开文件.Filter = "Excel表格文件(xls)|*.xls;|所有文件(*.*)|*.*";
            if (打开文件.ShowDialog() == DialogResult.OK) { 读取表格数据 = 读取微软表格文件(打开文件.FileName); }
            读取.Join(); this.Text = "[金刚般若]字符分类提取:" + 打开文件.FileName;
            System.Data.DataTable 结果空表 = new System.Data.DataTable();
            foreach (string 数据列 in 创建1) 结果空表.Columns.Add(数据列);/*创建所需列数和名称*/
            if (读取表格数据.Tables.Count > 0)
            {
                for (int 行 = 0, 数 = 读取表格数据.Tables[0].Rows.Count; 行 < 数; 行++) { 结果空表.Rows.Add(); }/*创建所需行数*/
                处理结果.DataSource = 结果空表;

                处理结果.BeginInvoke(new Action(delegate()
                {
                    foreach (DataRow 数据 in 读取表格数据.Tables[0].Rows)
                    {
                        处理结果.Rows[计数].Cells[0].Value = 数据[5];
                        处理结果.Rows[计数].Cells[10].Value = 数据[4];
                        处理结果.Rows[计数].Cells[11].Value = 数据[6].ToString().Replace("/", "").Replace("//", "");
                        计数++;
                    }
                }));
            }
            处理结果.Columns[11].Width = 500; 处理结果.Columns[5].Width = 105; 处理结果.Columns[6].Width = 35; 处理结果.Columns[1].Width = 55; 处理结果.Columns[2].Width = 55;
            int[] 菜单序 = new int[] { 3, 6, 7, 14, 15, 16, 18, 19, 20, 21, 22, 23 }; 菜单设置(菜单序, true);
            if (读取表格数据.Tables.Count > 0) MessageBox.Show("数据导入完成!" + 读取表格数据.Tables[0].Rows.Count.ToString() + "行数据。", "友情提示!");
        }

如下方法:打开指定路径文件名读取所有数据到表并返回之前调用的方法。

这里需特别注意一点就是当浏览Excel文件方法调用(待发布)返回表中的第一行会被设为标题行,因此,如果Excel文件没标题行的话,第一行数据将别列为标题而不在表行中可以被编辑,解决方法,需要在Excel文件添加一行为第一行,并把这行第一个单元格内随便写个字符就可以了,如果不加字符的话不被读取;因为Excel文档列数量不定,所以,无法给[读取表返回]设置多少个列。

        private DataSet 读取微软表格文件(string 文档名)
        {
            DataSet 读取表返回 = new DataSet();
            读取 = new Thread(delegate()
            {
                string 微软表格 = @"Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + 文档名 + "; Extended Properties = \"Excel 12.0 Xml; HDR = No\"";
                OleDbConnection 表格文件 = new OleDbConnection(微软表格);
                表格文件.Open();/*DataTable 工作簿名表 = 表格文件.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
                string 读取数据 = "SELECT * FROM [" + 工作簿名表.Rows[0][2] + "]"; 工作簿名表.Dispose();*/
                string 读取数据 = "SELECT * FROM [Sheet1$]";
                OleDbDataAdapter 连接表格 = new OleDbDataAdapter(读取数据, 表格文件);
                连接表格.Fill(读取表返回, "读取Excel数据");
                表格文件.Close();
            }); 读取.Start();
            return 读取表返回;
        }

下次将发布接下来需要关心的问题:如何实现从字符串中提取需要的字符并赋值给指定单元格内。

没写这个程序时,直接在Excel文档中人工取值分开填到表格对应栏内,数千行数据,看得眼花缭乱,人也疲劳不堪,一天坐下来熟悉Excel操作技巧的人,要准确无误地工作,也仅能过处理近2千行左右的数据,使用软件操作起码提高5倍,边设计边运行粗略测试可达8倍左右,10倍不敢保证。

抱歉!评论已关闭.