新客立减

读取

EXCEL

的⽅法(⽤范围区域读取数据)

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Windows.Forms;

using System.Diagnostics;

using Microsoft.Office.Interop.Excel;

using System.Data.OleDb;

using System.Diagnostics;

private void OpenExcel(string strFileName)

        {

            object missing = System.Reflection.Missing.Value;

            Microsoft.Office.Interop.Excel.Application excel = new Microsoft.Office.Interop.Excel.Application();//

启动

Excel

应⽤程序

            if (excel == null)

            {

                System.Web.HttpContext.Current.Response.Write("<script>alert('Can't access excel')</script>");

            }

            else

            {

                excel.Visible = false;//

对象是否可见

                excel.UserControl = true;//

如果应⽤程序可见或者由⽤户创建或启动,则为

true

 

如果您使⽤

CreateObject

GetObject

函数以编程⽅式创建或启动应⽤程序,并且隐藏应⽤程序,则为

False

                #region 

以只读的形式打开

EXCEL

⽂件

                ///Workbook: 

代表⼀个

Microsoft Excel

⼯作簿。

                ///Workbook Open

⽅法打开⼀个打开⼀个⼯作簿。

                ///

参数表

:

                ///string Filename:

⽂件名

,

要打开的⼯作簿的⽂件名。

                ///object UpdateLinks = Type.Missing:

可选对象。指定⽂件中链接的更新⽅式。如果省略此参数,则会提⽰⽤户指定如何更新链接。否则,该参数是下表中列出的值之⼀。如果

Microsoft Excel

WKS

WK1

WK3

格式打开⽂件,并且

Up

                ///object ReadOnly = Type.Missing:

可选对象。如果是以只读模式打开⼯作簿。

                ///object Format = Type.Missing:

可选对象。如果

Microsoft Excel

正在打开⽂本⽂件,则此参数将指定分隔符,如下表所⽰。如果省略此参数,则使⽤当前分隔符。

                ///object Password = Type.Missing:

可选对象。包含打开受保护⼯作簿所需密码的字符串。如果省略此参数并且⼯作簿需要密码,则会提⽰⽤户输⼊密码。

                ///object WriteResPassword = Type.Missing:

可选对象。包含写⼊写保护⼯作簿所需密码的字符串。如果省略此参数并且⼯作簿需要密码,则会提⽰⽤户输⼊密码。

                ///object IgnoreReadOnlyRecommended = Type.Missing:

可选对象。如果

Microsoft Excel

不显⽰只读推荐消息(如果⼯作簿是使⽤

只读推荐

选项保存的),则为真。

                ///object Origin = Type.Missing:

可选对象。如果该⽂件是⼀个⽂本⽂件,则该参数指⽰它来⾃何处(以便代码页和回车

/

换⾏符(

CR / LF

)可以正确映射)。可以是以下

Microsoft.Office.Interop.Excel.XlPlatform

常量之⼀:

xlMacintosh

x

                ///object Delimiter = Type.Missing:

可选对象。如果该⽂件是⼀个⽂本⽂件,并且

Format

参数是

6

,则该参数是⼀个字符串,它指定要⽤作分隔符的字符。例如,使⽤

Chr

9

)作为制表符,使⽤

“,”

作为逗号,使⽤

“;”

分号,或使⽤⾃定义字符

                ///object Editable = Type.Missing:

可选对象。如果该⽂件是

Microsoft Excel 4.0

加载项,则此参数为

True

以打开加载项,以便它是⼀个可见的窗⼝。如果此参数为

False

或省略,加载项被打开为隐藏,并且它不能被隐藏。此选项不适⽤于在

                ///object Notify = Type.Missing:

可选对象。如果⽆法以读

/

写模式打开⽂件,则该参数为

True

,将⽂件添加到⽂件通知列表中。

 Microsoft Excel

将以只读⽅式打开⽂件,轮询⽂件通知列表,然后在⽂件变得可⽤时通知⽤户。如果此参数为

F

                ///object Converter = Type.Missing:

可选对象。打开⽂件时第⼀个⽂件转换器的索引。⾸先尝试指定的⽂件转换器

;

如果此转换器不能识别该⽂件,则尝试所有其他转换器。转换器索引由

Microsoft.Office.Interop.Excel._Application.this [Sy

                ///object AddToMru = Type.Missing:

可选对象。如果要将此⼯作簿添加到最近使⽤的⽂件列表中,则为

true

。默认值为

False

                ///object Local = Type.Missing:

可选对象。

 True

将⽂件保存为

Microsoft Excel

的语⾔(包括控制⾯板设置)。

 False

(默认值)将⽂件保存为

Visual Basic for Applications

VBA

)(通常为

UU

),除⾮

WorkbeniesOpen

运⾏的

VBA

项⽬是

                ///object CorruptLoad = Type.Missing:

可选对象。

 

可以是以下常量之⼀:

xlNormalLoad

xlRepairFile

,和

xlExtractData

 

如果没有指定值,默认⾏为通常是正常的,但如果

Excel

已经尝试打开⽂件,则可能是安全加载或数据恢复。

 

第⼀次

                #endregion

                Workbook wb = excel.Application.Workbooks.Open(strFileName, missing, true, missing, missing, missing,missing, missing, missing, true, missing, missing, missing, missing, missing);

                #region 

取得第

1

个⼯作薄

                ///Worksheets:

返回⼀个代表指定⼯作簿中所有⼯作表的

Microsoft.Office.Interop.Excel.Sheets

集合。

 

只读表格对象。

                #endregion

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

                #region 

取得总记录⾏数

(

包括标题列

)

                ///UsedRange:

返回⼀个

Microsoft.Office.Interop.Excel.Range

对象,该对象表⽰指定⼯作表上使⽤的范围。

 

只读。

                ///Cells:

返回⼀个

Range

对象,它表⽰指定范围内的单元格。

                ///Rows

返回表⽰指定范围内的⾏的

Microsoft.Office.Interop.Excel.Range

对象。

                ///Count:

返回集合中的对象数量。

                #endregion

                int rowsint = ws.UsedRange.Cells.Rows.Count; //

得到⾏数

                int columnsint = ws.UsedRange.Cells.Columns.Count;//

得到列数

                //

取得数据范围区域

 (

不包括标题列

)

                //Range:

表⽰单元格、⾏、列、包含⼀个或多个相邻单元格块或三维范围的单元格的选择。

 

                Range rng1 = ws.Cells.get_Range("B2", "B" + rowsint);   //item

                Range rng2 = ws.Cells.get_Range("K2", "K" + rowsint); //Customer

                object[,] arryItem = (object[,])rng1.Value2;   //

获取范围的值

                object[,] arryCus = (object[,])rng2.Value2;

                //

将新值赋给⼀个数组

                string[,] arry = new string[rowsint - 1, 2];

                for (int i = 1; i <= rowsint - 1; i++)

                {

                    //Item_Code

                    arry[i - 1, 0] = arryItem[i, 1].ToString();

                    //Customer_Name

                    arry[i - 1, 1] = arryCus[i, 1].ToString();

                }

                System.Web.HttpContext.Current.Response.Write(arry[0, 0] + " / " + arry[0, 1] + "#" + arry[rowsint - 2, 0] + " / " + arry[rowsint - 2, 1]);

            }

            excel.Quit(); excel = null;//

退出

Microsoft Excel

            System.Diagnostics.Process[] procs = System.Diagnostics.Process.GetProcessesByName("excel");

            foreach (Process pro in procs)

            {

                pro.Kill();//

没有更好的⽅法

,

只有杀掉进程

            }

            GC.Collect();

        }

  

引⽤

: