首页 > 编程语言 >c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件

c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件

时间:2023-08-08 10:32:26浏览次数:35  
标签:Office missing c# worksheet Cells Excel int Range


 

1、引用Microsoft.Office.Interop.Excel.dll


2、引用命名空间、使用别名

using System.Reflection;

using Excel = Microsoft.Office.Interop.Excel;

 

 

3.写入excel


写入函数

public void ToExcel(string strTitle)
        {
            int nMax = 9;
            int nMin = 4;

            int rowCount = nMax - nMin + 1;//总行数

            const int columnCount = 4;//总列数



            //创建Excel对象

            Excel.Application excelApp = new Excel.ApplicationClass();



            //新建工作簿

            Excel.Workbook workBook = excelApp.Workbooks.Add(true);



            //新建工作表

            Excel.Worksheet worksheet = workBook.ActiveSheet as Excel.Worksheet;



            设置标题

            //Excel.Range titleRange = worksheet.get_Range(worksheet.Cells[1, 1], worksheet.Cells[1, columnCount]);//选取单元格

            //titleRange.Merge(true);//合并单元格

            //titleRange.Value2 = strTitle; //设置单元格内文本

            //titleRange.Font.Name = "宋体";//设置字体

            //titleRange.Font.Size = 18;//字体大小

            //titleRange.Font.Bold = false;//加粗显示

            //titleRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//水平居中

            //titleRange.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;//垂直居中

            //titleRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;//设置边框

            //titleRange.Borders.Weight = Excel.XlBorderWeight.xlThin;//边框常规粗细



            //设置表头

            string[] strHead = new string[columnCount] { "序号", "范围", "分组1", "分组2" };

            int[] columnWidth = new int[4] { 8, 16, 8, 10 };

            for (int i = 0; i < columnCount; i++)
            {

                //Excel.Range headRange = worksheet.Cells[2, i + 1] as Excel.Range;//获取表头单元格

                Excel.Range headRange = worksheet.Cells[1, i + 1] as Excel.Range;//获取表头单元格,不用标题则从1开始

                headRange.Value2 = strHead[i];//设置单元格文本

                headRange.Font.Name = "宋体";//设置字体

                headRange.Font.Size = 12;//字体大小

                headRange.Font.Bold = false;//加粗显示

                headRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//水平居中

                headRange.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;//垂直居中

                headRange.ColumnWidth = columnWidth[i];//设置列宽

              //  headRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;//设置边框

               // headRange.Borders.Weight = Excel.XlBorderWeight.xlThin;//边框常规粗细

            }



            //设置每列格式

            for (int i = 0; i < columnCount; i++)
            {

                //Excel.Range contentRange = worksheet.get_Range(worksheet.Cells[3, i + 1], worksheet.Cells[rowCount - 1 + 3, i + 1]);

                Excel.Range contentRange = worksheet.get_Range(worksheet.Cells[2, i + 1], worksheet.Cells[rowCount - 1 + 3, i + 1]);//不用标题则从第二行开始

                contentRange.HorizontalAlignment = Excel.XlHAlign.xlHAlignCenter;//水平居中

                contentRange.VerticalAlignment = Excel.XlVAlign.xlVAlignCenter;//垂直居中

                //contentRange.Borders.LineStyle = Excel.XlLineStyle.xlContinuous;//设置边框

               // contentRange.Borders.Weight = Excel.XlBorderWeight.xlThin;//边框常规粗细

                contentRange.WrapText = true;//自动换行

                contentRange.NumberFormatLocal = "@";//文本格式

            }



            //填充数据

            for (int i = nMin; i <= nMax; i++)
            {

                int k = i - nMin;

                //excelApp.Cells[k + 3, 1] = string.Format("{0}", k + 1);

                //excelApp.Cells[k + 3, 2] = string.Format("{0}-{1}", i - 0.5, i + 0.5);

                //excelApp.Cells[k + 3, 3] = string.Format("{0}", k + 3);

                //excelApp.Cells[k + 3, 4] = string.Format("{0}", k + 4);

                excelApp.Cells[k + 2, 1] = string.Format("{0}", k + 1);

                excelApp.Cells[k + 2, 2] = string.Format("{0}-{1}", i - 0.5, i + 0.5);

                excelApp.Cells[k + 2, 3] = string.Format("{0}", k + 3);

                excelApp.Cells[k + 2, 4] = string.Format("{0}", k + 4);

            }



            //设置Excel可见

            excelApp.Visible = true;

        }

 

写入按钮函数:

private void button1_Click(object sender, EventArgs e)
        {
            ToExcel("方式3");

        }

 

结果:

c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件_excel

 

 

 

 

4.读取excel




添加一个opendiog用于选择要读取的excel

 


命名空间

using System.Diagnostics;

 

读取函数:



private void OpenExcel(string strFileName)
        {
            object missing = System.Reflection.Missing.Value;
            Excel.Application excel = new Excel.ApplicationClass();//lauch excel application
            if (excel == null)
            {
               this.label1.Text="Can't access excel";
            }
            else
            {
                excel.Visible = false; excel.UserControl = true;
                // 以只读的形式打开EXCEL文件
                Excel.Workbook wb = excel.Application.Workbooks.Open(strFileName, missing, true, missing, missing, missing,
                 missing, missing, missing, true, missing, missing, missing, missing, missing);
                //取得第一个工作薄
                Excel.Worksheet ws = (Excel.Worksheet)wb.Worksheets.get_Item(1);
                //取得总记录行数    (包括标题列)
                int rowsint = ws.UsedRange.Cells.Rows.Count; //得到行数
                //int columnsint = mySheet.UsedRange.Cells.Columns.Count;//得到列数
                //取得数据范围区域   (不包括标题列)  
                Excel.Range rng1 = ws.Cells.get_Range("A2", "A" + rowsint);  
                Excel.Range rng2 = ws.Cells.get_Range("B2", "B" + rowsint);
                Excel.Range rng3 = ws.Cells.get_Range("C2", "C" + rowsint);  
                Excel.Range rng4 = ws.Cells.get_Range("D2", "D" + rowsint);  
                object[,] arry1 = (object[,])rng1.Value2;   //get range's value
                object[,] arry2 = (object[,])rng2.Value2;
                object[,] arry3 = (object[,])rng3.Value2;   //get range's value
                object[,] arry4 = (object[,])rng4.Value2;
                //将新值赋给一个数组
                string[,] arry = new string[rowsint - 1, 4];
                //for (int i = 1; i <= rowsint - 1; i++)
                for (int i = 1; i <= rowsint - 2; i++)
                {
                   
                    arry[i - 1, 0] = arry1[i, 1].ToString();
                  
                    arry[i - 1, 1] = arry2[i, 1].ToString();

                    arry[i - 1, 2] = arry3[i, 1].ToString();
                   
                    arry[i - 1, 3] = arry4[i, 1].ToString();
                }
                string a = "";
                for (int i = 0; i <= rowsint - 3; i++)
                {
                    a += arry[i, 0] + "|" + arry[i, 1] + "|" + arry[i, 2] + "|" + arry[i, 3]+"\n";
                   
                }
               this.label1.Text=a;
            }
            excel.Quit(); excel = null;
          Process[] procs = Process.GetProcessesByName("excel");
            foreach (Process pro in procs)
            {
                pro.Kill();//没有更好的方法,只有杀掉进程
            }
            GC.Collect();
        }

 

读取按钮代码:

private void button1_Click(object sender, EventArgs e)
        {
            if (openFileDialog.ShowDialog() == DialogResult.OK)
            {
                OpenExcel(openFileDialog.FileName);
            }

        }

 


c#操作excel方式三:使用Microsoft.Office.Interop.Excel.dll读取Excel文件_excel_02

 

 

标签:Office,missing,c#,worksheet,Cells,Excel,int,Range
From: https://blog.51cto.com/u_16218512/7005094

相关文章

  • 代码覆盖率-Jacoco
    Jacoco1、什么是jacocojacoco是一个免费、开源java代码覆盖率工具。2、什么是代码覆盖率覆盖率是用来衡量测试代码对功能代码的测试情况,通过统计测试中对功能代码中行、分支、类等模拟场景数量,来量化说明测试的充分度。代码覆盖率=代码的覆盖程度,一种度量方式覆盖率简单说:跑......
  • Mac版PDF编辑器-Acrobat Pro DC 2023
    AcrobatProDC2023(pdf编辑器)是一款能让用户轻松创建和编辑多种pdf格式的实用工具,并且能够同时使用各种方法编辑大量pdf文件。AcrobatProDC是Mac上运行速度最快、处理能力最强、功能最丰富的工具之一。AcrobatProDC包括强大的图像编辑工具,可让您轻松编辑图片和视频,而......
  • AutoCAD2024软件Mac中文版最新功能介绍支持M1/2
    AutoCAD2024软件的最新功能,包括行业特定的工具集、新的自动化以及跨设备和Autodesk产品的无缝连接。AutodeskAutoCAD不仅提供出色的绘图功能,而且提供了对工程工具使用方法及工作流程进行全面优化的方式。所有这一切都使用户能够轻松地创建工程应用程序,从而帮助他们提高工作效......
  • C# 读取带CheckBox复选框控件的表格-并集成到Windows Service里面
    最近的项目要求读取xls文件内的单元格,并且单元格旁边会有复选框标识类型。搜了下只有java的POI有例子,NOPI看项目文档好像是没有实现读取控件的功能。java实现POI POI如何解析出excel中复选框是否被选中https://blog.csdn.net/qq_29832217/article/details/104413475 C#导......
  • Siemens 西门子S7-200 PLC使用高速脉冲输入测量瞬时流量
    西门子S7-200PLC高速计数功能除用于常见的运动控制系统转速测量之外,在流量计量方面也有着广泛的用途。由于PLC内部没有相应的算法来计算频率,因此,测定脉冲输出信号的流量计的瞬时流量就需要在STEP7Micro/WINSMART中通过以下三部分编程来实现:1、定义高速计数器计数流量计输出......
  • Mac之入门篇
    简单讲讲mac上几个比较重要的东西:1,homebrewmac上的包管理器,同apt-get,yum等一系列包管理器一同,作为命令行级别的应用商店,在安装软件和配置依赖之时有着不可取代的大用。2,office365中所周知,微软就是macos上程序的最大开发商(......
  • vscode搬家
    1、vscode搬家针对C盘空间不足的伙伴们注意,操作前先关闭vscode1.1、vscode相关目录C:\Users\helper\AppData\Roaming\CodeC:\Users\helper\AppData\Local\Programs\MicrosoftVSCodeC:\Users\helper\.vscode其中helper为当前登录系统的账户1.2、创建存放vscode相关文件......
  • Siemens 西门子S7-200 SMART PLC与组态王以太网通信
    组态王与S7-200SMARTPLC以太网通信,对于刚接触者有点难度,不知如何进行配置,如何通信,那么接下来教大家来一步一步来做通信。一、下载驱动第一步:(在组态王官方下载TCP驱动文件)下载链接:http://www.kingview.com/第二步:(下载完成,如下图所示)压缩文件二、配置TCP驱动文件第一步:(解......
  • Siemens 西门子S7-200 SMART PLC与MM440变频器USS通信
    1、控制要求S7-200SMARTPLC通过USS通讯方式MM440控制变频器,I0.0启动变频器、I0.1立即停车变频器、I0.2自由停车变频器、I0.3复位变频器故障、I0.4启动变频器正转、I0.5启动变频器反转及可以读取变频器当前电流与当前电压。2、PLCIO分配表3、编写程序第一步:(上电初始化......
  • Oracle 清理sysaux表空间-清理AWR分区数据
    ----0、表空间使用率colTABLESPACE_NAMEfora20;colPCT_FREEfora10;colPCT_USEDfora10;setlines200;SelectTablespace_Name,Sum_m,Max_m,Count_BlocksFree_Blk_Cnt,Sum_Free_m,To_Char(100*Sum_Free_m/Sum_m,'99.9999')||'%'AsPct_Free,100......