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格式打开文件,并且UpdateLinks参数是2,Microsoft Excel将从附加到该文件的图表生成图表。如果参数为0,则不创建图表。 ///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,xlWindows或xlMSDOS。如果省略此参数,则使用当前的操作系统。 ///object Delimiter = Type.Missing:可选对象。如果该文件是一个文本文件,并且Format参数是6,则该参数是一个字符串,它指定要用作分隔符的字符。例如,使用Chr(9)作为制表符,使用“,”作为逗号,使用“;”分号,或使用自定义字符。只使用字符串的第一个字符。 ///object Editable = Type.Missing:可选对象。如果该文件是Microsoft Excel 4.0加载项,则此参数为True以打开加载项,以便它是一个可见的窗口。如果此参数为False或省略,加载项被打开为隐藏,并且它不能被隐藏。此选项不适用于在Microsoft Excel 5.0或更高版本中创建的加载项。如果该文件是Excel模板,请使用True为打开指定的模板进行编辑或False以基于指定的模板打开新的工作簿。默认值是False。 ///object Notify = Type.Missing:可选对象。如果无法以读/写模式打开文件,则该参数为True,将文件添加到文件通知列表中。 Microsoft Excel将以只读方式打开文件,轮询文件通知列表,然后在文件变得可用时通知用户。如果此参数为False或省略,则不会请求通知,并且任何尝试打开不可用的文件都将失败。 ///object Converter = Type.Missing:可选对象。打开文件时第一个文件转换器的索引。首先尝试指定的文件转换器;如果此转换器不能识别该文件,则尝试所有其他转换器。转换器索引由Microsoft.Office.Interop.Excel._Application.this [System.Object,System.Object]属性返回的转换器的行号组成。 ///object AddToMru = Type.Missing:可选对象。如果要将此工作簿添加到最近使用的文件列表中,则为true。默认值为False。 ///object Local = Type.Missing:可选对象。 True将文件保存为Microsoft Excel的语言(包括控制面板设置)。 False(默认值)将文件保存为Visual Basic for Applications(VBA)(通常为UU),除非WorkbeniesOpen运行的VBA项目是旧的国际化XL5 / 95 VBA项目。 ///object CorruptLoad = Type.Missing:可选对象。 可以是以下常量之一:xlNormalLoad,xlRepairFile,和xlExtractData。 如果没有指定值,默认行为通常是正常的,但如果Excel已经尝试打开文件,则可能是安全加载或数据恢复。 第一次尝试是正常的。 如果Excel在打开文件时停止运行,则第二次尝试是安全加载。 如果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(); }
引用:
时间: 2024-11-13 08:09:09