1. 程式人生 > >asp.net中開啟Excel上傳檔案,讀取資料的方法

asp.net中開啟Excel上傳檔案,讀取資料的方法

程式碼:

/// <summary>
    /// 開啟Excel檔案
    /// </summary>
    /// <param name="ExcelFileName">檔名</param>
    private void OpenExcelFile(string ExcelFileName)
    {
        Excel.Application App = new Excel.Application();
        if (App == null)
        {
            return;  //Excel尚未安裝
        }
        Excel.Workbook workbook = App.Workbooks.Open(@ExcelFileName,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing,
            Type.Missing, Type.Missing, Type.Missing, Type.Missing);
        CultureInfo CurrentCI = System.Threading.Thread.CurrentThread.CurrentCulture;
        try
        {
            App.Visible = false;
            App.DisplayAlerts = false;
            Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
            ProcessExcelData(workbook);
        }
        finally
        {
            App.Quit();
            Marshal.ReleaseComObject(workbook);
            while (Marshal.ReleaseComObject(App) > 0) ;
            workbook = null;
            App = null;
            GC.Collect();
            Thread.CurrentThread.CurrentCulture = CurrentCI;
        }
    }

    /// <summary>
    /// 提取Excel表格資料
    /// </summary>
    /// <param name="InputWorkbook"></param>
    /// <returns></returns>
    private Excel.Workbook ProcessExcelData(Excel.Workbook InputWorkbook)
    {
        Excel.Sheets sheets = InputWorkbook.Worksheets;
        Excel.Worksheet DataSheet = null;
        foreach (Worksheet sheet in sheets)
        {
            if (sheet.Name.ToLower() == "sheet1")
            {
                DataSheet = sheet;
                break;
            }
        }
        if (null == DataSheet)
        {
            return InputWorkbook;
        }

        庫存批次表 Bll = new 庫存批次表();
        庫存批次表Info Model;
        object TmpObj;
        Excel.Range FieldsRange = DataSheet.get_Range("A2", "K7");
        System.Array FieldNames = (System.Array)FieldsRange.Formula;
        for (int i = 0; i < FieldNames.GetLength(0); i++)
        {
            Model = new 庫存批次表Info();

            TmpObj = FieldNames.GetValue(i + 1, 1);
            Model.貨品ID = Convert.ToDecimal(TmpObj);

            TmpObj = FieldNames.GetValue(i + 1, 2);
            Model.貨品編碼 = Convert.ToDecimal(TmpObj);

            TmpObj = FieldNames.GetValue(i + 1, 3);
            Model.批次號 = Convert.ToString(TmpObj);

            TmpObj = FieldNames.GetValue(i + 1, 4);
            Model.入庫日期 = Convert.ToDateTime(TmpObj.ToString());

            TmpObj = FieldNames.GetValue(i + 1, 5);
            Model.入庫單號 = Convert.ToString(TmpObj);

            TmpObj = FieldNames.GetValue(i + 1, 6);
            Model.入庫資訊 = Convert.ToString(TmpObj);

            TmpObj = FieldNames.GetValue(i + 1, 7);
            Model.生產日期 = Convert.ToDateTime(TmpObj.ToString());

            TmpObj = FieldNames.GetValue(i + 1, 8);
            Model.過期日期 = Convert.ToDateTime(TmpObj.ToString());

            TmpObj = FieldNames.GetValue(i + 1, 9);
            Model.入庫數量 = Convert.ToDecimal(TmpObj);

            TmpObj = FieldNames.GetValue(i + 1, 10);
            Model.出庫數量 = Convert.ToDecimal(TmpObj);

            TmpObj = FieldNames.GetValue(i + 1, 11);
            Model.結存數量 = Convert.ToDecimal(TmpObj);


            Bll.Insert(Model);
        }
        FieldsRange = null;
        FieldNames = null;
        return InputWorkbook;
    }

呼叫方法:

OpenExcelFile(Server.MapPath(@"../UploadFile/")+strFileURL);