读取
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();
}
引⽤
: