讀取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格式打開文件,並且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();
        }

  

引用:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM