『壹』 請教PB 程序導入Excel裡面的內容到資料庫
可以使用DDE連接excel進行表格操作,不過這種方法客戶端需要安裝office EXCEL程序,而且對版本有要求。
建議將excel文件另存為帶tab製表符的txt文本,然後用importfile函數導入。這種方法實際操作比較可靠
『貳』 pb如何把excel表中的信息導入資料庫中,還有如何防止數據的重復提交推薦這方面的書籍,謝謝了!
給你個思路,如果資料庫端是sql SERVER,可以用BCP寫一個存儲過程,然後在PB中調用。數據重復提交這塊可以使用時間段或是增加判別欄位。
『叄』 pb中如何把excel中的數據插入到資料庫中已存在的表格中還有序號怎麼更新
要把excel另存為txt文件,或csv文件...然後才能導入
『肆』 怎麼樣把excel數據導入到資料庫中
數據結構簡單的話直接在oracle 上建一個表,表列和EXCEL一致,然後在PL/SQL Develop上直接打開oracle表編輯數據,從EXCEL中拷貝數據,粘貼到Oracle表中即可。
直接傻瓜式導入的方法應該是沒有的,還有一個辦法就是你懂得PB開發,利用PB的數據管道。
把EXCEL作為一個ODBC數據源,然後使用數據管道,把數據導入到Oracle中。
『伍』 pb怎樣導入excel收藏 詳細�0�3
假如安裝,請與程序供應商聯系 !",QuesTion!) RETURN -1 END IF //增加空文檔 (EXCEL table) xlApp.Workbooks.Open(as_excelfile) //xlApp.Application.Visible = FALSE xlApp.DisplayAlerts = false //定位到第一格 Long l_cnt,l_rows,l_cols Long l_row,l_i Int i_cnt l_rows = 30 l_cols = 23 Long l_cno String s_cno,s_temp Long l_newrow //一次處理兩行 DataStore ds_todb IF NOT IsValid(ds_todb) THEN ds_todb = CREATE DataStore END IF ds_todb.DataObject = "dw_getdatafromexcel" ds_todb.SetTransObject(at_sqlca) FOR l_cnt = 2 TO l_rows STEP 2 Yield() l_row = l_cnt s_cno = String(xlapp.activeworkbook.activesheet.cells[l_row - 1,1].value) IF NOT IsNumber(s_cno) THEN CONTINUE FOR l_row = l_cnt - 1 TO l_cnt s_cno = xlapp.activeworkbook.activesheet.cells[l_row,1].FormulaR1C1 IF IsNull(s_cno) OR s_cno = "" THEN //非新行 FOR l_i = 4 TO l_cols STEP 2 s_temp = String(Trim(xlapp.activeworkbook.activesheet.cells[l_row,l_i].FormulaR1C1)) IF IsNull(s_temp) OR s_temp = "" THEN CONTINUE i_cnt++ ds_todb.SetItem(l_newrow,i_cnt,s_temp) NEXT ELSE //新行開始,清空數組 IF NOT IsNumber(s_cno) THEN CONTINUE l_newrow = ds_todb.InsertRow(0) ds_todb.SetItem(l_newrow,1,s_cno) //ds_todb.SetItem(l_newrow,2,gnvo_db.uf_todate(Long(xlapp.activeworkbook.activesheet.cells[l_ row,2].FormulaR1C1))) ds_todb.SetItem(l_newrow,3, Dec(xlapp.activeworkbook.activesheet.cells[l_row,3].FormulaR1C1)) i_cnt = 3 FOR l_i = 4 TO l_cols STEP 2 s_temp = String(Trim(xlapp.activeworkbook.activesheet.cells[l_row,l_i].FormulaR1C1)) IF IsNull(s_temp) OR s_temp = "" THEN CONTINUE i_cnt++ ds_todb.SetItem(l_newrow,i_cnt,s_temp) NEXT END IF NEXT NEXT xlApp.activeworkbook.close(false) xlapp.Application.quit() xlApp.DisConnectObject() //xlApp.Application.Workbooks.quit() IF IsValid(xlApp) THEN DESTROY xlapp END IF //gnvo_db.uf_closewin("Microsoft excel") IF ds_todb.Update() = 1 THEN COMMIT USING at_sqlca; MessageBox("導入數據","保存成功") ELSE ROLLBACK USING at_sqlca; MessageBox("導入數據","保存失敗") END IF IF IsValid(ds_todb) THEN DESTROY ds_todb END IF //FileDelete(as_excelfile) RETURN 1 Is_syspath=space(255) GetCurrentDirectoryA(255,Is_syspath) value=GetFileopenname(" 請選擇要導入 BOM 的 EXECL 類型文件!",ls_path,ls_filename,'xls','EXECL 文件(*.xls),*.xls') is_filename = mid(ls_filename,1,len(ls_filename) - 4) if value <> 1 then ////沒取到、或者取消返回 Return false end if Top 7 樓workhand(我可憨了...)回復於 2004-04-16 08:21:24 得分 0 Is_syspath=space(255) GetCurrentDirectoryA(255,Is_syspath) value=GetFileopenname(" 請選擇要導入 BOM 的 EXECL 類型文件!",ls_path,ls_filename,'xls','EXECL 文件(*.xls),*.xls') is_filename = mid(ls_filename,1,len(ls_filename) - 4) if value <> 1 then ////沒取到、或者取消返回 Return false end if 第一種方法 OLEObject ExcelServer long excelok string str_savename ExcelServer = CREATE OLEObject ExcelOK = ExcelServer.ConnectToNewObject( "excel.application" ) if excelok < 0 then messagebox("連接excel 失敗,檢查你的系統是否安裝了office",string(excelok)) return false else ExcelServer.Workbooks.Open(str_filename) str_savename="c:\temp.txt" excelserver.activeworkbook.saveas(str_savename,3) excelserver.displayalerts=false ExcelServer.quit() ExcelServer.DisconnectObject() DESTROY ExcelServer dw_acton.ImportFile(str_savename) filedelete(str_savename) return true end if 第二種方法 string ls_title, ls_str OLEObject xl, xlApp, xlbook, xlsheet xl = Create OLEObject st_stat.text = '正在連接...' int ret = 0 ret = xl.ConnectToObject(is_path, "Excel.Sheet" ) //打開一個已存在的工作表 if ret < 0 then messagebox("提示","不能打開所選的文件,可能是已被別人打開!") destroy xl return end if xlApp = xl.Application xlbook = xlapp.Workbooks[1] xlsheet = xlbook.Worksheets[1] //////// ////// ////// ////////以下是讀數據部分, 首先判斷有幾行數據,前面幾個都為空時則數據結束 long ll_i,ll_row,ll_ll int li_start //從第幾行開始是真正的數據 li_start = 4 //從第n 行開始是真正的數據 // do while ((ll_ll < 5) and (ll_i < 3000)) ll_i += 1 ls_str = xlsheet.cells[ ll_i,4 ].text //貨物名稱 ll_row = ll_i if ls_str = "" then ll_ll = 1 ls_str = xlsheet.cells[ ll_i,5 ].text if ls_str = "" then ll_ll += 1 ls_str = xlsheet.cells[ ll_i,6 ].text if ls_str = "" then ll_ll += 1 ls_str = xlsheet.cells[ ll_i+1,4 ].text if ls_str = "" then ll_ll += 1 ls_str = xlsheet.cells[ ll_i+2, 4 ].text if ls_str = "" then ll_ll += 1 end if end if end if end if end if loop // if ll_row > 2800 then messagebox("錯誤","行數太多, 不能導入!") goto l_exit end if //一共有ll_row - start 行 //// //ls_title = xlsheet.cells[1,1].text //標題, 這里可能有比較 //// ls_str = xlsheet.cells[1,2].text //合同號 if ls_str <> is_contractcode then messagebox( "導入出錯","合同號不符,請檢查[1,2]單元格" ) st_stat.text = "導入失敗, 請退出重來!" goto l_exit end if //// //ls_str = xlsheet.cells[2,2].text //合同名 //if ls_str <> is_contractname then // messagebox( "導入出錯","合同名不符,請檢查[2,2]單元格" ) // st_stat.text = "導入失敗, 請退出重來!" // goto l_exit //end if //// ////開始導入真正的數據 string ls_temp,ls_find long l_count,l_temp if (ll_row - 1) = li_start then messagebox( "提示","沒有數據可導!請檢查EXCEL 表格後,重來!" ) return end if for ll_i = li_start to ll_row - 1 st_stat.text = "正在導入第 " + string( ll_i - li_start + 1 ) + " 行," + '共有'+ string( ll_row - li_start) + '行' hpb_1.position = (( ll_i - li_start + 1 ) * 100/(ll_row - li_start)) l_count = dw_2.insertrow( 0 ) dw_2.setrow( l_count ) dw_2.object.f_id[ l_count ] = gf_get_max( 't_goodslist' ) //ID dw_2.object.f_contractid[ l_count ] = il_contractid //合同ID //從文件導入部分 dw_2.object.f_period[ l_count ] = xlsheet.cells[ ll_i, 1].text //期別 dw_2.object.f_mysys[ l_count ] = xlsheet.cells[ ll_i, 2].text //系統碼 dw_2.object.f_goodscode[ l_count ] = xlsheet.cells[ ll_i, 3].text //貨物編碼 dw_2.object.f_goodsname[ l_count ] = xlsheet.cells[ ll_i, 4].text //貨物名稱 dw_2.object.f_specif[ l_count ] = xlsheet.cells[ ll_i, 5].text //貨物規格 dw_2.object.f_parameter[ l_count] = xlsheet.cells[ ll_i, 6].text //主要技術參數 dw_2.object.f_factory[ l_count ] = xlsheet.cells[ ll_i, 7].text //製造廠 dw_2.object.f_goodstype[ l_count ] = xlsheet.cells[ ll_i, 8].text //貨物類別 dw_2.object.f_unit[ l_count ] = xlsheet.cells[ ll_i, 9].text //單位 //數量 ls_str = xlsheet.cells[ ll_i, 10].text if not isnumber( ls_str ) and ls_str <> '' then messagebox("錯誤","第["+ string( ll_i) + ',10]單元格必須是數字!') goto l_exit end if dw_2.object.f_quant[ l_count ] = dec(ls_str ) //數量 //出廠價 ls_str = xlsheet.cells[ ll_i, 11].text if not isnumber( ls_str ) and ls_str<>'' then messagebox("錯誤","第["+ string( ll_i) + ',11]單元格必須是數字!') goto l_exit end if dw_2.object.f_outprice[ l_count ] = dec(ls_str ) //出廠價 //運輸價 ls_str = xlsheet.cells[ ll_i, 12].text if not isnumber( ls_str ) and ls_str<>'' then messagebox("錯誤","第["+ string( ll_i) + ',12]單元格必須是數字!') goto l_exit end if dw_2.object.f_transprice[ l_count ] = dec(ls_str ) //運輸價 //保險價 ls_str = xlsheet.cells[ ll_i, 13].text if not isnumber( ls_str ) and ls_str<>'' then messagebox("錯誤","第["+ string( ll_i) + ',13]單元格必須是數字!') goto l_exit end if dw_2.object.f_guaranteep[ l_count ] = dec(ls_str ) //保險價 //其它價 ls_str = xlsheet.cells[ ll_i, 14].text if not isnumber( ls_str ) and ls_str<>'' then messagebox("錯誤","第["+ string( ll_i) + ',14]單元格必須是數字!') goto l_exit end if dw_2.object.f_otherprice[ l_count ] = dec(ls_str ) //其它價 //綜合單價 ls_str = xlsheet.cells[ ll_i, 15].text if not isnumber( ls_str ) and ls_str <> '' then messagebox("錯誤","第["+ string( ll_i) + ',15]單元格必須是數字!') goto l_exit end if dw_2.object.f_unitprice[ l_count ] = dec(ls_str ) //綜合單價 //外幣總價 ls_str = xlsheet.cells[ ll_i, 16].text if not isnumber( ls_str ) and ls_str <> '' then messagebox("錯誤","第["+ string( ll_i) + ',16]單元格必須是數字!') goto l_exit end if dw_2.object.f_totalprice[ l_count ] = dec(ls_str ) //外幣總價 dw_2.object.f_currency[ l_count ] = xlsheet.cells[ ll_i, 17].text //幣種 //匯率 ls_str = xlsheet.cells[ ll_i, 18].text if not isnumber( ls_str ) and ls_str <> '' then messagebox("錯誤","第["+ string( ll_i) + ',18]單元格必須是數字!') goto l_exit end if dw_2.object.f_exchange[ l_count ] = dec(ls_str ) //匯率 //匯率日期 ls_str = xlsheet.cells[ ll_i, 19].text if not isdate( ls_str ) and ls_str <> '' then messagebox("錯誤","第["+ string( ll_i) + ',19]單元格必須是日期!') goto l_exit end if dw_2.object.f_exchangedate[ l_count ] = datetime(date(ls_str )) //匯率日期 //人民幣單價 ls_str = xlsheet.cells[ ll_i, 20].text if not isnumber( ls_str ) and ls_str <> '' then messagebox("錯誤","第["+ string( ll_i) + ',20]單元格必須是數字!') goto l_exit end if dw_2.object.f_rmbunitprice[ l_count ] = dec(ls_str ) //人民幣單價 //人民幣總價 ls_str = xlsheet.cells[ ll_i, 21].text if not isnumber( ls_str ) and ls_str <> '' then messagebox("錯誤","第["+ string( ll_i) + ',21]單元格必須是數字!') goto l_exit end if dw_2.object.f_rmbtotalprice[ l_count ] = dec(ls_str ) //人民幣總價 //開始日期 ls_str = xlsheet.cells[ ll_i, 22].text if not isdate( ls_str ) and ls_str <> '' then messagebox("錯誤","第["+ string( ll_i) + ',22]單元格必須是日期!') goto l_exit end if dw_2.object.f_startdate[ l_count ] = datetime(date(ls_str )) //開始日期 //結束日期 ls_str = xlsheet.cells[ ll_i, 23].text if not isdate( ls_str ) and ls_str <> ''then messagebox("錯誤","第["+ string( ll_i) + ',23]單元格必須是日期!') goto l_exit end if dw_2.object.f_enddate[ l_count ] = datetime(date(ls_str )) //結束日期 dw_2.object.f_station[l_count] = xlsheet.cells[ ll_i,24].text //站點 dw_2.object.f_place[l_count] = xlsheet.cells[ ll_i,25].text //安裝位置 dw_2.object.f_gaisuan[l_count]= xlsheet.cells[ ll_i,26].text //概算碼 dw_2.object.f_memo[l_count]= xlsheet.cells[ ll_i,27].text //備注 //其它信息 dw_2.object.f_stat[l_count] = 0 dw_2.object.f_compquant1[l_count] = 0 dw_2.object.f_compquant2[l_count] = 0 dw_2.object.f_inquant1[l_count] = 0 dw_2.object.f_inquant2[l_count] = 0 dw_2.object.f_payquant[ l_count ] = 0 dw_2.object.f_changestat[ l_count ] = 0 dw_2.object.f_changecount[ l_count ] = 0 next st_stat.text = '導入成功!請選擇[保存]或[取消]。 保存--此次導入數據將提交到資料庫中,取消--則不提交!
『陸』 pb 如何讀取 excel 表 插入資料庫sql 求高手 指教!
1創建資料庫
USE [Report]
GO
/****** Object: Table [dbo].[BookInfo] Script Date: 11/29/2011 20:52:04 ******/
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[dbo].[BookInfo]') AND type in (N'U'))
DROP TABLE [dbo].[BookInfo]
GO
USE [Report]
GO
/****** Object: Table [dbo].[BookInfo] Script Date: 11/29/2011 20:52:04 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ANSI_PADDING ON
GO
CREATE TABLE [dbo].[BookInfo](
[省份] [varchar](50) NULL,
[市] [varchar](50) NULL,
[縣] [varchar](50) NULL,
[社區名字] [varchar](50) NULL,
[管理員名字] [varchar](50) NULL,
[手機號碼] [varchar](50) NULL,
[會員數] int NULL,
[錄入名字] [varchar](50) NULL,
[錄入時間] [varchar](50) NULL
) ON [PRIMARY]
GO
SET ANSI_PADDING OFF
GO
2個步驟
--開啟導入exec程序
exec sp_configure 'show advanced options',1
reconfigure
exec sp_configure 'Ad Hoc Distributed Queries',1
reconfigure
--改你所要execl的地址 Sheet2$ 看你的數據在哪裡
insert into BookInfo
SELECT * FROM OPENROWSET(
'Microsoft.Jet.OLEDB.4.0', 'EXCEL 5.0;HDR=YES;IMEX=2;DATABASE=E:\統計數據.xls'
,'SELECT * FROM [Sheet2$]')
--關閉導入exec程序
--使用完成後,關閉Ad Hoc Distributed Queries:
exec sp_configure 'Ad Hoc Distributed Queries',0
reconfigure
exec sp_configure 'show advanced options',0
reconfigure
改表的欄位對應execl每天執行sql語句,如果你要做成程序 把路徑改成文本框的就行了,相信你會罷。不會留言,
『柒』 pb中,如何將excel中某些內容作為資料庫的欄位導入資料庫
以下是完整的導入數據的代碼:這個要求就是需要使EXCEL的標題和數據窗口的標題對應,EXCEL從第二行開始導入。如果是某些內容,那麼要換一種別的方式。
string str_savename,named
int excelok,li_net
oleobject excelserver
excelserver=create oleobject
excelok=excelserver.connecttonewobject("excel.application")
//檢查返回值,以確保已成功地連接到了Excel
if excelok <> 0 then
messagebox("信息提示","連接EXCEL失敗,請檢查計算機中是否安裝了EXCEL!")
return
end if
li_net = GetFileOpenName("選擇文件", str_savename,named,"xls","Excel文件(*.xls),*.xls")
if li_net > 0 then
if str_savename = "" then return
excelserver.workbooks.open(str_savename)
excelserver.activesheet.cells.
dw_1.importclipboard(2) //導入數據 dw_1是數據窗口名字,改成你的名字
clipboard("")
excelserver.quit()
excelserver.disconnectobject()
destroy excelserver
end if
如果只導入EXCEL的某些內容,可以用如下代碼:
string ls_tmp
IF GetFileOpenName("選擇文件 ", ls_Path, ls_File, "XLS", "Excel Files (*.XLS),*.XLS, Comma-separated values (*.CSV),*.csv") < 0 THEN
Messagebox('文件導入', '獲取文件失敗!', StopSign!)
return
END IF
// === 判斷檔案是否存在
IF FileExists(ls_Path) = False THEN return
// === 判斷是否為Excel檔案
IF Lower(Right(ls_Path, 4)) <> '.xls' AND Lower(Right(ls_Path, 4)) <> '.csv'THEN
MessageBox('文件導入', '並非可選擇的文件!', StopSign!)
return
END IF
oXls = CREATE OleObject
ll_Xls = oXls.ConnectToObject('','excel.application')
CHOOSE CASE ll_Xls
Case -5
// === 文件還沒打開
oXls.ConnectToNewObject('excel.application')
Case Is < 0
DESTROY oXls
MessageBox('文件導入', '無法開啟指定的文件!', StopSign!)
return
END CHOOSE
Long ll_Row, curRow
Decimal ld_Tmp
curRow = 2 //設置從EXCEL的第二行開始導入
oBook = oXls.WorkBooks.Open(ls_Path)
oSheet = oXls.Sheets(1)
DO WHILE True
ls_value = oSheet.Cells(curRow, 1).Value //讀取excel的內容放到變數中,cells(行,列)
IF ls_value = '' THEN Exit //如果遇到空,表示已經導入完成
ll_Row = dw_1.InsertRow(0) //給數據窗口增加行
dw_1.setitem() ...
curRow ++
LOOP
oBook.Close
DESTROY oSheet
DESTROY oBook
IF ll_Xls = -5 THEN oXls.Application.Quit
oXls.DisConnectObject()
DESTROY oXls