引用自:http://blog.miniasp.com/post/2008/08/How-to-read-Excel-file-using-OleDb-correctly.aspx
當發現利用oledb匯入excel到資料庫發生某些欄位無法匯入(空白)或某些值進不去時(字串)
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Excel.xls;Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=1\";
1.Excel 8.0 : Excel 8.0 是 Office 97 的 Excel 格式,這個格式從 Excel 97 ~ Excel 2003 都相容
2.HDR ( HeaDer Row ): 若指定值為 Yes,代表 Excel 檔中的工作表第一列是欄位名稱
若指定值為 No,代表 Excel 檔中的工作表第一列就是資料了,沒有欄位名稱
3.IMEX ( IMport EXport mode ): IMEX 有三種模式,分別讀寫行為也不同,容後再述:
0 is Export mode
1 is Import mode
2 is Linked mode (full update capabilities)
當 IMEX=0 時為「匯出模式」,這個模式開啟的 Excel 檔案只能用來做「寫入」用途。
當 IMEX=1 時為「匯入模式」,這個模式開啟的 Excel 檔案只能用來做「讀取」用途。
當 IMEX=2 時為「連結模式」,這個模式開啟的 Excel 檔案可同時支援「讀取」與「寫入」用途。
所以當我們要開發 Excel 檔案匯入功能時,正確的 IMEX 設定應該是 1 才對,不過就算設定 IMEX=1 還不夠,還有一些需要注意的地方!
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Jet\3.5\Engines\Excel 位置,這裡有兩個非常重要的設定:
1. ImportMixedTypes
在 Excel 機碼中 ImportMixedTypes 的預設值為 Text,代表當你讀入 Excel 檔案時若每一列的資料格式不一致的話,
Jet Engine 預設會將欄位的資料格式自動轉成文字(Text)格式!
2. TypeGuessRows
在 Excel 機碼中 TypeGuessRows 的預設值為 8,代表當你讀入 Excel 檔案時若每一列的資料格式不一致的話,Jet Engine 會先讀取前 8 列的資料,用已判斷之後的資料格式是否固定。假設若前 8 列的資料都是「日期」格式,那麼在第 8 列之後的資料 Jet Engine 會自動解析成「日期」格式,但只要遇到有的資料不是「日期」格式時,就會回傳 Null 給 Jet Engine。要解決這個問題也很容易,只要將 Excel 機碼中 TypeGuessRows 的值改成 0 即可,只是若你匯入的資料量蠻大的話可能會影響資料讀取時的效能,因為 Jet Engine 會將所有資料讀完才會判斷出每個欄位應該用什麼資料格式。
修改完後,就不會有Datatable讀excel讀不到(沒設定IMEX = 1),
或是只決定前8行資料的格式就判定Datatable欄位的格式(修改TypeGuessRows值為0)
2009年10月30日 星期五
2009年10月29日 星期四
解決 DIV 包 DIV 超出範圍問題
<style type="text/css"> #mastercontent { position:relative; width:100%;height :100%;border-right: #ff3300 thin solid; border-top: #ff3300 thin solid; border-left: #ff3300 thin solid; border-bottom:#ff3300 thin solid;} #primary { position:absolute; margin-left: 200px; width:192px; border-right: #00cc66 thin solid; border-top: #00cc66 thin solid; border-left: #00cc66 thin solid; border-bottom:#00cc66 thin solid;} #secondary { position:absolute; width:192px; border-right: #0099cc thin solid; border-top: #0099cc thin solid; border-left: #0099cc thin solid; border-bottom:#0099cc thin solid;} </style> <div id = "mastercontent"> <div id = "primary"> <br/><br/><br/><br/> </div> <div id = "secondary"> <br/><br/><br/><br/><br/><br/><br/><br/><br/> </div> </div>出現了上圖的問題,又不想設定父DIV的高度(不同解析度會出現捲軸) 如果加上下面script即可解決
<script type="text/javascript"> var h = document.documentElement.clientHeight ; /*先抓畫面上可視範圍的高度*/ var obj1= document.getElementById ("mastercontent"); var obj2= document.getElementById ("primary"); var obj3= document.getElementById ("secondary"); obj1.style.height = h -60; /*設定div高度*/ obj2.style.height = h -66; obj3.style.height = h -66; </script>
2009年10月21日 星期三
2009年10月16日 星期五
迴圈處理畫面上的元件
當畫面上有多個元件
程式要同時塞值進去時,就可使用迴圈控制
不需要指定個別元件給值
'畫面上有4個TextBox
Dim txt() As String = {"TextBox1", "TextBox2", "TextBox3", "TextBox4"} Dim txt1(txt.Length) As TextBox For i As Integer = 0 To txt.Length - 1 txt1(i) = form1.FindControl(txt(i)) txt1(i).Text = i Next
2009年10月14日 星期三
Store Procedures with MSSQL and ASP.NET
(MSSQL)
CREATE PROCEDURE [dbo].[test] --新增預存程序test並給一輸入參數 @tool_no varchar(50) AS SELECT [Tool_No],[Serial_No],[Tool_Revision] FROM [ACF_Tooling].[dbo].[Main] WHERE Tool_No = @tool_no GO --exec test 'AAA'; --執行預存程式並給定輸入值(ASP.NET)
Dim ToolingConnectionString As New ConnectionString Dim conn As New SqlConnection(ToolingConnectionString.ToolingConnectionString) Dim sqlcmd As New SqlCommand("test", conn) Dim dt As New DataTable sqlcmd.CommandType = CommandType.StoredProcedure sqlcmd.Parameters.AddWithValue("@tool_no", TextBox1.Text) conn.Open() dt.Load(sqlcmd.ExecuteReader) conn.Close() If dt.Rows.Count > 0 Then GridView1.DataSource = dt GridView1.DataBind() End If
2009年10月13日 星期二
Silverlight 使用心得
最近由於公司內部要自辦訓練課程,
腦子突然想到Silverlight這套工具,
畢竟這也算是比較新的技術可以跟同事分享,
並且對一直想學Silverlight的我,順便也有學習的機會。
微軟在2007年7月推出Silverlight 1.0,短短的2年內已經到3.0目前
1.0的版本我有去嘗試,只能以重創形容...
一直到現在使用visual studio 2008(sp1) + Silverlight 2.0 + Expression Blend 2.0
總算玩出個結果,
只能說微軟剛推出的東西,真的不要輕易嘗試。
或許1.0的相容性及支援太差,當我使用2.0發現很好上手。
不過第一次使用還是吃了不少苦頭。
公司裡面目前還是使用Visual Studio 2005 而為了使用Silverlight 2.0 去借了VS2008,
還好公司有這軟體,不過是中文版的,
上網搜尋了一下Silverlight的環境安裝,
下載silverlight_sdk,結果失敗(1)...
原來是要相同語言,因為我的Visual Studio 2008是繁體中文版,
好不容易安裝好後,開始使用時,發現沒有網路上看到的Silverlight樣版,
原來還要安裝Silverlight_Tools,
結果失敗(2)...
原因是Silverlight_Tool線上安裝,結果被公司的proxy擋住。
總算安裝好Silverlight_Tools也看到了Silverlight樣版,
這時當然想使用一下Expression Blend 這套軟體,看人家介紹可以VS跟Blend互動,
好像不錯玩,結果失敗(3)...
原因是我裝的是Expression Blend 1.0,必須要相同版本才行,
還好公司剛好有Expression Blend 2.0。
當我在VS上在XAML檔上按右鍵,看到了"於Expression Blend中開啟",
結果失敗(4)...
原因查了老半天,原來Blend也要裝sp1,
安裝完後,測試的結果還算滿意,
其實這是一套很好的技術,但對於比較沒網頁基礎的人有點難度,
網路上的資源是不少,不過不是原文的,就是那幾篇文章(高手寫的文章對入門的新手有點難度),
市面上的書也就那幾本,大部分整本都寫code,
突然想到以前有一本書介紹說,為什麼很多書用的範例都打到記事本上
難道真的有人用記事本開發ASP.NET?
真搞不懂那麼多人連環境都架不起來了,市面上要找這樣的入門書好難。
腦子突然想到Silverlight這套工具,
畢竟這也算是比較新的技術可以跟同事分享,
並且對一直想學Silverlight的我,順便也有學習的機會。
微軟在2007年7月推出Silverlight 1.0,短短的2年內已經到3.0目前
1.0的版本我有去嘗試,只能以重創形容...
一直到現在使用visual studio 2008(sp1) + Silverlight 2.0 + Expression Blend 2.0
總算玩出個結果,
只能說微軟剛推出的東西,真的不要輕易嘗試。
或許1.0的相容性及支援太差,當我使用2.0發現很好上手。
不過第一次使用還是吃了不少苦頭。
公司裡面目前還是使用Visual Studio 2005 而為了使用Silverlight 2.0 去借了VS2008,
還好公司有這軟體,不過是中文版的,
上網搜尋了一下Silverlight的環境安裝,
下載silverlight_sdk,結果失敗(1)...
原來是要相同語言,因為我的Visual Studio 2008是繁體中文版,
好不容易安裝好後,開始使用時,發現沒有網路上看到的Silverlight樣版,
原來還要安裝Silverlight_Tools,
結果失敗(2)...
原因是Silverlight_Tool線上安裝,結果被公司的proxy擋住。
總算安裝好Silverlight_Tools也看到了Silverlight樣版,
這時當然想使用一下Expression Blend 這套軟體,看人家介紹可以VS跟Blend互動,
好像不錯玩,結果失敗(3)...
原因是我裝的是Expression Blend 1.0,必須要相同版本才行,
還好公司剛好有Expression Blend 2.0。
當我在VS上在XAML檔上按右鍵,看到了"於Expression Blend中開啟",
結果失敗(4)...
原因查了老半天,原來Blend也要裝sp1,
安裝完後,測試的結果還算滿意,
其實這是一套很好的技術,但對於比較沒網頁基礎的人有點難度,
網路上的資源是不少,不過不是原文的,就是那幾篇文章(高手寫的文章對入門的新手有點難度),
市面上的書也就那幾本,大部分整本都寫code,
突然想到以前有一本書介紹說,為什麼很多書用的範例都打到記事本上
難道真的有人用記事本開發ASP.NET?
真搞不懂那麼多人連環境都架不起來了,市面上要找這樣的入門書好難。
訂閱:
文章 (Atom)