C#读写(OFFICE 2013)excel表格

这篇博客介绍了如何在C#中读写Office 2013的Excel表格。作者首先创建了一个Windows窗口应用程序,然后添加了所需的引用和名称空间。在写入数据的过程中遇到了Excel窗口弹出的问题,但最终解决了这个问题。同时,博客还展示了读取Excel数据的代码,并用TextBox显示读取结果。作者强调了遇到困难时冷静分析的重要性,并表达了对帮助他解决问题的人的感谢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

           其实昨天也分享过,但是,上篇笔记主要是 记录了添加组件添加名称空间。

            今天终于把数据通过代码写到了Excel表格中啦

----------向Excel中写入数据

          新建一个windows窗口应用程序。

        1,当然是要添加对应的引用,选择合适自己的版本。


        2, 添加完引用后,就可以添加名称空间啦

using System.Diagnostics;
using System.Runtime.InteropServices;
using Excel = Microsoft.Office.Interop.Excel;
      3,添加一个按钮,双击进入按钮的被单击事件函数中写上下面的代码:

 private void openBtn_Click(object sender, EventArgs e)
        {
            try
            {
                ///---检查当前系统中是否存在已经启动的Excel进程
                initailExcel();
                Excel.Workbook book = null;
                ///--指定工作表名
                Excel.Worksheet sheet = null;
                ///--文件地址
                string filepath = System.Windows.Forms.Application.StartupPath + "\\1.xlsx";//@"C:\Users\driver\Desktop\WindowsFormsApplication3\WindowsFormsApplication3\1.xlsx";
                //---实例化excel对象
                Excel.Application excel = new Excel.Application();
                ///---设置不可见
                excel.Visible = false;
                //---指定存在的excel,参数为路径名
                book = excel.Application.Workbooks.Open(filepath , Missing.Value,Missing.Value,Missing.Value,Missing.Value
,Missing.Value,Missing.Value,Missing.Value,Missing.Value
,Missing.Value,Missing.Value,Missing.Value,Missing.Value);

                //---获取当前需要操作的sheet
                sheet = (Excel.Worksheet)book.Sheets["Sheet1"];

                ///---写入数据
                ///---这里操作EXcel单元格,单元格的行列索引不是从0开始的,是从1开始的,
                ///---向第三行第二列的单元格添加数据
                sheet.Cells[3, 2] = 1.0;
                ///---向第三行第三列的单元格添加数据
                sheet.Cells[3, 3] = "晓帅歌";

                //---保存数据
                //book.SaveAs(filepath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                book.Save();

                sheet = null;
                book = null;
                excel.Quit();
                excel = null;
                ///---回收资源
                GC.Collect();
                ///---提示成功
                MessageBox.Show("保存成功");
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }
--------------    上面的代码中,关键是对指定单元格数据的写入。操作的单元格的行列索引不是从0开始,是从1开始的。请注意!!!-----------------------
        上面的代码中调用了一个函数, initailExcel,用来检查当前系统中是否存在 ExCel进程。我也是从 该博客笔记学到的。,源码如下:

        Excel.Application _Excel = null;
        ///---判断是否启动了excel
        void initailExcel()
        {
            //檢查PC有無Excel在執行
            bool flag = false;
            foreach (var item in Process.GetProcesses())
            {
                if (item.ProcessName == "EXCEL")
                {
                    flag = true;
                    break;
                }
            }

            if (!flag)
            {
                this._Excel = new Excel.Application();
            }
            else
            {
                object obj = Marshal.GetActiveObject("Excel.Application");//引用已在執行的Excel
                _Excel = obj as Excel.Application;
            }

            this._Excel.Visible = true;//設false效能會比較好
        }
      可以打开看看,是否将数据写入到Excel中。

-------- 我的问题

         实现过程中,会弹出Excel窗口,虽然窗口上什么都没有。我也设置了Excel.Visible =false。但是没效果。不知道什么原因。

-----------------读取Excel中的数据

        读取表中的值的方法与写入表中的值的方法是类似的。新添加一个按钮,双击进入其被单击事件函数,如下代码:

 //----获取数据
        private void getBtn_Click(object sender, EventArgs e)
        {
            try
            {
                string filepath = System.Windows.Forms.Application.StartupPath + "\\1.xlsx";//@"C:\Users\driver\Desktop\WindowsFormsApplication3\WindowsFormsApplication3\1.xlsx";
                //---实例化excel对象
                Excel.Application excel = new Excel.Application();
                ///---设置不可见
                excel.Visible = false;

                Excel.Workbook book = null;
                ///--指定工作表名
                Excel.Worksheet sheet = null;

                //---指定存在的excel,参数为路径名
                book = excel.Application.Workbooks.Open(filepath, Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value
, Missing.Value, Missing.Value, Missing.Value, Missing.Value);

                //---获取当前需要操作的sheet
                sheet = (Excel.Worksheet)book.Sheets["Sheet1"];

               ///---读取EXcel单元格的值
               ///---这里是获取固定位置上的值
               ///---这里获取的是  行索引为 1列 索引为1的单元格的值
               Range range = (Excel.Range)sheet.Cells[1,1];
                ///---显示获取的值
               textBox1.Text = range.Text;

                //---保存数据
                //book.SaveAs(filepath, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value, XlSaveAsAccessMode.xlNoChange, Missing.Value, Missing.Value, Missing.Value, Missing.Value, Missing.Value);
                book.Save();
                //---关闭打开的表
                book.Close();

                sheet = null;
                book = null;
                excel.Quit();
                excel = null;
                ///---回收系统资源
                GC.Collect();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
        }

   -----获取值结果

      这里我用TextBox来显示获取到的值。,结果如下图:




------------提         示-------------
      上面的代码太多,可能关键的东西还是没说清楚。我是为了完整列出我操作时候的代码。

     1,向Excel中写入数据,关键代码:

                ///---写入数据
                ///---这里操作EXcel单元格,单元格的行列索引不是从0开始的,是从1开始的,
                ///---向第三行第二列的单元格添加数据
                sheet.Cells[3, 2] = 1.0;
                ///---向第三行第三列的单元格添加数据
                sheet.Cells[3, 3] = "晓帅歌";
    2,读取指定位置的代码并显示

               ///---读取EXcel单元格的值
               ///---这里是获取固定位置上的值
               ///---这里获取的是  行索引为 1列 索引为1的单元格的值
               Range range = (Excel.Range)sheet.Cells[1,1];
                ///---显示获取的值
               textBox1.Text = range.Text;
   3,这里注意,在Excel下有个Allication的属性,而Windows窗体也有个属性Application,请在使用的时候,注明所使用的名称空间下的Application。

  -----------------感谢

      昨晚弄了一晚上这个了,说真的,当时真的感觉相当难,不知道遇到的问题怎么解决,无从下手。今天早上冷静下来了,分析了下,重新确定了突破C#操作Excel的方向。效果就出来了。再次告诫自己,遇到问题要冷静分析,不要因为做不出来,解决不了当前的问题就放弃。要自信,相信自己。就像睿哥那样的自信。大笑

      再次感谢睿哥。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值