操做Excel導入的問題(轉)

當Excel導入成爲須要時,以前的導出Excel爲html方式的方法就受阻了,因而,須要開始新的百度與google來解決問題。html

前提爲OLEDB+Excel。數據庫

根據需求,多數是對於表的數據的導入。因而產生這麼一個需求過程:網絡

1。準備一個空的標準Excel。ide

2。根據表名查詢字段this

3。動態生成字段表頭google

4。Copy空的標準Excel,循環表頭生成新的標準Excel以二進制流導出。spa

5。用戶再根據表頭的提示添加數據再上傳提交。設計

1步和4步爲大致上爲網上搜出來的想法)excel

過程遇到這麼點問題:code

問題1:

網上1步和4步的想法,是先作好標準Excel,直接導出。因此代碼上用的insert into table直接往表添加數據了。

於本人的需求有點差距了,異常折騰了半天才折騰到用了Create Table。因而引起了第二個問題:

問題2:

在爲Excel Create Table 時,報「不能修改表'xxxx' 的設計。它在只讀數據庫中」,經本身這麼一想,再經網上那麼一忽悠。權限問題!。for遍了網絡,都直指這個權限問題。

因而就是一堆的往文件夾添加IUser_用戶名或EveryOne權限的解決方案,是挺折磨人的,檢查了N百遍仍是報的錯。

最後在某處看到一條關於數據連接連接的解釋以下:

 

代碼
若是把Excel看做數據庫,那麼要注意鏈接字符串:

private  readonly  string readConn =  " Provider=Microsoft.Jet.OLEDB.4.0; " + " Data Source={0}; "

              + " Extended Properties='Excel 8.0;HDR=YES;IMEX=1;' ";

HDR=YES 表示將sheet的第一行做爲列名,因此咱們默認excel的首行是列名。

IMEX= 1 表示大體的意思是使用導入的模式,把數字也做爲字符串來操做。


    有一點很重要。IMEX= 1,是一種導入的模式,因此首先這個文件要存在,若是不存在會報錯:「Microsoft Jet 數據庫引擎找不到對象 ' …\Customer.xls '。請肯定對象是否存在,並正確地寫出它的名稱和路徑」,並且這樣寫了之後就算文件是存在的,還有一個問題是不能對文件更新的,會提示「不能修改表  ' sheet1 ' 的設計。它在只讀數據庫中」等錯誤,甚至還有提示權限的問題。

 

因而去掉IMEX=1,問題解決。

因而問題3也產生了:

新建的表默認都排在最後了,沒法排在第一個,這樣用戶打開看到空的就很差,因而drop table xxx---》無效

忽悠下本身是否是方法不對頭,上網搜。因而又發現這麼段說明:

 

雖然 Jet OLE DB 提供程序容許您在 Excel 工做簿中插入和更新記錄,可是不容許進行 DELETE(刪除)操做。若是您嘗試對一個或多個記錄執行 DELETE 操做,您將收到如下錯誤信息: 
Deleting data  in a linked table  is not supported by  this ISAM.


這是將 Excel 工做簿做爲數據庫進行處理時所固有的限制。

 

因而,想了一個比較搜的主意

在空的Excel裏刪除兩個Sheet(默認有三個,系統限制必須存在一個)

而後將剩下的一個更名叫「xxx說明",在裏面寫操做說明。

 

至此,將就解決,還有不少工做排成隊在後面......

相關文章
相關標籤/搜索