欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WPF基础系列八:C# 导入/读取excel数据

程序员文章站 2022-06-07 10:49:55
...

WPF基础系列八:C# 导入/读取excel数据



前言

使用Excel表存取用户数据,实例参考:WPF实例系列一:登录、注册界面设计


一、导入Excel数据

 Excel.Application ExcelApp = new Excel.Application();
        #region 创建excel工作簿
        public void InsertExcel(string u, string p)
        {
            //1.创建Excel

            try
            {
                //2.打开已经存在的工作簿
                string path = "C:\\Users\\非黑不即白\\Desktop\\code.xlsx";
                ExcelApp.Workbooks.Open(path, ReadOnly: false);

                //3.
                ExcelApp.Cells[1, 1].Value = "username";
                ExcelApp.Cells[1, 2].Value = "password";

                int RowCount = ExcelApp.ActiveSheet.UsedRange.Rows.Count + 1;
                //ExcelApp.ActiveSheet.Rows[RowCount].Insert(u, p);

                ExcelApp.Cells[RowCount, 1].Value = u;
                ExcelApp.Cells[RowCount, 2].Value = p;


                ExcelApp.DisplayAlerts = false; //保存Excel的时候,不弹出是否保存的窗口直接进行保存 
                //4.保存工作表
                ExcelApp.ActiveWorkbook.Save();

            }
            catch
            {
                MessageBox.Show("导出文件保存失败,可能原因该文件已打开!", "警告!");
            }
            finally
            {
                //5.关闭工作簿
                ExcelApp.ActiveWorkbook.Close();
                //6.退出excel
                ExcelApp.Quit();
                // PublicMethod.Kill(ExcelApp);
            }

        }
        #endregion

二、读取Excel数据

 #region 读取excel工作簿数据
        public Hashtable readExcel()
        {
            try
            {
                //2.打开已经存在的工作簿
                string path = "C:\\Users\\非黑不即白\\Desktop\\code.xlsx";
                //ExcelApp.Workbooks.Open(path, ReadOnly: true);
                Hashtable h = new Hashtable();


                Excel.Workbook wb = ExcelApp.Application.Workbooks.Open(path, ReadOnly: true); //取得工作簿
                Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets.get_Item(1);

                int rowsint = ws.UsedRange.Cells.Rows.Count; //得到行数

                Excel.Range rng1 = ws.Cells.get_Range("A2", "A" + rowsint); // 取得数据范围区域(不包括标题列)
                Excel.Range rng2 = ws.Cells.get_Range("B2", "B" + rowsint);

                string[,] arry = new string[rowsint - 1, 2];  //将新值赋给一个数组

                if (rowsint <= 1)
                {
                    //MessageBox.Show("无账户信息,请先注册!");  LoginWindow已做判断,无需重复
                    return null;
                }
                else
                {
                    if (rowsint == 2)  //解决表格有一个数据用户,再添加时报错的问题
                    {
                        arry[0, 0] = rng1.Value2.ToString();   //rng.value2获取单元格数据
                        arry[0, 1] = rng2.Value2.ToString();
                        h.Add(rng1.Value2.ToString(), rng2.Value2.ToString());
                        Console.WriteLine(rng1.Value2.ToString() + " :" + rng2.Value2.ToString());
                        return h;
                    }
                    else
                    {
                        for (int i = 1; i <= rowsint - 1; i++)
                        {
                            arry[i - 1, 0] = rng1.Value2[i, 1].ToString();   //rng.value2获取单元格数据
                            arry[i - 1, 1] = rng2.Value2[i, 1].ToString();
                            h.Add(rng1.Value2[i, 1].ToString(), rng2.Value2[i, 1].ToString());
                            Console.WriteLine(rng1.Value2[i, 1].ToString() + " :" + rng2.Value2[i, 1].ToString());
                        }
                        return h;
                    }
                }
            }
            catch
            {
                MessageBox.Show("read excel error");
                return null;
            }
            finally
            {
                //5.关闭工作簿
                ExcelApp.ActiveWorkbook.Close();
                //6.退出excel
                ExcelApp.Quit();
                //PublicMethod.Kill(ExcelApp); //关闭excel后台进程,此处无需添加
            }
        }
        #endregion
    }

    /* 关闭excel后台进程
    public class PublicMethod
    {
        [DllImport("User32.dll", CharSet = CharSet.Auto)]
        public static extern int GetWindowThreadProcessId(IntPtr hwnd, out int ID);
        public static void Kill(Excel.Application excel)
        {
            IntPtr t = new IntPtr(excel.Hwnd);//得到这个句柄,具体作用是得到这块内存入口 

            int k = 0;
            GetWindowThreadProcessId(t, out k);   //得到本进程唯一标志k
            System.Diagnostics.Process p = System.Diagnostics.Process.GetProcessById(k);   //得到对进程k的引用
            p.Kill();     //关闭进程k
        }
    }*/

本文参考来源:
1. WPF注册登录页面,同时将注册信息保存到一个excel中
2. C#中创建、打开、读取、写入、保存Excel的一般性代码
3. C#导出数据到Excel的几种方法
4. C#学习笔记三 数组、集合、哈希表
5. C#中哈希表(HashTable)的用法详解以及和Dictionary比较

相关标签: WPF学习 wpf