C#中WinForm制作点击"选择文件"按钮选择Excel文件, 并读取Excel内容到DataTable

虽然我是一个PHPer,但项目有C#的需求,我也只能顶着头皮上了。

不过每一份付出都是收货,通过对C#的了解,更加的加深了我对PHP的熟悉程度,将来会另开一个系列单独讲解两个语言对比的文章。

这篇文章的代码,讲的是在WinForm中,制作一个"选择文件"按钮,可以选取Excel文件,并返回DataTable类型的Excel文件内容。

        #region btnClick 点击"选择文件"按钮, 打开选择文件对话框
        private void selectFileBtn_Click(object sender, EventArgs e) {
            OpenFileDialog openFileDialog = new OpenFileDialog();
            openFileDialog.Filter = "Files|*.xls;*.xlsx";              // 设定打开的文件类型
            //openFileDialog.InitialDirectory = AppDomain.CurrentDomain.BaseDirectory;                       // 打开app对应的路径
            openFileDialog.InitialDirectory = Environment.GetFolderPath(Environment.SpecialFolder.Desktop);  // 打开桌面

            // 如果选定了文件
            string filePath = "";
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                // 取得文件路径及文件名
                filePath = openFileDialog.FileName;
                dataGridView1.DataSource = null;                       // 每次打开清空内容
                this.excelDataTable = ReadExcelToTable(filePath);      // 读出excel并放入datatable
                dataGridView1.DataSource = this.excelDataTable;        // 测试用, 输出到dataGridView
            }
        }
        #endregion

        #region private 根据excle的路径把第一个sheet中的内容放入datatable
        /// <summary>
        /// 根据excle的路径把第一个sheet中的内容放入datatable
        /// </summary>
        /// <param name="path">excel文件存放的路径</param>
        /// <returns>DataTable</returns>
        private static DataTable ReadExcelToTable(string path) {
            try {
                // 连接字符串(Office 07及以上版本 不能出现多余的空格 而且分号注意)
                string connstring = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";
                // 连接字符串(Office 07以下版本, 基本上上面的连接字符串就可以了) 
                //string connstring = Provider=Microsoft.JET.OLEDB.4.0;Data Source=" + path + ";Extended Properties='Excel 8.0;HDR=NO;IMEX=1';";

                using (OleDbConnection conn = new OleDbConnection(connstring))
                {
                    conn.Open();
                    // 取得所有sheet的名字
                    DataTable sheetsName = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
                    // 取得第一个sheet的名字
                    string firstSheetName = sheetsName.Rows[0][2].ToString();

                    // 查询字符串 
                    string sql = string.Format("SELECT * FROM [{0}]", firstSheetName);

                    // OleDbDataAdapter是充当 DataSet 和数据源之间的桥梁,用于检索和保存数据
                    OleDbDataAdapter ada = new OleDbDataAdapter(sql, connstring);

                    // DataSet是不依赖于数据库的独立数据集合
                    DataSet set = new DataSet();

                    // 使用 Fill 将数据从数据源加载到 DataSet 中
                    ada.Fill(set);

                    return set.Tables[0];
                }
            } catch (Exception) {
                return null;
            }
        }
        #endregion

 

以下是一个简单的示例代码,演示如何在C# WinForms使用OpenFileDialog来手动选择文本文件,并将数据读入到DataTable。 ```csharp private void button1_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog = new OpenFileDialog(); openFileDialog.Filter = "文本文件 (*.txt)|*.txt|所有文件 (*.*)|*.*"; openFileDialog.Title = "选择文本文件"; if (openFileDialog.ShowDialog() == DialogResult.OK) { // 创建一个空的DataTable对象 DataTable dataTable = new DataTable(); // 读取文本文件内容到字符串数组 string[] lines = File.ReadAllLines(openFileDialog.FileName); // 用第一行作为表头,并将其添加到DataTable string[] headers = lines[0].Split(','); foreach (string header in headers) dataTable.Columns.Add(header.Trim()); // 读取剩余行的数据,并将其添加到DataTable for (int i = 1; i < lines.Length; i++) { string[] fields = lines[i].Split(','); DataRow row = dataTable.NewRow(); for (int j = 0; j < headers.Length; j++) row[j] = fields[j].Trim(); dataTable.Rows.Add(row); } // 将DataTable绑定到DataGridView dataGridView1.DataSource = dataTable; } } ``` 在这个例子,我们创建了一个OpenFileDialog对象,并将其Filter属性设置为只显示文本文件。然后,在用户选择了一个文本文件后,我们将其文件路径传递给File.ReadAllLines()方法,以读取文件的所有行。接着,我们按照与前面示例相同的方式,将文件的数据读入到DataTable,并将其绑定到DataGridView控件,以在WinForms应用程序显示数据。 请注意,如果您要从多个文件读取数据,您可以将上述代码封装在一个方法,并将文件路径作为参数传递给该方法。这样,在用户选择文件时,您可以多次调用该方法,以读取每个文件的数据,并将其添加到同一个DataTable
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值