Reference:http://www.dotblogs.com.tw/shadow/archive/2011/05/02/24045.aspx
常常碰到這種需求,為了避免自己每次寫Code都要東翻西找Sample,乾脆丟上來當備份
此外,也為了方便網路上的大大們Copy Paste方便,小弟已經順便標示要複製程式碼的起始結束位置
在歡樂的貼程式前
請先注意公司的測試機電腦是否有先做設定
簡單講一下程式碼流程:1.上傳Excel檔。2. ASP.net讀Excel資料,然後Insert into Table。3.把上傳的Excel檔宰掉,避免硬碟空間不夠。
using System.Collections.Generic; |
using Microsoft.Office.Interop; |
using Microsoft.Office.Interop.Excel; |
public class ExcelImport :System.Web.UI.Page |
Microsoft.Office.Interop.Excel.Application xlApp = null ; |
string upload_excel_Dir = @"D:\web\myWeb\" ; |
protected void lbtOK_Click( object sender, EventArgs e) |
string excel_filePath = "" ; |
excel_filePath = SaveFileAndReturnPath(); |
this .xlApp = new Microsoft.Office.Interop.Excel.Application(); |
this .xlApp.Workbooks.Open(excel_filePath, 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); |
this .wb = xlApp.Workbooks[1]; |
SaveOrInsertSheet(excel_filePath, (Worksheet)xlApp.Worksheets[1]); |
ClientScript.RegisterClientScriptBlock( typeof (System.Web.UI.Page), "匯入完成" , "alert('匯入完成');" , true ); |
System.Runtime.InteropServices.Marshal.ReleaseComObject( this .xlApp); |
System.Runtime.InteropServices.Marshal.ReleaseComObject( this .ws); |
System.Runtime.InteropServices.Marshal.ReleaseComObject( this .aRange); |
bool isDeleteFileFromServer = true ; |
if (isDeleteFileFromServer) |
System.IO.File.Delete(excel_filePath); |
private string SaveFileAndReturnPath() |
string return_file_path = "" ; |
if (FileUpload1.FileName != "" ) |
return_file_path = System.IO.Path.Combine( this .upload_excel_Dir, Guid.NewGuid().ToString() + ".xls" ); |
FileUpload1.SaveAs(return_file_path); |
#region 把Excel資料Insert into Table |
private void SaveOrInsertSheet( string excel_filename,Worksheet ws) |
this .aRange = ws.get_Range( "A" + rowIndex.ToString(), "C" + rowIndex.ToString()); |
while ((( object [,]) this .aRange.Value2)[1, 1] != null ) |
string cell1 = (( object [,]) this .aRange.Value2)[1, 1] != null ? (( object [,]) this .aRange.Value2)[1, 1].ToString() : "" ; |
string cell2 = (( object [,]) this .aRange.Value2)[1, 2] != null ? (( object [,]) this .aRange.Value2)[1, 2].ToString() : "" ; |
string cell3 = (( object [,]) this .aRange.Value2)[1, 3] != null ? (( object [,]) this .aRange.Value2)[1, 3].ToString() : "" ; |
this .aRange = ws.get_Range( "A" + rowIndex.ToString(), "C" + rowIndex.ToString()); |
2011.5.21 追記
本文介紹的方法,程式可以從Excel把資料抓出來,做商業邏輯處理後再Insert into Table
William哥 你好
回覆刪除謝謝你的文章 讓我增進不少
遇到了點小麻煩 想拜託你 指導一下
我以這邊文章為基礎 在家裡打了一個aspx的 excel 上傳到 sql 的程式
在家裡執行成功 資料也有進去 sql
但是帶到公司 發布上server 卻執行失敗
出現 "例外詳細資訊: System.NullReferenceException: 並未將物件參考設定為物件的執行個體。"
我有按照 "讀寫Excel的相關設定" 做設定
我的excel 有成功上傳到 server上指定的資料夾
然後就出現 System.NullReferenceException 錯誤了