C 讀取Excel(通過OleDb)

2021-06-11 17:00:58 字數 2577 閱讀 1524

通過oledb連線,讀取excel。

provider=microsoft.jet.oledb.4.0;" + "data source=" + filenameurl + ";extended properties='excel 8.0; hdr=yes; imex=1'

特別注意:

extended properties='excel 8.0;hdr=yes;imex=1'

a:hdr ( header row )預設值yes。

hdr=yes表示第一行是標題,不做為資料使用;當hdr=no,則表示第一行不是標題,做為資料來使用。

b: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=1 解決數字與字元混合時,識別不正常的情況。

當 imex=2 時為「鏈結模式」,這個模式開啟的 excel 檔案可同時支援「讀取」與「寫入」用途。

c:excel 8.0

對於excel 97以上版本都用excel 8.0

// 匯入收款單資料

protected void button2_click(object sender, eventargs e)

;for (int i = 0; i < names.length;i++ )

// 運算元據庫

insertdb();

}catch (exception ex)

}private void readexcel(string path, string name)

//取得每個sheet名

string ssheetname = ws.name;

dataset ds = execleds(path + name, ssheetname);

datatable dt = ds.tables["execl"];

for (int i = 0; i < dt.rows.count; i++)

//收款單號

idocumentno++;

string receiptdocumentno = "sk" + idocumentno;

alist.add(getinsertreceiptdocument(dt.rows[i], receiptdocumentno, name));}}

}private dataset execleds(string filenameurl,string sheet)

private receiptdocumentmodel getinsertreceiptdocument(datarow dr, string receiptdocumentno, string filename)

receiptdocumentmodel.machine_no = dr["整機機號"].tostring();

receiptdocumentmodel.receipt_status = "dl119001";

receiptdocumentmodel.receipt_amount = commonbll.convertexttoamount(dr["核銷金額"].tostring());

receiptdocumentmodel.receipt_verificated_amount = 0;

receiptdocumentmodel.receipt_refund_amount = 0;

receiptdocumentmodel.receipt_balance = commonbll.convertexttoamount(dr["核銷金額"].tostring());

receiptdocumentmodel.receipted_date = datetime.parse(dr["核銷日期"].tostring()).tostring("yyyy-mm-dd");

receiptdocumentmodel.creater = "admin";

receiptdocumentmodel.last_modify_date = datetime.today.tostring("yyyy-mm-dd");

receiptdocumentmodel.remark = dr["銷售合同號"].tostring();

return receiptdocumentmodel;

}// 運算元據庫

private void insertdb()

// 運算元據庫

int result = moneybll.updateaccount(insertobject, null);

if (result > 0)

else

}

oledb讀取Excel資料丟失原因

產生這種問題的根源與excel isam 3 indexed sequential access method,即索引順序訪問方法 驅動程式的限制有關,excel isam 驅動程式通過檢查前幾行中實際值確定乙個 excel 列的型別,然後選擇能夠代表其樣本中大部分值的資料型別 4 也即excel ...

c 乙個通過oledb讀取excel,csv的類

using system using system.collections.generic using system.text using system.data using system.data.oledb namespace synccardservice private void setfi...

OleDb方式讀取excel,和現實不符

開始時候按照嚴格的excel模板來執行,資料都是嚴格要求的,可是到了客戶那裡,什麼花招都來了.也不使用指定的模板了.導致乙個問題 資料列格式不一致 比如一列 前面幾個全部是數字型別,中間穿插幾個以字元形式儲存的數字.直接導致這些資料讀取為dbnull 怎麼解決.搜尋一下.發現這個是oledb的bug...