C#连接Excel

近期有需求要用C#来读Excel里的数据。上网查到了,为了以后查询方便,所以在此做个C#连接Excel小结。

步骤如下:

1、EXCEL.DLL 制作

首先需要在自己Office文件目录拿到EXCEL.EXE文件。

我自己EXCEL版本为2016,所以在C:\Program Files\Microsoft Office\Office16\EXCEL.EXE。自己可以在自己office安装目录下面去找,很容易找到。

进一步打开VS2013(或者其他版本同理)在VS的文件目录下找到visual Studio2013 命令提示工具,通过命令提示定位到EXCEL.EXE所在地,再利用运行“tlbimp Excel.EXE Excel.dll”的命令,将EXCEL.EXE文件编译为Excel.dll文件。通过以上操作可以较为快速得到EXCEL.DLL文件。

2、添加引用

在C#中添加引用,导入自己编译生成的EXCEL.DLL文件。并在抬头编写using Microsoft.Office.Interop.Excel;

3、写代码测试

先放图如下:

 

上面是从EXCEL直接读取到的数据。

代码如下:

                System.Diagnostics.Stopwatch watchtime = new Stopwatch();
                watchtime.Start();
                object missing = System.Reflection.Missing.Value;
                Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();

                //将新值赋给一个数组
                if (excel == null)
                {
                    MessageBox.Show("Can't create excel!");
                }
                else
                {
                    excel.Visible = false; excel.UserControl = true;
                   Workbook wb = excel.Application.Workbooks.Open(ExcelFileName, missing, true, missing, missing, missing
                        , missing, missing, missing, true, missing, missing, missing, missing, missing);

                    //取得第一个工作薄

                    Worksheet ws = (Worksheet)wb.Worksheets.get_Item(1);

                    //取得总记录行数   (包括标题列)
                    int rowsint = ws.UsedRange.Cells.Rows.Count; //得到行数

                    int columnsint = ws.UsedRange.Cells.Columns.Count;//得到列数

                   //获得点个数
                    SpaceRendezvousN = rowsint - 1;
                    //取得数据范围区域 (不包括标题列)        
                    Range exceldata;

                    string currentstr = "";
                    currentstr += (char)('A' + columnsint - 1);

                    exceldata = ws.Cells.get_Range('A' + "2", currentstr + "2" + rowsint);


                    object[,] arryItem = (object[,])exceldata.Value2;   //get range's value

                    for (int i = 0; i < rowsint - 1; i++)
                    {
                        //增加一个点位
                        int index = this.dataGridView1.Rows.Add();
                        SpaceRendezvous_OriData Space_rendezvous_data = new SpaceRendezvous_OriData();
                        for (int j = 0; j < columnsint; j++)
                        {
                            //Item_Code列
                            this.dataGridView1.Rows[i].Cells[j].Value = (arryItem[i + 1, j + 1]).ToString();
                        }
                        Space_rendezvous_data.Num = Convert.ToDouble(this.dataGridView1.Rows[i].Cells[0].Value);
                        Space_rendezvous_data.gcpX = Convert.ToDouble(this.dataGridView1.Rows[i].Cells[1].Value);
                        Space_rendezvous_data.gcpY = Convert.ToDouble(this.dataGridView1.Rows[i].Cells[2].Value);
                        Space_rendezvous_data.gcpZ = Convert.ToDouble(this.dataGridView1.Rows[i].Cells[3].Value);
                        Space_rendezvous_data.x = Convert.ToDouble(this.dataGridView1.Rows[i].Cells[4].Value);
                        Space_rendezvous_data.y = Convert.ToDouble(this.dataGridView1.Rows[i].Cells[5].Value);
                        SpaceRendezvous_ControlPoints.Add(Space_rendezvous_data);
                    }
                }
                watchtime.Stop();
                TimeSpan timespan = watchtime.Elapsed;
                excel.Quit();

                excel = null;

    上面代码标红的地方就是读取Excel数据的过程,有注释很容易看懂。值得注意的是最后excel.Quit()和excel = null;需要加上去,不然的话,你的内存会被你所创建的excel文件所塞满。

### C# 连接 Excel 的方法 #### 使用 OLEDB 方法连接并操作 Excel 文件 通过 `OleDb` 可以方便地读取和写入 Excel 表格中的数据。以下是完整的示例代码,用于创建与 Excel 文件的连接,并执行简单的插入操作: ```csharp using System; using System.Data.OleDb; class Program { static void Main() { string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\path\to\your\file.xlsx;Extended Properties='Excel 12.0 Xml;HDR=YES'"; using (OleDbConnection conn = new OleDbConnection(connectionString)) { try { conn.Open(); // 插入新记录到 Sheet1 中 string insertQuery = "INSERT INTO [Sheet1$] ([Column1], [Column2]) VALUES (?, ?)"; using (OleDbCommand cmd = new OleDbCommand(insertQuery, conn)) { cmd.Parameters.AddWithValue("@p1", "Value1"); cmd.Parameters.AddWithValue("@p2", "Value2"); int rowsAffected = cmd.ExecuteNonQuery(); Console.WriteLine($"{rowsAffected} row(s) inserted."); } } catch (Exception ex) { Console.WriteLine($"An error occurred: {ex.Message}"); } finally { if (conn.State == ConnectionState.Open) conn.Close(); } } } } ``` 此段代码展示了如何定义连接字符串、建立连接以及安全地处理异常情况[^1]。 #### 使用 EPPlus 库来简化 Excel 操作 对于更复杂的场景或者希望获得更好的性能和支持最新版本 Office 文档格式的应用程序来说,EPPlus 是一个非常受欢迎的选择。它允许开发者直接操纵 .xlsx 文件而无需依赖 Microsoft Office 安装环境。 安装 NuGet 包: ```bash Install-Package EPPlus ``` 下面是利用 EPPlus 添加工作表并向其中添加一些简单内容的例子: ```csharp using OfficeOpenXml; using System.IO; class Program { static void Main(string[] args) { FileInfo fileInfo = new FileInfo(@"C:\path\to\newFile.xlsx"); using (ExcelPackage package = new ExcelPackage(fileInfo)) { var worksheet = package.Workbook.Worksheets.Add("SampleSheet"); // 向单元格 A1 和 B1 写入值 worksheet.Cells[1, 1].Value = "Header1"; worksheet.Cells[1, 2].Value = "Header2"; // 填充更多行的数据... for (int i = 2; i <= 5; ++i) { worksheet.Cells[i, 1].Value = $"Row{i}_ColA"; worksheet.Cells[i, 2].Value = $"Row{i}_ColB"; } package.Save(); // 将更改保存至文件 } } } ``` 这段代码说明了怎样加载一个新的 Excel 工作簿实例,在里面增加一张新的工作表,并向指定位置填充值[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BoostingIsm

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值